この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
困っていた内容
権限の付いている IAM ユーザにてセキュリティグループの編集をしたところ以下のエラーが発生しました。
You may be missing IAM policies that allow ModifySecurityGroupRules.
You are not authorized to perform this operation.
IAM ユーザにアタッチしているポリシーは以下のとおりです。IAM ユーザでは特定のタグを指定して "ec2:*" の権限を付けております。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:*",
"ec2:DescribeSecurityGroupRules",
"ec2:ModifySecurityGroupRules"
],
"Condition": {
"StringEquals": {
"ec2:ResourceTag/Name": "mdfsg"
}
},
"Resource": "*"
}
]
}
各セキュリティグループに対して、リソースタグの条件を使用して、リソースタグが設定されている場合は編集を許可、リソースタグが設定されていない場合は拒否とする IAM ポリシーを作成したいです。エラーの原因と作成方法を教えて下さい。
エラーの原因はなんですか?
今回の発生したエラーは、リソースレベルの権限をサポートしているアクションと、サポートしていないアクションを同一ステートメントブロック内で混在させてポリシーを作成していたことに起因します。
権限の付いている IAM ユーザにアタッチされた IAM ポリシー("ec2:")には、リソースレベルの権限をサポートしない "ec2:Describe" アクション等が含まれています。
そのため、リソースレベルの権限をサポートする "ec2:ModifySecurityGroupRules" アクションが同一ステートメントブロック内で設定されているとエラーが発生します。
関連の記事については、下記ブログをご確認ください。
どう作成すればいいの?
リソースレベルの権限をサポートする "ec2:ModifySecurityGroupRules" については、以下の例のように別のステートメントブロック内にてポリシーを作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": ["ec2:ModifySecurityGroupRules"],
"Resource": ["arn:aws:ec2:*:*:security-group/*"],
"Condition": {
"StringNotEquals": {
"ec2:ResourceTag/Name": "mdfsg"
}
}
},
{
"Effect": "Allow",
"Action": ["ec2:*"],
"Resource": "*"
}
]
}
[補足]IAM Policy 説明
参考資料
- Actions defined by Amazon EC2
Actions
ModifySecurityGroupRulesResource types (required)
security-groupCondition keys
ec2:ResourceTag/${TagKey} - リソースタグを使用した EC2 リソースへのアクセスの制御
Describe アクションはリソースレベルの権限をサポートしていないため、条件なしで別のステートメントで指定する必要があることに注意してください。
- 条件キーテーブル
すべてのアクションまたはリソースですべてのキーを指定できるわけではありません。特定のキーは、特定のタイプのアクションとリソースでのみ機能します