IAM 역할의 iam:PutRolePolicy 권한 점검

역할이 자신이나 다른 역할의 인라인 정책을 바꿀 수 있는 범위를 제한하세요.

설명

iam:PutRolePolicy를 광범위하게 허용한 역할을 사용하면 자신이나 다른 역할에 인라인 정책을 추가하거나 덮어쓸 수 있습니다. 같은 역할의 권한을 늘리거나 제어 가능한 워크로드의 역할을 변경해 권한 상승에 이용할 수 있습니다.

다른 역할의 정책을 수정하는 것만으로 그 역할을 맡을 수 있는 것은 아닙니다. 신뢰 정책과 역할 사용 권한은 별도이며 권한 경계, 조직 정책과 명시적 거부도 유지됩니다.

잠재적 영향

  • 실행 중인 애플리케이션에 승인되지 않은 리소스 접근 권한이 부여될 수 있습니다.
  • 재사용되는 역할의 정책 변경이 여러 서비스에 영향을 줄 수 있습니다.

해결 방법

역할에 불필요한 iam:PutRolePolicy를 제거하고 관리 작업을 전용 역할로 분리하세요. 필요한 경우 Resource를 승인된 대상 역할 ARN으로 제한하세요. 자신의 권한을 바꿀 수 있는 경로와 변경 로그를 검토하고 정상 작업과 미승인 변경 차단을 확인하세요.

예시

같은 역할과 인라인 정책을 유지한 발췌입니다. 생략된 신뢰 정책은 실제 구성에서 별도로 정의하세요.

변경 전

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:PutRolePolicy",
        ]
        Effect   = "Allow"
        Resource = "*"
      },
    ]
  })
}

이 역할을 사용하는 주체가 자신을 포함한 전체 역할의 인라인 정책을 추가하거나 갱신할 수 있습니다.

변경 후

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 = [
          "ec2:Describe*",
        ]
        Effect   = "Allow"
        Resource = "*"
      },
    ]
  })
}

이 허용문에는 EC2 조회만 남습니다. 다른 정책의 역할 수정 권한과 실제 필요한 조회 범위도 확인하세요.

참조