複数のコンテキストキーまたは値による条件
ポリシーの Condition
要素を使用して、リクエスト内の 1 つのコンテキストキーに対して複数のコンテキストキーまたは値をテストできます。プログラムまたは AWS を通じて AWS Management Console にリクエストを行うと、リクエストにはプリンシパル、オペレーション、タグなどに関する情報が含まれます。コンテキストキーを使用すると、ポリシー条件で指定したコンテキストキーで、リクエスト内の一致するコンテキストキーの値をテストできます。リクエストに含まれる情報とデータについては、「リクエストのコンテキスト」を参照してください。
複数のキーまたは値の評価ロジック
Condition
要素は複数の条件演算子を含むことができ、各条件演算子は複数のキーと値のペアを含むことができます。特に指定のない限り、ほとんどのコンテキストキーで複数の値を使用できます。
-
ポリシーステートメントに複数の条件演算子がある場合、条件演算子は論理 AND
を使用して評価されます。
-
1 つの条件演算子にアタッチされている複数のコンテキストキーがポリシーステートメントにある場合、コンテキストキーは論理 AND
を使用して評価されます。
-
1 つの条件演算子に 1 つのコンテキストキーの値が複数含まれる場合、それらの値は論理 OR
を使用して評価されます。
-
1 つの否定された一致条件演算子に 1 つのコンテキストキーの値が複数含まれる場合、それらの値は論理 NOR
を使用して評価されます。
Condition 要素のブロックのすべてのコンテキストキーを true に変換して、目的の Allow
または Deny
効果を呼び出す必要があります。次の図は、複数の条件演算子およびコンテキストのキーと値のペアを含む条件の評価ロジックを示しています。
例えば、次の S3 バケットポリシーは、上記の図がポリシーでどのように表されるかを示しています。条件ブロックは、条件演算子 StringEquals
および ArnLike
、コンテキストキー aws:PrincipalTag
および aws:PrincipalArn
を含んでいます。目的の Allow
または Deny
効果を呼び出すには、条件ブロックのすべてのコンテキストキーが true に変換される必要があります。リクエストを行うユーザーには、ポリシーで指定されているタグキー値のいずれかを含む、department と role の両方のプリンシパルタグキーが必要です。また、リクエストを行うユーザーのプリンシパル ARN は、true と評価されるポリシーで指定される aws:PrincipalArn
の値のいずれかに一致する必要があります。
- JSON
-
-
{
"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"
]
}
}
}
]
}
次の表は、AWS がリクエストの条件キー値に基づいてこのポリシーを評価する方法を示しています。
ポリシー条件 |
リクエストコンテキスト |
結果 |
"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"
]
}
|
aws:PrincipalTag/department: legal
aws:PrincipalTag/role: audit
aws:PrincipalArn:
arn:aws:iam::222222222222:user/Mary
|
一致 |
"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"
]
}
|
aws:PrincipalTag/department: hr
aws:PrincipalTag/role: audit
aws:PrincipalArn:
arn:aws:iam::222222222222:user/Nikki
|
一致なし |
"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"
]
}
|
aws:PrincipalTag/department: hr
aws:PrincipalTag/role: payroll
aws:PrincipalArn:
arn:aws:iam::222222222222:user/Mary
|
一致なし |
"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"
]
}
|
リクエストコンテキストに aws:PrincipalTag/role はありません。
aws:PrincipalTag/department: hr
aws:PrincipalArn:
arn:aws:iam::222222222222:user/Mary
|
一致なし
|
"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"
]
}
|
リクエストコンテキストに aws:PrincipalTag はありません。
aws:PrincipalArn:
arn:aws:iam::222222222222:user/Mary
|
一致なし
|
否定された一致条件演算子の評価ロジック
StringNotEquals
や ArnNotLike
などの一部の条件演算子は、否定された一致を使用して、ポリシー内のコンテキストのキーと値のペアをリクエスト内のそれと比較します。否定された一致条件演算子を使用するポリシーで、1 つのコンテキストキーに複数の値が指定されている場合、有効なアクセス許可は論理 NOR
であるかのように機能します。否定された一致では、論理 NOR
または NOT
OR
はすべての値が false と評価された場合のみ true を返します。
次の図は、複数の条件演算子およびコンテキストのキーと値のペアを含む条件の評価ロジックを示しています。この図には、コンテキストキー 3 用の否定された一致条件演算子が含まれています。
例えば、次の S3 バケットポリシーは、上記の図がポリシーでどのように表されるかを示しています。条件ブロックは、条件演算子 StringEquals
および ArnNotLike
、コンテキストキー aws:PrincipalTag
および aws:PrincipalArn
を含んでいます。目的の Allow
または Deny
効果を呼び出すには、条件ブロックのすべてのコンテキストキーが true に変換される必要があります。リクエストを行うユーザーには、ポリシーで指定されているタグキー値のいずれかを含む、department と role の両方のプリンシパルタグキーが必要です。ArnNotLike
条件演算子で否定された一致を使用するため、リクエストを行うユーザーのプリンシパル ARN は true と評価されるポリシーで指定される aws:PrincipalArn
の値のいずれとも一致してはいけません。
- JSON
-
-
{
"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"
]
}
}
}
]
}
次の表は、AWS がリクエストの条件キー値に基づいてこのポリシーを評価する方法を示しています。
ポリシー条件 |
リクエストコンテキスト |
結果 |
"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"
]
}
|
aws:PrincipalTag/department: legal
aws:PrincipalTag/role: audit
aws:PrincipalArn:
arn:aws:iam::222222222222:user/Nikki
|
一致 |
"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"
]
}
|
aws:PrincipalTag/department: hr
aws:PrincipalTag/role: audit
aws:PrincipalArn:
arn:aws:iam::222222222222:user/Mary
|
一致なし |
"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"
]
}
|
aws:PrincipalTag/department: hr
aws:PrincipalTag/role: payroll
aws:PrincipalArn:
arn:aws:iam::222222222222:user/Nikki
|
一致なし |
"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"
]
}
|
> リクエストコンテキストに aws:PrincipalTag/role はありません。
aws:PrincipalTag/department: hr
aws:PrincipalArn:
arn:aws:iam::222222222222:user/Nikki
|
一致なし |
"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"
]
}
|
リクエストコンテキストに aws:PrincipalTag はありません。
aws:PrincipalArn:
arn:aws:iam::222222222222:user/Nikki
|
一致なし
|