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

ロールがデフォルトバージョンを変更できる管理ポリシーを制限してください。

説明

iam:SetDefaultPolicyVersion を持つロールを使う主体は、カスタマー管理ポリシーの既存バージョンをデフォルトに設定できます。そのロールや制御可能な他の主体に適用されるポリシーに、より広い権限のバージョンが残っていれば、権限昇格の経路になるおそれがあります。

新しいポリシー内容を書き込む権限とは異なります。既存バージョンと実際の適用先を確認する必要があり、他の適用可能な制限や明示的な拒否も有効です。

想定される影響

  • 共有ポリシーを旧バージョンに戻すと、複数のワークロードに不要な権限が再び付与される可能性があります。
  • 承認済みの権限管理手順を経ずに、ロールのアクセス範囲が変わるおそれがあります。

対処方法

不要な iam:SetDefaultPolicyVersion を削除し、必要な作業は承認済みの管理ロールに限定してください。Resource に対象のカスタマー管理ポリシー ARN を指定し、有効化するバージョンと適用先を確認してください。iam:CreatePolicyVersion によるデフォルトバージョン変更も確認し、未承認の変更が阻止されることを試験してください。

例

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

変更前

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:SetDefaultPolicyVersion",
        ]
        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 の参照操作に限定します。他の経路のポリシー変更権限と参照範囲も確認してください。

参考資料