Overview
Amazon EKS Pod Identity는 EKS에서 Kubernetes 서비스 계정과 IAM 역할을 간편하게 연결하여 Pod 단위의 AWS 자격 증명 제공을 자동화하는 기능이다.
2023년 12월 정식 출시되었으며, 기존 IRSA(서비스 계정용 IAM 역할) 방식보다 구성 및 운영이 간단하고 유연하다는 장점이 있다.
EKS Pod Identity는 클러스터에 별도의 OIDC 설정 없이 IAM 역할을 매핑할 수 있어, 멀티 클러스터 환경이나 CI/CD 자동화, 보안 통제에 탁월한 기능이다.
본 글에서는 기존 IRSA와의 차이점, 작동 원리, 실습 방법, 실무 활용 포인트까지 모두 정리한다.

📅 관련 글
2022.02.13 - [AWS] - AWS IAM (Identity and Access Management) 개요 및 설정 방법
2022.02.07 - [AWS] - AWS EC2 인스턴스 생성
2022.02.13 - [AWS] - AWS S3 (Simple Storage Service) 개요 및 활용 방법
2023.03.30 - [AWS] - AWS Secrets Manager란?(OAuth, SSO)
2023.03.29 - [AWS] - AWS CLI 정리
2023.03.28 - [AWS] - AWS IAM이란?
2023.03.28 - [AWS] - AWS S3 권한이란?
2023.03.28 - [AWS] - AWS S3란?(개념, 속성)
2023.03.30 - [AWS] - AWS Cloudfront란? / Canary 및 Blue-Green 배포
2023.04.03 - [AWS] - AWS VPC란?
2023.05.26 - [AWS] - AWS IRSA(IAM Roles for Service Accounts)란?
2024.11.07 - [AWS] - AWS Ingress Annotations 정리
2024.11.04 - [AWS] - AWS Assume Role이란?
2024.11.16 - [AWS] - AWS Network ACL vs Security Group
2024.11.21 - [AWS] - ALB access Log 활성화 → S3 권한 설정 및 로그 저장
2024.11.24 - [AWS] - EKS Pod Identity Addon
2024.11.27 - [AWS] - AWS DynamoDB란?
2025.01.03 - [AWS] - AWS DynamoDB Local 설치
EKS Pod Identity 이란?
Amazon EKS Pod Identity는 2023년 12월에 출시 되었다.
Amazon EKS Pod Identity는 Amazon EC2 인스턴스 프로파일이 Amazon EC2 인스턴스에 자격 증명을 제공하는 것과 비슷한 방식으로 애플리케이션에 대한 자격 증명을 관리하는 기능을 제공한다.
추가 EKS Auth API와 각 노드에서 실행되는 에이전트 Pod를 통해 워크로드에 보안 인증 정보를 제공 한다.
Pod Identity Webhook은 EKS 클러스터의 Kubernetes API 서버와 통합되어 Kubernetes 서비스 계정(Service Account)을 사용해 IAM 역할을 파드에 연결할 수 있게 한다. 이를 통해 클러스터 내 파드가 특정 AWS 리소스에 액세스할 수 있도록 제한적인 권한을 부여할 수 있다.
이 기능은 IAM Roles for Service Accounts (IRSA)라는 AWS EKS 기능의 핵심 요소 중 하나이다.
이제 Amazon EKS Pod Identity를 사용하면 Kubernetes Identity에 AWS 권한을 부여하는 작업을 더 쉽게 구성하고 자동화할 수 있다. 클러스터 관리자는 더 이상 모든 AWS 리소스에 대한 애플리케이션을 인증하기 위해 Amazon EKS와 IAM 서비스 사이를 전환할 필요가 없다.
작동 원리
서비스 계정과 IAM 역할 연결
- Kubernetes 서비스 계정을 IAM 역할과 연결
- 서비스 계정이 사용하는 IAM 역할에는 필요한 AWS 리소스에 대한 권한을 정의
Pod Identity Webhook
- EKS Pod Identity Webhook은 클러스터에서 Pod가 시작될 때, Pod의 서비스 계정을 확인하고, 관련된 IAM 역할의 웹 ID 토큰을 발급
- Pod는 이 토큰을 사용하여 AWS 리소스에 액세스할 때 자격 증명으로 활용
STS AssumeRoleWithWebIdentity API 호출
- Pod는 서비스 계정과 연결된 IAM 역할을 기반으로 AWS STS(Security Token Service)를 호출하여 임시 자격 증명을 요청
- 이 임시 자격 증명으로 제한된 AWS 리소스에 액세스할 수 있다.
IAM Role Mapping 예시 (다중 SA에 단일 Role 매핑)
하나의 IAM 역할을 여러 Kubernetes 서비스 계정에 매핑하여 권한을 공유하는 전략은 운영 복잡성을 줄이고, 동일한 권한 그룹을 정의하는 데 유용하다. 단, 최소 권한 원칙(Least Privilege Principle)을 충실히 적용하도록 주의한다.
eks.amazonaws.com/role-arn
을 동일한 ARN으로 여러 ServiceAccount에서 사용
장점
보안 강화
- Pod별로 개별 IAM 역할을 할당할 수 있어 최소 권한 원칙(Least Privilege Principle)을 적용한다.
- EC2 인스턴스 프로파일에 종속되지 않으므로 자격 증명 유출 가능성을 줄인다.
관리 용이성
- Pod에서 AWS SDK를 사용하여 자격 증명 관리를 간소화합니다.
- AWS CLI 또는 SDK를 사용할 때 자동으로 자격 증명을 제공받을 수 있다.
정밀한 권한 제어
- 특정 서비스 계정과 연관된 Pod만 해당 IAM 역할의 권한을 사용할 수 있도록 제한할 수 있다.
사용 방법
EKS 클러스터 설정
- EKS 클러스터를 생성할 때 Pod Identity Webhook이 활성화되도록 설정
- IRSA를 사용하려면 OIDC 공급자를 클러스터에 연결
OIDC 공급자 생성
- eksctl 또는 AWS CLI를 사용하여 OIDC 공급자를 생성
eksctl utils associate-iam-oidc-provider \\
--region <region> \\
--cluster <cluster-name> \\
--approve
IAM 역할 생성 및 서비스 계정 연결
- 특정 권한을 가진 IAM 역할을 생성하고, 서비스 계정에 연결
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-service-account
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::<account-id>:role/<role-name>
Pod에 서비스 계정 지정
- Deployment 또는 Pod YAML 파일에서 서비스 계정을 참조
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
template:
spec:
serviceAccountName: my-service-account
IAM 정책 추가
- 역할에 AWS 리소스 액세스를 위한 IAM 정책을 연결
eksctl + Helm 연동 예시
Helm 배포 시 values.yaml
에 아래처럼 annotations를 지정하면 자동으로 Pod Identity 연결이 이루어진다.
serviceAccount:
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/my-pod-role
Pod Identity와 S3 연동 실습
IAM 역할에 AmazonS3ReadOnlyAccess
정책을 부여하고, 아래와 같이 서비스 계정과 배포를 구성해 테스트할 수 있다.
# 서비스 계정 정의
apiVersion: v1
kind: ServiceAccount
metadata:
name: s3-access-sa
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/EKSPodS3Access
---
# 간단한 배포 예제
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-app
spec:
replicas: 1
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
serviceAccountName: s3-access-sa
containers:
- name: app
image: amazonlinux
command: ["/bin/sh"]
args: ["-c", "yum install -y aws-cli && aws s3 ls"]
IAM Roles for Service Accounts (IRSA) vs AWS EKS Pod Identity (Agent Addon)
Feature | IRSA | Pod Identity |
OIDC Provider Requirement | Required for each cluster | Not required |
Role Tied to Cluster | Yes (OIDC URL is unique per cluster) | No (One role for multiple clusters) |
Ease of Role Sharing | Limited (Separate roles per cluster) | Simplified (One role for multiple clusters) |
Granular Permissions | Yes (Per service account in a cluster) | Yes (Supports granular policies as well) |
Setup Complexity | Moderate (OIDC provider and role per cluster) | Easier (No OIDC, centralized role management) |
AWS EKS IRSA
주요 특징
- 클러스터별 역할
- IRSA에서 각 EKS 클러스터에는 OpenID Connect(OIDC) ID 공급자를 생성하고 클러스터와 연결해야 한다.
- IAM 역할은 클러스터별 Kubernetes 네임스페이스의 특정 서비스 계정과 연결되어 있다.
- 세밀한 역할 관리
- 역할은 각 클러스터에 고유한 OIDC 발급자 URL에 연결되어 있으므로 각 클러스터 또는 서비스 계정에 대해 별도의 IAM 역할을 생성해야 한다.
- 예를 들어 IAM 역할의 ARN에는 클러스터와 관련된 OIDC 공급자 URL이 포함된다.
- 역할 범위
eks.amazonaws.com/role-arn: arn:aws:iam::<account-id>:role/<role-name>
- 각 IAM 역할은 클러스터의 OIDC 공급자로 범위가 지정되므로 여러 클러스터에서 역할을 공유하기가 어렵다
- 클러스터가 여러 개인 경우 클러스터별로 별도의 IAM 역할을 생성하고 이를 해당 클러스터의 서비스 계정과 연결해야 한다.


