워크로드 Role: ECS 태스크가 S3 · KMS 읽기
DevOps가 Boundary를 깔고, 개발자가 그 안에서 앱 Role을 만들고, 앱이 키 없이 호출.
DevOps 관리자개발자애플리케이션
DevOps: Boundary + 조건부 CreateRole
AppBoundary 정책을 dev에 만들고, DevPowerUser에 "Boundary를 붙일 때만 Role 생성 가능" 조건을 넣는다.
단계단계를 누르면 위 관계도가 그 단계로 바뀐다
-
AppBoundary 정책을 dev에 만들고, DevPowerUser에 "Boundary를 붙일 때만 Role 생성 가능" 조건을 넣는다.
{ "Effect": "Allow", "Action": ["iam:CreateRole", "iam:PutRolePolicy", "iam:AttachRolePolicy"], "Resource": "arn:aws:iam::222222222222:role/app-*", "Condition": {"StringEquals": { "iam:PermissionsBoundary": "arn:aws:iam::222222222222:policy/AppBoundary"}} } -
app-zandi-task Role을 AppBoundary와 함께 생성. Boundary 없이 만들면 거부되므로 자기보다 센 Role을 만드는 권한 상승 경로가 막힌다.
-
Trust Principal은 ecs-tasks.amazonaws.com. 앱 권한은 task role, 이미지 pull · 로그는 task execution role로 분리.
{ "Effect": "Allow", "Principal": {"Service": "ecs-tasks.amazonaws.com"}, "Action": "sts:AssumeRole" } -
SDK 기본 체인이 컨테이너 자격증명 엔드포인트에서 임시 키를 받고 자동 갱신한다.
-
Identity 정책 Allow ∩ Boundary Allow → 허용. Boundary에 없는 동작이면 Identity 정책이 허용해도 거부.
-
S3가 대신 kms:Decrypt를 호출한다. KMS는 키 정책이 반드시 허용해야 하고, 계정 위임 문구가 있어야 IAM 정책도 효력이 생긴다.
{ "Sid": "EnableIAMPolicies", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::222222222222:root"}, "Action": "kms:*", "Resource": "*" }