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