
セキュリティグループの編集におけるリソースタグ条件を使用したアクセス制御を行うためのIAMポリシーの記述方法を教えて下さい
この記事は公開されてから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 アクションはリソースレベルの権限をサポートしていないため、条件なしで別のステートメントで指定する必要があることに注意してください。
 - 条件キーテーブル
すべてのアクションまたはリソースですべてのキーを指定できるわけではありません。特定のキーは、特定のタイプのアクションとリソースでのみ機能します
 








