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