IAM ユーザーの iam:AttachRolePolicy 権限の確認

ユーザーによるロールポリシーのアタッチを、承認済みの対象とポリシーに限定してください。

説明

IAM ユーザーが iam:AttachRolePolicy で強い管理ポリシーをアタッチすると、対象ロールの権限が拡大する場合があります。そのロールを引き受けるか、ロールを使うワークロードを制御できれば、拡大した権限を利用できるおそれがあります。

アタッチだけでは、ユーザー自身の権限やロールの信頼設定は変わりません。境界、組織ポリシー、明示的な拒否も実際のアクセスを制限する場合があります。

想定される影響

  • ロールを使うアプリケーションに、不要なリソースへのアクセス権限が追加される可能性があります。
  • 未承認のポリシー変更により、サービスの権限や運用上の制御が変わるおそれがあります。

対処方法

不要な iam:AttachRolePolicy を削除し、必要な管理操作は承認済みロールで行ってください。Resource を対象ロール ARN に限定し、iam:PolicyARN 条件で許可するポリシーを指定してください。ロールを使う経路と他の権限を確認し、正常な操作と未承認のアタッチの拒否を試験してください。

例

同じユーザーとインラインポリシーを変更します。この比較に、別の管理ポリシーアタッチリソースは不要です。

変更前

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:AttachRolePolicy",
        ]
        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 の参照操作だけを残します。他のポリシーのロール管理権限と参照範囲も、業務に必要な範囲に限定してください。

参考資料