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

ロールが変更できる IAM ユーザーと管理ポリシーを制限してください。

説明

iam:AttachUserPolicy を持つロールは、許可された IAM ユーザーに管理ポリシーをアタッチして、その権限を拡大できる場合があります。この操作は呼び出し元ロール自身の権限を変えず、対象ユーザーとしてサインインする権限も与えません。

影響は、アタッチできるポリシーと対象ユーザーを利用できる経路によって変わります。ユーザーのアクセス許可の境界、明示的な拒否、組織ポリシーも引き続き適用されます。

想定される影響

  • 自動化ロールによる誤ったアタッチで、ユーザーに不要な管理権限が付与されるおそれがあります。
  • 拡大したユーザー権限の悪用は、情報漏えいやリソース変更につながる可能性があります。

対処方法

ロールに不要な iam:AttachUserPolicy を削除してください。必要な管理操作は、Resource の対象ユーザー ARN と iam:PolicyARN 条件の承認済みポリシーで制限してください。境界と変更ログを確認し、正常な管理操作と未承認のアタッチの拒否を試験してください。

例

同じロールとインラインポリシーの抜粋です。実際の構成では、ロールの信頼ポリシーを別途定義してください。

変更前

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:AttachUserPolicy",
        ]
        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 の参照操作に絞ります。他のユーザー管理権限と、実際に必要な参照範囲も確認してください。

参考資料