IAM 사용자의 iam:CreatePolicyVersion 권한 점검

사용자가 관리형 정책 버전을 만들고 활성화할 수 있는 범위를 제한하세요.

설명

IAM 사용자가 iam:CreatePolicyVersion으로 고객 관리형 정책의 새 버전을 만들고 기본 버전으로 지정하면 연결된 주체의 권한을 바꿀 수 있습니다. 자신에게 직접 또는 그룹을 통해 적용되는 정책을 더 강하게 바꾸면 권한 상승에 이용될 수 있습니다.

새 버전은 기본값이 되어야 실제로 적용됩니다. 생성 요청에서 이를 지정할 수 있으므로 iam:SetDefaultPolicyVersion만 제한해서는 이 변경 경로를 막을 수 없습니다.

잠재적 영향

  • 공유 정책을 쓰는 여러 사용자와 역할에 과도한 권한이 부여될 수 있습니다.
  • 기존 정책 이름을 유지한 변경으로 승인된 권한 구성이 달라질 수 있습니다.

해결 방법

일반 사용자에 불필요한 iam:CreatePolicyVersion을 제거하고 버전 관리는 승인된 역할로 수행하세요. Resource를 대상 고객 관리형 정책 ARN으로 제한하고 iam:SetDefaultPolicyVersion도 함께 검토하세요. 정책 내용과 적용 대상을 확인하고 정상 변경과 미승인 변경 차단을 시험하세요.

예시

같은 사용자의 인라인 정책으로 관리형 정책 버전 생성 권한을 부여합니다. 별도의 정책 연결 리소스는 이 비교에 필요하지 않습니다.

변경 전

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

resource "aws_iam_user_policy" "example" {
  name = "test_inline_policy"
  user = aws_iam_user.example.name

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

사용자에게 고객 관리형 정책 전반의 새 버전을 만들 수 있는 권한을 부여합니다.

변경 후

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

resource "aws_iam_user_policy" "example" {
  name = "test_inline_policy"
  user = aws_iam_user.example.name

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

이 허용문에는 EC2 조회만 남습니다. 다른 정책의 버전 관리 권한과 조회 범위도 검토하세요.

참조