単一値と複数値のコンテキストキー
単一値のコンテキストキーと複数値のコンテキストキーの違いは、ポリシー条件の値の数ではなく、リクエストコンテキストの値の数にあります。
-
単一値の条件コンテキストキーはリクエストコンテキストに、最大で 1 つの値を持ちます。例えば、AWS でリソースにタグを付けると、各リソースタグは key-value ペアとして保存されます。リソースタグキーは単一のタグ値しか持つことができないため、aws:ResourceTag/tag-key は単一値のコンテキストキーです。単一値のコンテキストキーで条件集合演算子を使用しないでください。
-
複数値の条件コンテキストキーは、リクエストコンテキストに複数の値を持つことができます。例えば、AWS でリソースにタグを付ける場合、1 つのリクエストに複数のタグの key-value ペアを含めることができます。したがって、aws:TagKeys は複数の値を持つコンテキストキーです。複数値のコンテキストキーには条件集合演算子が必要です。
重要
複数値のコンテキストキーには条件集合演算子が必要です。単一値のコンテキストキーで、条件集合演算子の ForAllValues
または ForAnyValue
を使用しないでください。条件集合演算子の詳細については、「複数値のコンテキストキー」を参照してください。
単一値と複数値の分類については、条件コンテキストキーの値の種類として、AWS グローバル条件コンテキストキー トピックでそれぞれ説明されています。「サービス認可リファレンス」では、ArrayOf
プレフィックスとその後に続く条件演算子カテゴリタイプ (ArrayOfString
または ArrayOfARN
など) を使用して、複数値コンテキストキーのために異なる値タイプ分類を使用します。
例えば、リクエストは最大でも 1 つの VPC エンドポイントから発信されるため、aws:SourceVpce は単一値のコンテキストキーです。サービスには、そのサービスに属するサービスプリンシパル名を複数持つことができるため、aws:PrincipalServiceNamesList は複数値のコンテキストキーです。
使用可能な単一値のコンテキストキーはポリシー変数として使用できますが、複数値のコンテキストキーをポリシー変数として使用することはできません。ポリシー変数の詳細については、「IAM ポリシーの要素: 変数とタグ」を参照してください。
key-value ペアを含むコンテキストキーを使用する場合は、複数の tag-key 値があっても、各
は 1 つの値しか持てないことに留意してください。したがって、tag-key
aws:RequestTag
と aws:ResourceTag
は両方とも単一値のコンテキストキーです。単一値のコンテキストキーで条件集合演算子を使用すると、過度にポリシーが許容される可能性があります。
複数値のコンテキストキー
条件コンテキストキーを、複数の値を持つリクエストコンテキストキーと比較するには、ForAllValues
または ForAnyValue
集合演算子を使用する必要があります。これらの集合演算子は、リクエストにあるタグのセットと、ポリシー条件にあるタグのセットなど、2 つの値のセットを比較する場合に使われます。
ForAllValues
および ForAnyValue
の修飾子によって条件演算子にセット演算機能が追加されるため、リクエストコンテキストキーを、ポリシー条件内の複数のコンテキストキーの値に照らしてテストできます。さらに、ワイルドカードまたは変数を使用してポリシーに複数値の文字列コンテキストキーを含める場合は、StringLike
条件演算子も使用する必要があります。複数の条件キーの値は、配列のように括弧で囲む必要があります (例: "Key2":["Value2A", "Value2B"]
)。
-
ForAllValues
この限定子は、リクエストセットのすべてのメンバーの値が条件コンテキストキーセットのサブセットであるかどうかをテストします。リクエストのすべてのコンテキストキーバリューが、ポリシーの 1 つ以上のコンテキストキーの値と一致する場合、条件はtrue
を返します。また、リクエストにコンテキストキーがない場合、またはキーバリューが空の文字列などの null データセットに解決される場合はtrue
を返します。欠落しているコンテキストキーや空の値を持つコンテキストキーがtrue
と評価されないようにするには、コンテキストキーが存在し、その値が null でないかどうかをチェックするためにfalse
値を使用する Null 条件演算子をポリシーに含めることができます。重要
リクエストコンテキストで、コンテキストキーが欠落していたり、値が空であるコンテキストキーが予期せず存在したりすると、許容範囲が広すぎる場合があるため、
ForAllValues
をAllow
効果で使用する場合は注意してください。ポリシーにあるNull
条件演算子にfalse
値を指定すると、コンテキストキーが存在するかどうかと、その値が null でないかどうかをチェックできます。例については、「タグキーに基づいたアクセスの制御」を参照してください。 -
ForAnyValue
この限定子は、リクエストコンテキストキーの値のセットの、少なくとも 1 つのメンバーが、ポリシー条件にあるコンテキストキーバリューのセットの、少なくとも 1 つのメンバーと一致するかどうかをテストします。リクエスト内のコンテキストキーバリューのいずれかが、ポリシーのコンテキストキーの値のいずれかと一致する場合にtrue
が返されます。一致するコンテキストキーまたは空のデータセットがない場合、条件はfalse
を返します。
注記
単一値と複数値のコンテキストキーの違いは、ポリシー条件の値の数ではなく、リクエストコンテキストの値の数によります。