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

ロールによる管理ポリシーのバージョン作成を承認済みポリシーに限定してください。

説明

iam:CreatePolicyVersion を持つロールを使う主体は、カスタマー管理ポリシーの新しいバージョンを作成し、デフォルトとして有効化できます。同じロールや制御可能なワークロードのロールにアタッチされたポリシーなら、権限昇格の経路になるおそれがあります。

デフォルトにしていない新しいバージョンは適用されません。作成時にデフォルトにする場合、別途 iam:SetDefaultPolicyVersion の権限は不要です。この操作はインラインポリシーのバージョンを管理するものではありません。

想定される影響

  • 同じポリシーを共有する複数のロールやユーザーの権限が変わる可能性があります。
  • ワークロードに、リソースの参照・変更に関する不要な権限が付与されるおそれがあります。

対処方法

不要な iam:CreatePolicyVersion を削除し、必要な作業は承認済みのデプロイ用ロールや管理ロールに限定してください。Resource に対象のカスタマー管理ポリシー ARN を指定してください。iam:SetDefaultPolicyVersion の権限とアタッチ先を合わせて確認し、新しいバージョンの権限と変更ログを調べてください。

例

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

変更前

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:CreatePolicyVersion",
        ]
        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 の参照操作に限定します。他の経路のバージョン管理権限と不要な参照権限も確認してください。

参考資料