유즈케이스 10 · 기계 주체

워크로드 Role: ECS 태스크가 S3 · KMS 읽기

DevOps가 Boundary를 깔고, 개발자가 그 안에서 앱 Role을 만들고, 앱이 키 없이 호출.

DevOps 관리자개발자애플리케이션
STEP 1 / 6DevOps 관리자

DevOps: Boundary + 조건부 CreateRole

AppBoundary 정책을 dev에 만들고, DevPowerUser에 "Boundary를 붙일 때만 Role 생성 가능" 조건을 넣는다.

단계단계를 누르면 위 관계도가 그 단계로 바뀐다
  1. 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"}}
    }
  2. app-zandi-task Role을 AppBoundary와 함께 생성. Boundary 없이 만들면 거부되므로 자기보다 센 Role을 만드는 권한 상승 경로가 막힌다.

  3. Trust Principal은 ecs-tasks.amazonaws.com. 앱 권한은 task role, 이미지 pull · 로그는 task execution role로 분리.

    {
      "Effect": "Allow",
      "Principal": {"Service": "ecs-tasks.amazonaws.com"},
      "Action": "sts:AssumeRole"
    }
  4. SDK 기본 체인이 컨테이너 자격증명 엔드포인트에서 임시 키를 받고 자동 갱신한다.

  5. Identity 정책 Allow ∩ Boundary Allow → 허용. Boundary에 없는 동작이면 Identity 정책이 허용해도 거부.

  6. S3가 대신 kms:Decrypt를 호출한다. KMS는 키 정책이 반드시 허용해야 하고, 계정 위임 문구가 있어야 IAM 정책도 효력이 생긴다.

    {
      "Sid": "EnableIAMPolicies",
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::222222222222:root"},
      "Action": "kms:*",
      "Resource": "*"
    }