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

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

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

  • 単一値の条件コンテキストキーはリクエストコンテキストに、最大で 1 つの値を持ちます。たとえば、AWS でリソースにタグを付けることができます。リソースタグは、タグキー値のペアとして格納されます。リソースタグキーは単一のタグ値を持つことができます。したがって、aws:ResourceTag/tag-key は単一値のコンテキストキーです。単一値のコンテキストキーで条件集合演算子を使用しないでください。

  • 複数値の条件コンテキストキーは、リクエストコンテキストに複数の値を持つことができます。たとえば、AWS 内のリソースにタグを付けることができ、リクエストに複数のタグキーと値のペアを含めることができます。したがって、aws:TagKeys は複数の値を持つコンテキストキーです。複数値のコンテキストキーには条件集合演算子が必要です。

重要

複数値のコンテキストキーには条件集合演算子が必要です。単一値のコンテキストキーで、条件集合演算子の ForAllValues または ForAnyValue を使用しないでください。条件集合演算子の詳細については、「複数値のコンテキストキー」を参照してください。

単一値と複数値の分類については、条件コンテキストキーの値の種類として、AWS グローバル条件コンテキストキー トピックでそれぞれ説明されています。サービス認証リファレンスでは、異なる方法で複数値のコンテキストキーを分類しています。ArrayOf プレフィックスのあとに、条件演算子のカテゴリタイプが続くという形式です。例えば、ArrayOfStringArrayOfARN などです。

例えば、リクエストは最大でも 1 つの VPC エンドポイントから発信されるため、aws:SourceVpce は単一値のコンテキストキーです。サービスには、そのサービスに属するサービスプリンシパル名を複数持つことができるため、aws:PrincipalServiceNamesList は複数値のコンテキストキーです。

どの単一値のコンテキストキーでも、ポリシー変数として使用できます。複数値のコンテキストキーは、ポリシー変数としては使用できません。ポリシー変数の詳細については、「IAM ポリシーの要素: 変数とタグ」を参照してください。

複数値のコンテキストキーは、条件集合演算子 ForAllValues または ForAnyValue が必要です。aws:RequestTag/tag-keyaws:ResourceTag/tag-key のようなキーバリューペアを含むコンテキストキーは複数の 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 でないことがチェックできるようにします。

    重要

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

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

注記

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