AWS EKS Pod Identity Agent Addon
주요 특징
- 클러스터 간 역할 공유
- Pod ID는 클러스터별 OIDC 공급자에 대한 필요성을 추상화
- 여러 EKS 클러스터에서 공유할 수 있는 단일 IAM 역할을 사용할 수 있다.
- 단순화된 역할 관리
- Pod ID를 사용하면 역할이 특정 OIDC 공급자 또는 클러스터에 연결되지 않는다.
- ID 매핑은 중앙에서 처리되며 클러스터 전체의 Kubernetes 서비스 계정은 동일한 IAM 역할을 사용할 수 있다.
- 작동 방식
- Pod ID 에이전트 애드온은 Kubernetes Pod와 AWS Identity and Access Management(IAM) 사이의 브리지 역할을 한다.
- Pod는 OIDC 공급자 없이 동적으로 IAM 역할을 맡는다. 이를 통해 액세스 정책을 원활하게 확장하고 보다 쉽게 관리할 수 있다.


IMDSv2 란?
IMDSv2 (Instance Metadata Service Version 2)는 AWS EC2 인스턴스의 메타데이터에 대한 보안 강화 버전의 액세스 방법이다.

IMDSv1과 IMDSv2의 주요 차이점


토큰 기반 세션
- 메타데이터 접근 전 PUT 요청으로 토큰 획득 필요
- 토큰의 TTL 지정 가능 (최대 6시간)
보안 강화
- SSRF(Server-Side Request Forgery) 공격 방지
- 네트워크 홉 제한 (기본값: 1)
- 필수 헤더 검증
엔드포인트
- 기본 URL: http://169.254.169.254
- 링크-로컬 주소 사용
접근 방법
# 토큰 획득
TOKEN=`curl -X PUT "<http://169.254.169.254/latest/api/token>" \\
-H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
# 메타데이터 접근
curl -H "X-aws-ec2-metadata-token: $TOKEN" \\
<http://169.254.169.254/latest/meta-data/instance-id>
Pod Identity에서의 활용
- Pod Identity는 IMDSv2와 유사한 방식으로 크레덴셜 제공
169.254.170.23/v1/credentials
엔드포인트 사용- 보안 토큰 기반의 인증 방식 채택
마무리: EKS Pod Identity는 IRSA의 진화형
EKS Pod Identity는 기존 IRSA 방식의 복잡한 OIDC 설정과 클러스터 종속성을 제거하면서,
Pod 단위 최소 권한 설정과 IAM 자격 증명의 자동 제공을 간소화하는 클라우드 네이티브 권한 관리 도구이다.
✅ 운영 환경에서는 다음과 같은 상황에서 특히 효과적이다.
- 멀티 클러스터에서 IAM 역할을 재사용해야 할 때
- Dev/Prod 환경을 동일한 CI/CD 파이프라인으로 관리할 때
- 팀 간 역할 분리를 명확히 하고 싶은 경우
- IRSA의 OIDC 인증 설정/복잡한 매핑이 부담되는 경우
EKS Pod Identity는 향후 IRSA를 대체할 수 있는 유력한 IAM 방식이며,
IAM 보안 + 클러스터 운영 간소화라는 두 마리 토끼를 잡고 싶다면 반드시 도입을 고려해볼 필요가 있다.
Reference
https://techblog.uplus.co.kr/eks-pod-identity-addon-poc-3326b6adb23e
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/pod-id-agent-setup.html
'AWS' 카테고리의 다른 글
AWS DynamoDB Local 설치 (2) | 2025.01.03 |
---|---|
AWS DynamoDB란? (0) | 2024.11.27 |
ALB access Log 활성화 → S3 권한 설정 및 로그 저장 (0) | 2024.11.21 |
AWS Network ACL vs Security Group (0) | 2024.11.16 |
AWS Ingress Annotations 정리 (0) | 2024.11.07 |