[0]
ECS IAM Role
-> Task Execution Role (로그, ECR Pull)
EKS IAM Rle
-> EKS Cluster Role + Node Role
혹은 Pod단위 IRSA로 분리
* EKS는 실행 주체가 더 많아서 Role도 쪼개짐
*
[1]
EKS Cluster Role
Control Plane이 Assume -> AWS 리소스 생성 및 관리
예시
- Node Group 생성 관리
- ELB / NLB 생성
- Security Group 관리
- ENI 관리
- CloudWatch 로그 전송
즉 클러스터 인프라 오케스트레이션
대표 정책
AmazonEKSClusterPolicy
ㄴ ec2:CreateSecurityGroup
ㄴ ec2:DescribeInstances
ㄴ elasticloadbalancing:CreateLoadBalancer
ㄴ iam:PassRole
Terraform 코드에서 출발하는 흐름
K8s Service type=LB
↓
Cloud Controller
↓
Cluster Role Assume
↓
AWS API 호출
↓
ELB 생성
-
[2]
Node Role
Worker Node (EC2) 가 사용하는 IAM Role
Kubelet + container runtime + CNI 가 사용
- Img pull
- ENI attach / IP 할당( for Pod nets)
- Cloudwatch (로그 / metrics)
대표 정책
AmazonEKSWorkerNodePolicy
AmazonEC2ContainerRegistryReadOnly
AmazonEKS_CNI_Policy
흐름
Pod 생성
↓
Node kubelet 실행
↓
Node Role 사용
├─ ECR pull
├─ ENI attach
└─ Logs 전송
-
[3]
Pod 용 IRSA
예시 : IRSA 없이 AWS SDK 실패
*EKS에서 SDK : 특정 플랫폼 API를 코드로 호출하기 위한 라이브러리 모음
즉 코드에서
s3 = boto3.client("s3")
s3.list_buckets()
이게 SDK 호출
Pod App Code -> AWS SDK -> AWS API -> S3 / DDB / STS ...
즉 SDK는 AWS API 클라이언트
kubectl이 K8s API 클라이언트인 것처럼
-
SDK는 항상 자격증명 필요
AWS SDK는 내부적으로 자격증명 탐색 체인 사용
Env Variables
Shared Credentials (~/.aws)
EC2 Instance Role
IRSA WEBIdentity
이 중 하나라도 있어야 API 호출 가능
-
EC2에서 SDK가 되는 이유
EC2 안 앱
IMDS -> Instance Role -> STS Token
자동 인증, 그래서 별 키 없어도 S3 호출 가능
-
Pod에서 SDK가 실패하는 이유
## Pod 기본 상태 ##
Pod
├─ IAM Role 없음
├─ Access Key 없음
└─ IMDS 접근 차단
## 그래서 SDK 실행 시 ##
Unable to locate credentials
-
IRSA가 해결하는 문제
Pod ServiceAccount
↓ OIDC Token
STS AssumeRoleWithWebIdentity
↓
Temporary Credentials
↓
AWS SDK 사용
즉 Pod 전용 IAM Role
이게 없으면 SDK는 실행되지만 API 호출이 거부됨
-
권한 경로 지도
Pod App
↓
AWS SDK
↓
IRSA Role (ServiceAccount)
↓
STS Token
↓
AWS API
-
기본 테스트 시 IRSA 필요 여부 : AWS API 사용 여부
nginx inc 이미지 로드 후 기본 포트 응답시
| 주체 | 역할 | AWS API 사용 |
| Cluster Role | LB 생성 / 헬스체크 | o / x |
| Node Role | 이미지 Pull | o |
| Pod | x | x |
그래서 실습때에는 Pod에 IRSA 필요 없었다
(sidecar proxy 역시)
-
(필요 있는 경우)
S3 업로드
DDB 쪼회
Secrets Manager 열기
SQS consume
STSAssumeRole
-
nginx img 내부
nginx binary
config
static html
'[2] 250909~ 클라우드 > [b] 12월 : Terraform + Ansible' 카테고리의 다른 글
| [52] "EC2 Launch Type" vs "ECS Fargate" (0) | 2026.02.17 |
|---|---|
| [51] EKS console view가 proxy 쓰는 이유 (0) | 2026.02.17 |
| [49] IAM <-> RBAC (EKS ACCESS ENTRY) (0) | 2026.02.16 |
| [48] cluster_enpoint_public_access (0) | 2026.02.16 |
| [47] cluster_ca_certificate (0) | 2026.02.16 |