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