単一値と複数値のコンテキストキー - AWS Identity and Access Management

単一値と複数値のコンテキストキー

単一値のコンテキストキーと複数値のコンテキストキーの違いは、ポリシー条件の値の数ではなく、リクエストコンテキストの値の数にあります。

  • 単一値の条件コンテキストキーはリクエストコンテキストに、最大で 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 値があっても、各 tag-key は 1 つの値しか持てないことに留意してください。したがって、aws:RequestTagaws:ResourceTag は両方とも単一値のコンテキストキーです。単一値のコンテキストキーで条件集合演算子を使用すると、過度にポリシーが許容される可能性があります。

複数値のコンテキストキー

条件コンテキストキーを、複数の値を持つリクエストコンテキストキーと比較するには、ForAllValues または ForAnyValue 集合演算子を使用する必要があります。これらの集合演算子は、リクエストにあるタグのセットと、ポリシー条件にあるタグのセットなど、2 つの値のセットを比較する場合に使われます。

ForAllValues および ForAnyValue の修飾子によって条件演算子にセット演算機能が追加されるため、リクエストコンテキストキーを、ポリシー条件内の複数のコンテキストキーの値に照らしてテストできます。さらに、ワイルドカードまたは変数を使用してポリシーに複数値の文字列コンテキストキーを含める場合は、StringLike 条件演算子も使用する必要があります。複数の条件キーの値は、配列のように括弧で囲む必要があります (例: "Key2":["Value2A", "Value2B"])。

  • ForAllValues この限定子は、リクエストセットのすべてのメンバーの値が条件コンテキストキーセットのサブセットであるかどうかをテストします。リクエストのすべてのコンテキストキーバリューが、ポリシーの 1 つ以上のコンテキストキーの値と一致する場合、条件は true を返します。また、リクエストにコンテキストキーがない場合、またはキーバリューが空の文字列などの null データセットに解決される場合は true を返します。欠落しているコンテキストキーや空の値を持つコンテキストキーが true と評価されないようにするには、コンテキストキーが存在し、その値が null でないかどうかをチェックするために false 値を使用する Null 条件演算子をポリシーに含めることができます。

    重要

    リクエストコンテキストで、コンテキストキーが欠落していたり、値が空であるコンテキストキーが予期せず存在したりすると、許容範囲が広すぎる場合があるため、ForAllValuesAllow 効果で使用する場合は注意してください。ポリシーにある Null 条件演算子に false 値を指定すると、コンテキストキーが存在するかどうかと、その値が null でないかどうかをチェックできます。例については、「タグキーに基づいたアクセスの制御」を参照してください。

  • ForAnyValue この限定子は、リクエストコンテキストキーの値のセットの、少なくとも 1 つのメンバーが、ポリシー条件にあるコンテキストキーバリューのセットの、少なくとも 1 つのメンバーと一致するかどうかをテストします。リクエスト内のコンテキストキーバリューのいずれかが、ポリシーのコンテキストキーの値のいずれかと一致する場合に true が返されます。一致するコンテキストキーまたは空のデータセットがない場合、条件は false を返します。

注記

単一値と複数値のコンテキストキーの違いは、ポリシー条件の値の数ではなく、リクエストコンテキストの値の数によります。