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 の参照操作だけを残します。他のポリシーのバージョン管理権限と参照範囲も確認してください。

参考資料