複数のコンテキストキーまたは値による条件 - AWS Identity and Access Management

複数のコンテキストキーまたは値による条件

ポリシーの Condition 要素を使用して、リクエスト内の 1 つのコンテキストキーに対して複数のコンテキストキーまたは値をテストできます。プログラムまたは AWS を通じて AWS Management Console にリクエストを行うと、リクエストにはプリンシパル、オペレーション、タグなどに関する情報が含まれます。コンテキストキーを使用すると、ポリシー条件で指定したコンテキストキーで、リクエスト内の一致するコンテキストキーの値をテストできます。リクエストに含まれる情報とデータについては、「リクエストのコンテキスト」を参照してください。

複数のキーまたは値の評価ロジック

Condition 要素は複数の条件演算子を含むことができ、各条件演算子は複数のキーと値のペアを含むことができます。特に指定のない限り、ほとんどのコンテキストキーで複数の値を使用できます。

  • ポリシーステートメントに複数の条件演算子がある場合、条件演算子は論理 AND を使用して評価されます。

  • 1 つの条件演算子にアタッチされている複数のコンテキストキーがポリシーステートメントにある場合、コンテキストキーは論理 AND を使用して評価されます。

  • 1 つの条件演算子に 1 つのコンテキストキーの値が複数含まれる場合、それらの値は論理 OR を使用して評価されます。

  • 1 つの否定された一致条件演算子に 1 つのコンテキストキーの値が複数含まれる場合、それらの値は論理 NOR を使用して評価されます。

Condition 要素のブロックのすべてのコンテキストキーを true に変換して、目的の Allow または Deny 効果を呼び出す必要があります。次の図は、複数の条件演算子およびコンテキストのキーと値のペアを含む条件の評価ロジックを示しています。

AND および OR がどのように複数のコンテキストキーおよび値に適用されるかを示した条件ブロック

例えば、次の S3 バケットポリシーは、上記の図がポリシーでどのように表されるかを示しています。条件ブロックは、条件演算子 StringEquals および ArnLike、コンテキストキー aws:PrincipalTag および aws:PrincipalArn を含んでいます。目的の Allow または Deny 効果を呼び出すには、条件ブロックのすべてのコンテキストキーが true に変換される必要があります。リクエストを行うユーザーには、ポリシーで指定されているタグキー値のいずれかを含む、department と role の両方のプリンシパルタグキーが必要です。また、リクエストを行うユーザーのプリンシパル ARN は、true と評価されるポリシーで指定される aws:PrincipalArn の値のいずれかに一致する必要があります。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExamplePolicy", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::222222222222:root" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Condition": { "StringEquals": { "aws:PrincipalTag/department": [ "finance", "hr", "legal" ], "aws:PrincipalTag/role": [ "audit", "security" ] }, "ArnLike": { "aws:PrincipalArn": [ "arn:aws:iam::222222222222:user/Ana", "arn:aws:iam::222222222222:user/Mary" ] } } } ] }

否定された一致条件演算子の評価ロジック

StringNotEquals や ArnNotLike などの一部の条件演算子は、否定された一致を使用して、ポリシー内のコンテキストのキーと値のペアをリクエスト内のそれと比較します。否定された一致条件演算子を使用するポリシーで、1 つのコンテキストキーに複数の値が指定されている場合、有効なアクセス許可は論理 NOR であるかのように機能します。否定された一致では、論理 NOR または NOT OR はすべての値が false と評価された場合のみ true を返します。

次の図は、複数の条件演算子およびコンテキストのキーと値のペアを含む条件の評価ロジックを示しています。この図には、コンテキストキー 3 用の否定された一致条件演算子が含まれています。

否定された一致条件演算子を使用する際に、AND および OR が複数のコンテキストキーと値にどのように適用されるかを示した条件ブロック

例えば、次の S3 バケットポリシーは、上記の図がポリシーでどのように表されるかを示しています。条件ブロックは、条件演算子 StringEquals および ArnNotLike、コンテキストキー aws:PrincipalTag および aws:PrincipalArn を含んでいます。目的の Allow または Deny 効果を呼び出すには、条件ブロックのすべてのコンテキストキーが true に変換される必要があります。リクエストを行うユーザーには、ポリシーで指定されているタグキー値のいずれかを含む、department と role の両方のプリンシパルタグキーが必要です。ArnNotLike 条件演算子で否定された一致を使用するため、リクエストを行うユーザーのプリンシパル ARN は true と評価されるポリシーで指定される aws:PrincipalArn の値のいずれとも一致してはいけません。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExamplePolicy", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::222222222222:root" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Condition": { "StringEquals": { "aws:PrincipalTag/department": [ "finance", "hr", "legal" ], "aws:PrincipalTag/role": [ "audit", "security" ] }, "ArnNotLike": { "aws:PrincipalArn": [ "arn:aws:iam::222222222222:user/Ana", "arn:aws:iam::222222222222:user/Mary" ] } } } ] }