iam:CreateAccessKey로 권한 상승이 가능한 IAM 역할

다른 IAM 사용자의 액세스 키를 만드는 권한을 승인된 관리 작업으로 제한하세요.

설명

광범위한 iam:CreateAccessKey 권한이 있으면 역할 사용자가 다른 IAM 사용자의 새 액세스 키를 발급해 그 사용자의 권한으로 API를 호출할 수 있습니다. 실제 발급과 사용에는 대상 사용자 및 정책의 제한이 적용됩니다.

특히 고권한 사용자의 키를 만들 수 있으면 새 장기 자격 증명을 통해 권한을 악용할 수 있습니다.

잠재적 영향

  • 고권한 사용자 가장 가능: 다른 사용자의 액세스 키로 해당 사용자에게 허용된 작업을 수행할 수 있습니다.
  • 장기 자격 증명 생성: 생성된 키가 오래 남아 지속적인 악용에 쓰일 수 있습니다.
  • 탐지 지연: 승인되지 않은 발급을 정상적인 관리 작업과 구분하기 어려울 수 있습니다.

해결 방법

  • 키 관리가 필요 없는 역할에서 iam:CreateAccessKey 권한을 제거하세요.
  • 필요한 발급 권한은 전용 관리자 역할과 승인된 대상 사용자로 제한하세요.
  • 키 생성 이벤트를 모니터링하고 가능하면 역할 기반 임시 자격 증명으로 전환하세요.

예시

권한 정책의 발췌입니다. 역할의 신뢰 정책은 별도로 구성하세요.

변경 전

hcl
resource "aws_iam_role" "example" {
  name = "cosmic"
}

resource "aws_iam_role_policy" "example" {
  name = "test_inline_policy"
  role = aws_iam_role.example.name

  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = [
          "iam:CreateAccessKey",
        ]
        Effect   = "Allow"
        Resource = "*"
      },
    ]
  })
}

변경 후

hcl
resource "aws_iam_role" "example" {
  name = "cosmic"
}

resource "aws_iam_role_policy" "example" {
  name = "inline_policy_run_instances"
  role = aws_iam_role.example.name

  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = [
          "ec2:Describe*",
        ]
        Effect   = "Allow"
        Resource = "*"
      },
    ]
  })
}

변경 후에는 같은 역할의 이 정책에서 키 발급 권한을 제거하고 EC2 조회 권한만 남깁니다. 다른 연결 정책과 이미 발급된 키는 별도로 확인해야 합니다.

참조