IAM 評価ロジックは、複数の条件キーを持つ明示的な拒否ポリシーに対してどのように機能しますか?

所要時間2分
0

AWS Identity and Access Management (IAM) の明示的な拒否ポリシーを作成したいです。この拒否ポリシーは、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスと Amazon Elastic Block Store (Amazon EBS) ボリュームの作成を制限する必要があります。

簡単な説明

IAM ポリシータグを使用して、EC2 インスタンスおよび EBS ボリュームの起動を制限します。条件としては、AllowStringLikeDenyStringNotLike文字列条件演算子を使用します。

詳細については、「IAM ポリシータグを使用して EC2 インスタンスまたは EBS ボリュームの作成方法を制限するにはどうすればよいですか?」を参照してください。

解決策

EC2 インスタンスおよび EBS ボリュームの作成を制限するための例として、以下の IAM ポリシーを使用します。このポリシーでは、DenyStringNotLike を使用します。

**注記:**意図しない許可アクセスを防ぐために、DenyStringNotLike を使用するのがベストプラクティスです。

ポリシーに複数の条件演算子または単一の条件演算子に接続された複数のキーがある場合、条件は AND ロジックで評価されます。Deny で複数のタグ値を使用する場合、各 RequestTag キーは別々の文を使用して同じ AND ロジックを得る必要があります。

**注記:**1 つの条件で設定されたすべての RequestTag キー値を Deny ポリシーで指定すると、期待通りに動作しないことがあります。これは、すべての条件が満たされるまでアクションが許可されるためです。すべての条件が満たされると、アクションは拒否されます。

次のタグが必要です。

  • cost_center タグには NULL 以外の値が必要です。
  • EC2 インスタンスには Production という名前のタグキーがあります。
  • 識別子タグは任意の 5 文字の組み合わせである必要があります。
  • env タグの値は、sandboxdev、または prod である必要があります。

ポリシーの例:

{    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowToDescribeAll",
            "Effect": "Allow",
            "Action": [
                "ec2:Describe*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowRunInstances",
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:*::image/*",
                "arn:aws:ec2:*::snapshot/*",
                "arn:aws:ec2:*:*:subnet/*",
                "arn:aws:ec2:*:*:network-interface/*",
                "arn:aws:ec2:*:*:security-group/*",
                "arn:aws:ec2:*:*:key-pair/*"
            ]
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions1",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/cost_center": "?*"
                }
            }
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions2",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "ForAllValues:StringNotLike": {
                    "aws:TagKeys": "Production"
                }
            }
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions3",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/identifier": "?????"
                }
            }
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions4",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/env": [
                        "sandbox",
                        "dev",
                        "prod"
                    ]
                }
            }
        },
        {
            "Sid": "AllowRunInstances1",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ]
        },
        {
            "Sid": "AllowCreateTagsOnRunInstance",
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "RunInstances"
                }
            }
        }
    ]
}

以下の強制値に注意してください。

  • aws:TagKeys の値は Production の大文字小文字を区別します。
  • ????? 値は、任意の 5 つの値を組み合わせて使用することが強制されます。先頭または末尾のスペースは無視されます。
  • EC2 インスタンスが空のタグ値で起動できないように、?* 値は値フィールドに少なくとも 1 文字の使用を強制します。

関連情報

タグを使用して Amazon EC2 リソースへのアクセスを制御する IAM ポリシーを作成する方法を教えてください。

Amazon EC2 リソースのタグ付け

タグを使用した AWS リソースへのアクセスの制御

コメントはありません

関連するコンテンツ