IAM ロールの iam:PutUserPolicy 権限の確認

ロールが変更できるユーザーのインラインポリシーを承認済みの対象に限定してください。

説明

iam:PutUserPolicy を持つロールを使う主体は、IAM ユーザーのインラインポリシーを追加・上書きして、その権限を拡大できます。この操作は対象ユーザーの権限を変え、呼び出し元ロール自身の権限を直接増やすものではありません。

ポリシーを変更する権限があっても、対象ユーザーとしてサインインできるわけではありません。影響は、そのユーザーを利用できる経路と、境界、組織ポリシー、明示的な拒否などの制御によって変わります。

想定される影響

  • 自動化ロールによる誤った変更で、ユーザーに不要な管理権限が付与されるおそれがあります。
  • ユーザーごとの例外が増えると、権限の把握や変更の確認が難しくなる可能性があります。

対処方法

ロールに不要な iam:PutUserPolicy を削除してください。必要な場合は専用の管理ロールと承認手続きを使い、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:PutUserPolicy",
        ]
        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 の参照操作に絞ります。他のポリシーに同じユーザーポリシー変更権限が残っていないかも確認してください。

参考資料