

# IAM JSON ポリシー要素Condition
<a name="reference_policies_elements_condition"></a>

`Condition` 要素 (または`Condition` *block*) は、ポリシーを実行するタイミングの条件を指定することができます。`Condition` 要素はオプションです。`Condition` 要素に、[条件演算子](reference_policies_elements_condition_operators.md) (等しい、より小さい、など) を使用して、ポリシーのコンテキストキーバリューをリクエストコンテキストのキーバリューに一致させる式を構築します。リクエストコンテキストの詳細については、「[リクエストのコンポーネント](intro-structure.md#intro-structure-request)」を参照してください。

```
"Condition" : { "{condition-operator}" : { "{condition-key}" : "{condition-value}" }}
```

ポリシー条件で指定できるコンテキストキーは、[グローバル条件コンテキストキー](reference_policies_condition-keys.md)またはサービス固有のコンテキストキーです。グローバル条件コンテキストキーには、`aws:` というプレフィックスが付いています。サービス固有のコンテキストキーには、サービスのプレフィックスがあります。例えば Amazon EC2 では、`ec2:InstanceType` コンテキストキーを使用して、そのサービスに固有の条件を記述できます。`iam:` プレフィックスが付いたサービス固有の IAM コンテキストキーを表示するには、「[IAM および AWS STS の条件コンテキストキー](reference_policies_iam-condition-keys.md)」を参照してください。

コンテキストキーでは、名前の大文字と小文字が区別されません。例えば、`aws:SourceIP` コンテキストキーを含めることは、`AWS:SourceIp` をテストすることと同じです。コンテキストキーの値の大文字と小文字の区別は、使用する[条件演算子](reference_policies_elements_condition_operators.md)によって異なります。例えば、次の条件には、`john` によって行われたリクエストのみが一致するようにする `StringEquals` 演算子が含まれています。`John` という名前のユーザーはアクセスを拒否されます。

```
"Condition" : { "StringEquals" : { "aws:username" : "john" }}
```

次の条件では、[`StringEqualsIgnoreCase`](reference_policies_elements_condition_operators.md#Conditions_String) 演算子を使用して、`john` または `John` という名前のユーザーに一致させます。

```
"Condition" : { "StringEqualsIgnoreCase" : { "aws:username" : "john" }}
```

一部のコンテキストキーでは、キー名の一部を指定することができるキーバリューのペアをサポートしています。この例には、[`aws:RequestTag/tag-key`](reference_policies_condition-keys.md#condition-keys-requesttag) コンテキストキー、AWS KMS [https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context)、および複数のサービスでサポートされている [`ResourceTag/tag-key`](reference_policies_condition-keys.md#condition-keys-resourcetag) コンテキストキーが含まれます。
+ [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policy-structure.html#amazon-ec2-keys) などのサービスに `ResourceTag/tag-key` コンテキストキーを使用する場合は、`tag-key` のキー名を指定する必要があります。
+ **キー名では大文字と小文字が区別されません。**つまり、ポリシーの条件要素で `"aws:ResourceTag/TagKey1": "Value1"` で指定した場合、その条件は `TagKey1` または `tagkey1` という名前のリソースタグキーに一致しますが、その両方には一致しません。
+ これらの属性をサポートする AWS サービスでは、大文字と小文字だけが異なる複数のキー名を作成することができる場合があります。例えば、`ec2=test1` および `EC2=test2` を使用して Amazon EC2 インスタンスにタグ付けします。`"aws:ResourceTag/EC2": "test1"` などの条件を使用して、そのリソースへのアクセスを許可すると、キー名は両方のタグと一致しますが、1 つの値のみが一致します。これにより、予期しない障害が発生することがあります。

**重要**  
ベストプラクティスとして、キーバリューのペア属性に名前を付けるときは、アカウントのメンバーが一貫した命名規則に従うようにします。例としては、AWS KMS タグや暗号化コンテキストなどがあります。これを強制するには、タグ付けに [`aws:TagKeys`](reference_policies_condition-keys.md#condition-keys-tagkeys) コンテキストキーを使用するか、AWS KMS 暗号化コンテキストに [https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context-keys](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context-keys) を使用します。
+ 条件演算子の一覧と演算子の動作の説明については、「[条件演算子](reference_policies_elements_condition_operators.md)」を参照してください。
+ 他に特定のない限り、すべてのコンテキストキーには複数の値を含むことができます。複数の値を持つコンテキストキーを処理する方法の説明については、「[複数値のコンテキストキーの演算子を設定する](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)」を参照してください。
+ グローバルに利用できるコンテキストキーのすべてのリストについては、[AWS グローバル条件コンテキストキー](reference_policies_condition-keys.md) を参照してください。
+ 各サービスで定義されるコンテキストキーについては、「[AWS のサービスのアクション、リソース、および条件キー](reference_policies_actions-resources-contextkeys.html)」を参照してください。

## リクエストのコンテキスト
<a name="AccessPolicyLanguage_RequestContext"></a>

[プリンシパル](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html?icmpid=docs_homepage_addtlrcs#principal)が AWS に[リクエスト](intro-structure.md#intro-structure-request)を行うと、AWS はリクエスト情報をリクエストコンテキストに収集します。リクエストコンテキストには、プリンシパル、リソース、アクション、およびその他の環境プロパティに関する情報が含まれます。ポリシー評価は、ポリシーのプロパティを、AWS で実行できるアクションを評価および承認するためにリクエストで送信されたプロパティと照合します。

JSON ポリシーの `Condition` 要素を使用して、リクエストコンテキストに対して特定のコンテキストキーをテストできます。例えば、[aws:CurrentTime](reference_policies_condition-keys.md#condition-keys-currenttime) コンテキストキーを使用するポリシーを作成して、[特定の日付範囲内でのみアクションの実行をユーザーに許可できます](reference_policies_examples_aws-dates.md)。

以下の例は、Martha Rivera が MFA デバイスを非アクティブ化するリクエストを送信したときのリクエストコンテキストを示しています。

```
Principal: AROA123456789EXAMPLE
Action: iam:DeactivateMFADevice
Resource: arn:aws:iam::user/martha
Context:
  – aws:UserId=AROA123456789EXAMPLE:martha
  – aws:PrincipalAccount=1123456789012
  – aws:PrincipalOrgId=o-example
  – aws:PrincipalARN=arn:aws:iam::1123456789012:assumed-role/TestAR
  – aws:MultiFactorAuthPresent=true
  – aws:MultiFactorAuthAge=2800
  – aws:CurrentTime=...
  – aws:EpochTime=...
  – aws:SourceIp=...
```

リクエストコンテキストは、過去 1 時間 (3,600 秒) に MFA を使用してサインインした場合にのみ、ユーザーが自分の多要素認証 (MFA) デバイスを削除することを許可するポリシーに対して照合されます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Sid": "AllowRemoveMfaOnlyIfRecentMfa",
        "Effect": "Allow",
        "Action": [
            "iam:DeactivateMFADevice"
        ],
        "Resource": "arn:aws:iam::*:user/${aws:username}",
        "Condition": {
            "NumericLessThanEquals": {"aws:MultiFactorAuthAge": "3600"}
        }
    }
}
```

------

この例では、ポリシーはリクエストコンテキストに一致します。アクションは同じで、リソースは「\$1」ワイルドカードに一致し、`aws:MultiFactorAuthAge` の値は 3600 未満の 2800 であるため、ポリシーはこの認可リクエストを許可します。

AWS はポリシー内の各コンテキストキーを評価し、*true* または *false* の値を返します。リクエストに存在しないコンテキストキーは、不一致と見なされます。

リクエストコンテキストは次の値を返すことができます。
+ **True** – リクエスタが過去 1 時間以内に MFA を使用してサインインした場合、条件は *true* を返します。
+ **False** – リクエスタが MFA を使用して 1 時間以上前にサインインした場合、条件は *false* を返します。
  + **Not present** – AWS CLI リクエスタがまたは AWS API の IAM ユーザーアクセスキーを使用してリクエストを行った場合、キーは存在しません。この場合、キーは存在せず、一致しません。

**注記**  
場合によっては、条件キー値が存在しないときでも true が返されることがあります。例えば、`ForAllValues` 修飾子を追加すると、コンテキストキーがリクエストに存在しない場合、リクエストは true を返します。欠落しているコンテキストキーや空の値を持つコンテキストキーが True と評価されないようにするには、コンテキストキーが存在し、その値が null でないかどうかをチェックするために `false` 値を使用する [Null 条件演算子](reference_policies_elements_condition_operators.md#Conditions_Null) をポリシーに含めることができます。

## 条件ブロック
<a name="AccessPolicyLanguage_ConditionBlock"></a>

以下の例は、`Condition`要素の基本フォーマットを示します。

```
"Condition": {"StringLike": {"s3:prefix": ["jane/*"]}}
```

リクエストからの値は、コンテキストキーによって表現されます。この場合は `s3:prefix` です。コンテキストキーバリューは、`jane/*` などのリテラル値として指定した値と比較されます。比較の種類は、[条件演算子](reference_policies_elements_condition_operators.md)によって指定されます (ここでは `StringLike`)。等号、大なり記号、小なり記号といった一般的なブール演算子を使用して、文字列、日付、数値などを比較する条件を作成できます。[文字列演算子](reference_policies_elements_condition_operators.md#Conditions_String)または [ARN 演算子](reference_policies_elements_condition_operators.md#Conditions_ARN)を使用する場合は、コンテキストキーの値に[ポリシー変数](reference_policies_variables.md)を使用することもできます。次の例では、`aws:username` 変数が含まれています。

```
"Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}}
```

一部の環境では、コンテキストキーに複数の値が含まれる可能性があります。たとえば、Amazon DynamoDB へのリクエストによって、テーブルの複数の属性を返すまたは更新することが要求される場合があります。DynamoDB テーブルへのアクセスのポリシーには、リクエスト内のすべての属性を含む `dynamodb:Attributes` コンテキストキーを追加できます。`Condition` 要素で設定演算子を使用することで、リクエスト内のすべての属性を、ポリシー内の許可された属性のリストと照合できます。詳細については、「[複数値のコンテキストキーの演算子を設定する](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)」を参照してください。

リクエスト中にポリシーが評価される際、AWS はキーをリクエストからの対応する値に置き換えます。（この例では、AWS はリクエストの日時を使用します。) 条件が評価された上で「true（真）」または「false（偽）」が返され、それを考慮に入れてポリシー全体がリクエストを許可または拒否します。

### 条件内の複数の値
<a name="Condition-multiple-conditions"></a>

`Condition` 要素は複数の条件演算子を含むことができ、各条件演算子は複数のキーと値のペアを含むことができます。以下の図が解説したものです。

![\[2 つの条件演算子のブロック図。最初のブロックには 2 つのコンテキストキープレースホルダーが含まれていて、それぞれに複数の値があります。2 番目の条件ブロックには、複数の値を持つ 1 つのコンテキストキーが含まれます。\]](http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/images/AccessPolicyLanguage_Condition_Block.diagram.png)


詳細については、「[複数値のコンテキストキーの演算子を設定する](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)」を参照してください。

# IAM JSON ポリシー要素: 条件演算子
<a name="reference_policies_elements_condition_operators"></a>

<a name="topiclist"></a>

`Condition` 要素で条件演算子を使用して、ポリシーの条件キーバリューをリクエストコンテキストの値と一致させます。`Condition` 要素の詳細については、「[IAM JSON ポリシー要素Condition](reference_policies_elements_condition.md)」を参照してください。

ポリシーで使用できる条件演算子は、選択する条件キーによって異なります。グローバル条件キーまたはサービス固有の条件キーを選択できます。グローバル条件キーに使用できる条件演算子については、「[AWS グローバル条件コンテキストキー](reference_policies_condition-keys.md)」を参照してください。サービスのサービス固有の条件キーを表示するには、「[AWS サービスのアクション、リソース、および条件キー](reference_policies_actions-resources-contextkeys.html)」を参照し、キーを表示するサービスを選択します。

**重要**  
ポリシー条件で指定したキーがリクエストコンテキストに存在しない場合、値は一致せず条件は false になります。`StringNotLike` または `ArnNotLike` などのように、キーの一致を必要としないポリシー条件であり、かつ正しいキーが存在していない場合、条件は *true* となります。このロジックは、[...IfExists](#Conditions_IfExists) および [Null check](#Conditions_Null) を除くすべての条件演算子に適用されます。これらの演算子は、キーがリクエストコンテキストにある（存在する）かどうかをテストします。

条件演算子は次のカテゴリに分類できます。
+ [文字列](#Conditions_String)
+ [数値](#Conditions_Numeric)
+ [日付および時間](#Conditions_Date)
+ [ブール値](#Conditions_Boolean)
+ [バイナリ](#Conditions_BinaryEquals)
+ [IP アドレス](#Conditions_IPAddress)
+ [Amazon リソースネーム (ARN)](#Conditions_ARN) (一部のサービスでのみ使用可能)
+ [...IfExists](#Conditions_IfExists) (別のチェックの一部としてキーバリューが存在するかを確認)
+ [Null check](#Conditions_Null) (スタンドアロンチェックとしてキーが存在するかを確認)

## 文字列条件演算子
<a name="Conditions_String"></a>

文字列条件演算子では、キーと文字列値の比較に基づいてアクセスを制限する `Condition` 要素を構築できます。
+  **ポリシー変数** - [サポート](reference_policies_variables.md)
+ **ワイルドカード** – [サポート](#Conditions_String-wildcard)


****  

| 条件演算子 | 説明 | 
| --- | --- | 
|   `StringEquals`   |  完全一致、大文字と小文字の区別あり。  | 
|   `StringNotEquals`   |  符号反転の一致  | 
|   `StringEqualsIgnoreCase`   |  完全一致、大文字と小文字の区別なし。  | 
|   `StringNotEqualsIgnoreCase`   |  符号反転の一致、大文字と小文字の区別なし。  | 
|   `StringLike`   | 大文字と小文字の区別がある一致。値には、複数文字一致のワイルドカード (\$1) および 1 文字一致のワイルドカード (?) を文字列のどこにでも含めることができます。文字列の部分一致検索を行うには、ワイルドカードを指定する必要があります。  キーに複数の値が含まれる場合、設定演算子 (`StringLike` および `ForAllValues:StringLike`) を使用して `ForAnyValue:StringLike` を修飾できます。詳細については、「[複数値のコンテキストキーの演算子を設定する](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)」を参照してください。  | 
|   `StringNotLike`   |  符号反転の一致には、大文字と小文字の区別があります。値には、複数文字一致のワイルドカード (\$1) または 1 文字一致のワイルドカード (?) を文字列のどこにでも含めることができます。  | 

**Example 文字列条件演算子**  
たとえば、次のステートメントに含まれている `Condition` 要素では、[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principaltag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principaltag) キーの使用により、リクエストを行うプリンシパルに `iamuser-admin` ジョブカテゴリのタグ付けが必要であることを指定しています。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Action": "iam:*AccessKey*",
        "Resource": "arn:aws:iam::111122223333:user/*",
        "Condition": {
            "StringEquals": {
                "aws:PrincipalTag/job-category": "iamuser-admin"
            }
        }
    }
}
```
ポリシー条件で指定したキーがリクエストコンテキストに存在しない場合、値は一致しません。この例では、タグがアタッチされた IAM ユーザーをプリンシパルが使用している場合、`aws:PrincipalTag/job-category` キーがリクエストコンテキストに存在します。これは、タグまたはセッションタグがアタッチされた IAM ロールを使用するプリンシパルのために含まれます。タグがないユーザーがアクセスキーを表示または編集しようとすると、条件により `false` が返され、リクエストはこのステートメントによって暗黙的に拒否されます。  
次の表は、AWS がリクエストの条件キー値に基づいてこのポリシーを評価する方法を示しています。  


| ポリシー条件 | リクエストコンテキスト | 結果 | 
| --- | --- | --- | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/job-category": "iamuser-admin"<br />}</pre>  | <pre>aws:PrincipalTag/job-category:<br />  – iamuser-admin</pre>  |  一致 | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/job-category": "iamuser-admin"<br />}</pre>  | <pre>aws:PrincipalTag/job-category:<br />  – dev-ops</pre>  | 一致なし | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/job-category": "iamuser-admin"<br />}</pre>  |  リクエストコンテキストに `aws:PrincipalTag/job-category` はありません。  | 一致なし | 

**Example 文字列条件演算子を含むポリシー変数の使用**  
以下の例では、`StringLike` 条件演算子を使用して[ポリシー変数](reference_policies_variables.md)による文字列一致を実行して、IAM ユーザーが Amazon S3 コンソールを使用して Amazon S3 バケット内の自らの「ホームディレクトリ」を管理できるようにするポリシーを作成します。このポリシーは、`s3:prefix` が指定されたパターンのいずれかに一致する限り、指定されたアクションを S3 バケットに対して実行することを許可します。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Resource": "arn:aws:s3:::*"
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "",
            "home/",
            "home/${aws:username}/"
          ]
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/home/${aws:username}",
        "arn:aws:s3:::amzn-s3-demo-bucket/home/${aws:username}/*"
      ]
    }
  ]
}
```
次の表は、AWS がリクエストコンテキストの [aws:username](reference_policies_condition-keys.md#condition-keys-username) 値に基づいて、さまざまなユーザーに対してこのポリシーを評価する方法を示しています。  


| ポリシー条件 | リクエストコンテキスト | 結果 | 
| --- | --- | --- | 
|  <pre>"StringLike": {<br />  "s3:prefix": [<br />    "home/",<br />    "home/${aws:username}/"<br />  ]<br />}</pre>  | <pre>aws:username:<br />  – martha_rivera</pre>  | <pre>"StringLike": {<br />  "s3:prefix": [<br />    "home/",<br />    "home/martha_rivera/"<br />  ]<br />}</pre>  | 
|  <pre>"StringLike": {<br />  "s3:prefix": [<br />    "home/",<br />    "home/${aws:username}/"<br />  ]<br />}</pre>  |  <pre>aws:username:<br />  – nikki_wolf</pre>  |  <pre>"StringLike": {<br />  "s3:prefix": [<br />    "home/",<br />    "home/nikki_wolf/"<br />  ]<br />}</pre>  | 
|  <pre>"StringLike": {<br />  "s3:prefix": [<br />    "home/",<br />    "home/${aws:username}/"<br />  ]<br />}</pre>  |  リクエストコンテキストに `aws:username` はありません。  | 一致なし | 
OIDC フェデレーションによるアプリケーション ID とユーザー ID に基づいてリソースへのアクセスを制限する `Condition` 要素の使用方法を示すポリシーの例については、「[Amazon S3: Amazon Cognito ユーザーにバケット内のオブジェクトへのアクセスを許可する](reference_policies_examples_s3_cognito-bucket.md)」を参照してください。

### 複数値の文字列条件演算子
<a name="conditions_string_multivalued"></a>

リクエストのキーに複数の値が含まれる場合、文字列演算子は集合演算子 (`ForAllValues` および `ForAnyValue`) で修飾できます。複数のコンテキストキーまたは値の評価ロジックの詳細については、「[複数値のコンテキストキーの演算子を設定する](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)」を参照してください。


| 条件演算子 | 説明 | 
| --- | --- | 
|  `ForAllValues:StringEquals` `ForAllValues:StringEqualsIgnoreCase`  |  リクエストの条件キーのすべての値は、ポリシーの値の少なくとも 1 つと一致する必要があります。  | 
|  `ForAnyValue:StringEquals` `ForAnyValue:StringEqualsIgnoreCase`  |  リクエストの少なくとも 1 つの条件キー値が、ポリシーの値のいずれかと一致する必要があります。  | 
|  `ForAllValues:StringNotEquals` `ForAllValues:StringNotEqualsIgnoreCase`  |  符号反転の一致。 リクエストのコンテキストキーの値が、ポリシーのコンテキストキー値のいずれにも一致しません。  | 
|  `ForAnyValue:StringNotEquals` `ForAnyValue:StringNotEqualsIgnoreCase`  |  符号反転の一致。 リクエストの少なくとも 1 つのコンテキストキーの値が、ポリシーのコンテキストキーの値のいずれにも一致しない必要があります。  | 
|  `ForAllValues:StringLike`  |  リクエストの条件キーのすべての値は、ポリシーの値の少なくとも 1 つと一致する必要があります。  | 
|  `ForAnyValue:StringLike`  |  リクエストの少なくとも 1 つの条件キー値が、ポリシーの値のいずれかと一致する必要があります。  | 
|  `ForAllValues:StringNotLike`  |  符号反転の一致。 リクエストのコンテキストキーの値が、ポリシーのコンテキストキー値のいずれにも一致しません。  | 
|  `ForAnyValue:StringNotLike`  |  符号反転の一致。 リクエストの少なくとも 1 つのコンテキストキーの値が、ポリシーのコンテキストキーの値のいずれにも一致しない必要があります。  | 

**Example 文字列条件演算子を含む `ForAnyValue` の使用**  
この例では、Amazon EC2 `CreateTags` アクションを使用してタグをインスタンスにアタッチできるようにする、ID ベースのポリシーを作成する方法を示しています。`StringEqualsIgnoreCase` を使用するとき、タグをアタッチできるのは、タグに `environment` キーとともに、`preprod` または `storage` の値が含まれている場合だけです。演算子に `IgnoreCase` を追加すると、`preprod`、`Preprod`、`PreProd` など True に解決されるよう既存のタグ値の大文字化を許可します。  
[aws:TagKeys](reference_policies_condition-keys.md#condition-keys-tagkeys) 条件キーで `ForAnyValue` 修飾子を追加するとき、リクエストの少なくとも 1 つのタグキー値が値 `environment` と一致する必要があります。`ForAnyValue` の比較では大文字と小文字が区別されるため、`environment` の代わりに `Environment` を使用するなど、ユーザーはタグキーに大文字と小文字が同じでない文字を使用できなくなります。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "ec2:CreateTags",
    "Resource": "arn:aws:ec2:*:*:instance/*",
    "Condition": {
      "StringEqualsIgnoreCase": {
        "aws:RequestTag/environment": [
          "preprod",
          "storage"
        ]
      },
      "ForAnyValue:StringEquals": {
        "aws:TagKeys": "environment"
      }
    }
  }
}
```
 次の表は、AWS がリクエストの条件キー値に基づいてこのポリシーを評価する方法を示しています。  


| ポリシー条件 | リクエストコンテキスト | 結果 | 
| --- | --- | --- | 
|  <pre>"StringEqualsIgnoreCase": {<br />  "aws:RequestTag/environment": [<br />    "preprod",<br />    "storage"<br />  ]<br />},<br />"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "environment"<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />aws:RequestTag/environment:<br />  – preprod</pre>  | 一致  | 
|  <pre>"StringEqualsIgnoreCase": {<br />  "aws:RequestTag/environment": [<br />    "preprod",<br />    "storage"<br />  ]<br />},<br />"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "environment"<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />  – costcenter<br />aws:RequestTag/environment:<br />  – PreProd</pre>  | 一致  | 
|  <pre>"StringEqualsIgnoreCase": {<br />  "aws:RequestTag/environment": [<br />    "preprod",<br />    "storage"<br />  ]<br />},<br />"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "environment"<br />}</pre>  | <pre>aws:TagKeys:<br />  – Environment<br />aws:RequestTag/Environment:<br />  – preprod</pre>  | 一致なし  | 
|  <pre>"StringEqualsIgnoreCase": {<br />  "aws:RequestTag/environment": [<br />    "preprod",<br />    "storage"<br />  ]<br />},<br />"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "environment"<br />}</pre>  | <pre>aws:TagKeys:<br />  – costcenter<br />aws:RequestTag/environment:<br />  – preprod</pre>  | 一致なし  | 
|  <pre>"StringEqualsIgnoreCase": {<br />  "aws:RequestTag/environment": [<br />    "preprod",<br />    "storage"<br />  ]<br />},<br />"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "environment"<br />}</pre>  |  リクエストコンテキストに `aws:TagKeys` はありません。 <pre>aws:RequestTag/environment:<br />  – storage</pre>  | 一致なし  | 
|  <pre>"StringEqualsIgnoreCase": {<br />  "aws:RequestTag/environment": [<br />    "preprod",<br />    "storage"<br />  ]<br />},<br />"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "environment"<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment</pre> リクエストコンテキストに `aws:RequestTag/environment` はありません。  | 一致なし  | 
|  <pre>"StringEqualsIgnoreCase": {<br />  "aws:RequestTag/environment": [<br />    "preprod",<br />    "storage"<br />  ]<br />},<br />"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "environment"<br />}</pre>  |  リクエストコンテキストに `aws:TagKeys` はありません。 リクエストコンテキストに `aws:RequestTag/environment` はありません。  | 一致なし  | 

### ワイルドカードによる一致
<a name="Conditions_String-wildcard"></a>

文字列条件演算子は、事前に定義された形式を適用しないパターンレスマッチングを実行します。ARN 条件演算子と日付条件演算子は、条件キー値に構造体を適用する文字列演算子のサブセットです。

キーを比較する値に対応する条件演算子の使用をお勧めします。例えば、キーと文字列値を比較するときは [文字列条件演算子](#Conditions_String) を使用してください。同様に、キーと ARN 値を比較するときは [Amazon リソースネーム (ARN) の条件演算子](#Conditions_ARN) を使用してください。

**Example**  
この例では、組織内のリソースの境界を作成する方法を示します。このポリシーの条件は、アクセスされるリソースが AWS Organizations の組織単位 (OUs) の特定のセットにある場合を除き、Amazon S3 アクションへのアクセスを拒否します。AWS Organizations パスは、組織エンティティの構造をテキストで表記したものです。  
条件では、`aws:ResourceOrgPaths` にリストされた OU パスのいずれかが含まれている必要があります。`aws:ResourceOrgPaths` は複数値条件であるため、ポリシーは `ForAllValues:StringNotLike` 演算子を使用して `aws:ResourceOrgPaths` の値をポリシーに含まれる OU のリストと比較します。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyS3AccessOutsideMyBoundary",
      "Effect": "Deny",
      "Action": [
        "s3:*"
      ],
      "Resource": "*",
      "Condition": {
        "ForAllValues:StringNotLike": {
          "aws:ResourceOrgPaths": [
            "o-acorg/r-acroot/ou-acroot-mediaou/",
            "o-acorg/r-acroot/ou-acroot-sportsou/*"
          ] 
        }
      }
    }
  ]
}
```
次の表は、AWS がリクエストの条件キー値に基づいてこのポリシーを評価する方法を示しています。  


| ポリシー条件 | リクエストコンテキスト | 結果 | 
| --- | --- | --- | 
|  <pre>"ForAllValues:StringNotLike": {<br />  "aws:ResourceOrgPaths": [<br />    "o-acorg/r-acroot/ou-acroot-mediaou/",<br />    "o-acorg/r-acroot/ou-acroot-sportsou/*"<br />  ] <br />}</pre>  | <pre>aws:ResourceOrgPaths:<br />  – o-acorg/r-acroot/ou-acroot-sportsou/costcenter/</pre>  | 一致 | 
|  <pre>"ForAllValues:StringNotLike": {<br />  "aws:ResourceOrgPaths": [<br />    "o-acorg/r-acroot/ou-acroot-mediaou/",<br />    "o-acorg/r-acroot/ou-acroot-sportsou/*"<br />  ] <br />}</pre>  | <pre>aws:ResourceOrgPaths:<br />  – o-acorg/r-acroot/ou-acroot-mediaou/costcenter/</pre>  | 一致なし | 
|  <pre>"ForAllValues:StringNotLike": {<br />  "aws:ResourceOrgPaths": [<br />    "o-acorg/r-acroot/ou-acroot-mediaou/",<br />    "o-acorg/r-acroot/ou-acroot-sportsou/*"<br />  ] <br />}</pre>  |  リクエストに `aws:ResourceOrgPaths:` はありません。  | 一致なし | 

## 数値条件演算子
<a name="Conditions_Numeric"></a>

数値条件演算子では、キーと整数または 10 進値の比較に基づいてアクセスを制限する `Condition` 要素を構築できます。
+  **ポリシー変数** – サポート外
+ **ワイルドカード** - サポート外


****  

| 条件演算子 | 説明 | 
| --- | --- | 
|   `NumericEquals`   |  一致  | 
|   `NumericNotEquals`   |  符号反転の一致  | 
|   `NumericLessThan`   |  「未満」の部分一致  | 
|   `NumericLessThanEquals`   |  「未満と等しい」の部分一致  | 
|   `NumericGreaterThan`   |  「上回る」の部分一致  | 
|   `NumericGreaterThanEquals`   |  「上回るまたは等しい」の部分一致  | 

たとえば、以下のステートメントに含まれる `Condition` 要素は、`NumericLessThanEquals` 条件演算子を `s3:max-keys` キーと合わせて使用して、リクエスタが * の中で一度に*最大`amzn-s3-demo-bucket` 10 個のオブジェクトを列挙できることを指定しています。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "s3:ListBucket",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
    "Condition": {"NumericLessThanEquals": {"s3:max-keys": "10"}}
  }
}
```

------

ポリシー条件で指定したキーがリクエストコンテキストに存在しない場合、値は一致しません。この例では、`ListBucket` オペレーションを実行すると、`s3:max-keys` キーは常にリクエストに存在します。このポリシーですべての Amazon S3 オペレーションが許可されている場合、10 以下の値を持つ `max-keys` コンテキストキーを含むオペレーションのみが許可されます。

## 日付条件演算子
<a name="Conditions_Date"></a>

日付条件演算子では、キーと日付/時刻値の比較に基づいてアクセスを制限する `Condition` 要素を構築できます。これらの条件演算子は、[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-currenttime](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-currenttime) キーまたは [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-epochtime](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-epochtime) キーと合わせて使用します。日付/時間値と共に、[W3C implementations of the ISO 8601 date formats](http://www.w3.org/TR/NOTE-datetime) またはエポック (UNIX) 時間のどれか 1 つを特定しなければいけません。
+  **ポリシー変数** – サポート外
+ **ワイルドカード** - サポート外


****  

| 条件演算子 | 説明 | 
| --- | --- | 
|   `DateEquals`   |  特定の日付との一致  | 
|   `DateNotEquals`   |  符号反転の一致  | 
|   `DateLessThan`   |  特定の日時よりも前の日時との一致  | 
|   `DateLessThanEquals`   |  特定の日時またはそれよりも前の日時との一致  | 
|   `DateGreaterThan`   |  特定の日時よりも後の日時との一致  | 
|   `DateGreaterThanEquals`   |  特定の日時またはそれよりも後の日時との一致  | 

例えば、次のステートメントには、`DateGreaterThan` 条件演算子を [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tokenissuetime](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tokenissuetime) キーとともに使用する `Condition` 要素が含まれています。この条件は、リクエストの作成に使用された一時的なセキュリティ認証情報が 2020 年に発行されたことを示します。このポリシーは、毎日プログラムによって更新され、アカウントメンバーが最新の資格情報を使用するようにできます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Action": "iam:*AccessKey*",
        "Resource": "arn:aws:iam::111122223333:user/*",
        "Condition": {
            "DateGreaterThan": {
                "aws:TokenIssueTime": "2020-01-01T00:00:01Z"
            }
        }
    }
}
```

------

ポリシー条件で指定したキーがリクエストコンテキストに存在しない場合、値は一致しません。プリンシパルがリクエストを行うために一時的な認証情報を使用する場合に限り、リクエストコンテキストで `aws:TokenIssueTime` キーが表示されます。このキーは、アクセスキーを使用して行われたAWS CLI、AWS API、または AWS SDK リクエストには存在しません。この例では、IAM ユーザーがアクセスキーを表示または編集しようとすると、リクエストは拒否されます。

## ブール条件演算子
<a name="Conditions_Boolean"></a>

ブール条件演算子では、キーと `true` または `false` の比較に基づいてアクセスを制限する `Condition` 要素を構築できます。

キーに複数の値が含まれる場合、ブール型演算子は集合演算子 `ForAllValues` および `ForAnyValue` で修飾できます。複数のコンテキストキーまたは値の評価ロジックの詳細については、「[複数値のコンテキストキーの演算子を設定する](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)」を参照してください。
+  **ポリシー変数** - [サポート](reference_policies_variables.md)
+ **ワイルドカード** - サポート外


****  

| 条件演算子 | 説明 | 
| --- | --- | 
|   `Bool`   |  ブールの一致  | 
|   `ForAllValues:Bool`   |  Bool データ型の配列で使用します。コンテキストキー値のすべてのブール値は、ポリシーのブール値と一致する必要があります。 `ForAllValues` 演算子が欠落しているコンテキストキーまたは空の値のコンテキストキーを Allowed と評価しないように、ポリシーに [Null 条件演算子](#Conditions_Null)を含めることができます。  | 
|   `ForAnyValue:Bool`   |  Bool データ型の配列とともに使用します。コンテキストキー値の少なくとも 1 つのブール値は、ポリシーのブール値と一致する必要があります。  | 

**Example ブール条件演算子**  
次の ID ベースのポリシーでは [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-securetransport](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-securetransport) キーを持つ `Bool` 条件演算子が使用されるため、リクエストが SSL 経由でない場合に、オブジェクトとオブジェクトタグを送信先バケットとそのコンテンツに複製することを拒否できます。  
このポリシーでは、アクションを許可しません。特定のアクションを許可する他のポリシーと組み合わせてこのポリシーを使用します。  
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "BooleanExample",
      "Action": "s3:ReplicateObject",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket",
        "arn:aws:s3:::amzn-s3-demo-bucket/*"
      ],
      "Condition": {
        "Bool": {
          "aws:SecureTransport": "false"
        }
      }
    }
  ]
}
```
次の表は、AWS がリクエストの条件キー値に基づいてこのポリシーを評価する方法を示しています。  


| ポリシー条件 | リクエストコンテキスト | 結果 | 
| --- | --- | --- | 
|  <pre>"Bool": {<br />  "aws:SecureTransport": "false"<br />}</pre>  | <pre>aws:SecureTransport:<br />  – false</pre>  | 一致 | 
|  <pre>"Bool": {<br />  "aws:SecureTransport": "false"<br />}</pre>  | <pre>aws:SecureTransport:<br />  – true</pre>  | 一致なし | 
|  <pre>"Bool": {<br />  "aws:SecureTransport": "false"<br />}</pre>  |  リクエストコンテキストに `aws:SecureTransport` はありません。  | 一致なし | 

## バイナリ条件演算子
<a name="Conditions_BinaryEquals"></a>

`BinaryEquals` 条件演算子では、バイナリ形式のキーバリューをテストする `Condition` 要素を構築できます。これは、指定されたキーの値を、ポリシー内の値を [base-64](https://en.wikipedia.org/wiki/Base64) エンコードした表現に対してバイト単位で比較します。ポリシー条件で指定したキーがリクエストコンテキストに存在しない場合、値は一致しません。
+  **ポリシー変数** – サポート外
+ **ワイルドカード** - サポート外

```
"Condition" : {
  "BinaryEquals": {
    "key" : "QmluYXJ5VmFsdWVJbkJhc2U2NA=="
  }
}
```


| ポリシー条件 | リクエストコンテキスト | 結果 | 
| --- | --- | --- | 
|  <pre>"BinaryEquals": {<br />  "key" : "QmluYXJ5VmFsdWVJbkJhc2U2NA=="<br />}</pre>  | <pre>key:<br />  – QmluYXJ5VmFsdWVJbkJhc2U2NA==</pre>  | 一致 | 
|  <pre>"BinaryEquals": {<br />  "key" : "QmluYXJ5VmFsdWVJbkJhc2U2NA=="<br />}</pre>  | <pre>key:<br />  – ASIAIOSFODNN7EXAMPLE</pre>  | 一致なし | 
|  <pre>"BinaryEquals": {<br />  "key" : "QmluYXJ5VmFsdWVJbkJhc2U2NA=="<br />}</pre>  |  リクエストコンテキストに `key` はありません。  | 一致なし | 

## IP アドレス条件演算子
<a name="Conditions_IPAddress"></a>

IP アドレス条件演算子では、キーと IPv4 または IPv6 アドレスまたは IP アドレス範囲の比較に基づいてアクセスを制限する `Condition` 要素を構築できます。これらを [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceip](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceip) キーと合わせて使用します。値は、標準的な CIDR 形式でなければいけません (例 : 203.0.113.0/24 または 2001:DB8:1234:5678::/64)。IP アドレスの指定時に関連付けられたルーティングプレフィックスを使用しないと、IAM ではデフォルトのプレフィックス値 `/32` を使用します。

IPv6 をサポートしている AWS のサービスでは、0 の範囲を :: で表します。サービスで IPv6 がサポートされているかどうかは、そのサービスのドキュメントを参照してください。
+  **ポリシー変数** – サポート外
+ **ワイルドカード** - サポート外


****  

| 条件演算子 | 説明 | 
| --- | --- | 
|   `IpAddress`   |  所定の IP アドレスまたは範囲  | 
|   `NotIpAddress`   |  所定の IP アドレスまたは範囲以外のすべての IP アドレス  | 

**Example IP アドレス条件演算子**  
次のステートメントでは、`IpAddress` 条件を `aws:SourceIp` キーと合わせて使用して、リクエストが 203.0.113.0 から 203.0.113.255 までの IP 範囲から送られてこなければいけないことを指定しています。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Action": "iam:*AccessKey*",
        "Resource": "arn:aws:iam::111122223333:user/*",
        "Condition": {
            "IpAddress": {
                "aws:SourceIp": "203.0.113.0/24"
            }
        }
    }
}
```
`aws:SourceIp` 条件キーは、リクエストの送信元である IP アドレスに解決します。リクエストが Amazon EC2 インスタンスから発信された場合、`aws:SourceIp` はインスタンスのパブリックIPアドレスに評価されます。  
ポリシー条件で指定したキーがリクエストコンテキストに存在しない場合、値は一致しません。`aws:SourceIp` キーは、リクエスタが VPC エンドポイントを使用してリクエストを行う場合を除き、リクエストコンテキストに常に表示されます。この場合、条件は `false` を返し、リクエストはこのステートメントによって暗黙的に拒否されます。  
次の表は、AWS がリクエストの条件キー値に基づいてこのポリシーを評価する方法を示しています。  


| ポリシー条件 | リクエストコンテキスト | 結果 | 
| --- | --- | --- | 
|  <pre>"IpAddress": {<br />  "aws:SourceIp": "203.0.113.0/24"<br />}</pre>  | <pre>aws:SourceIp:<br />  – 203.0.113.1</pre>  | 一致 | 
|  <pre>"IpAddress": {<br />  "aws:SourceIp": "203.0.113.0/24"<br />}</pre>  | <pre>aws:SourceIp:<br />  – 198.51.100.1</pre>  | 一致なし | 
次の例では、組織内の有効な IP アドレスすべてを含めるために、IPv4 と IPv6 アドレスを混在させる方法を示しています。IPv6 への移行に合わせてポリシーが引き続き機能することを確認するため、すでにある IPv4 の範囲に追加する IPv6 アドレスの範囲の組織のポリシーを更新することをお勧めします。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "someservice:*",
    "Resource": "*",
    "Condition": {
      "IpAddress": {
        "aws:SourceIp": [
          "203.0.113.0/24",
          "2001:DB8:1234:5678::/64"
        ]
      }
    }
  }
}
```
`aws:SourceIp` 条件キーは、テストされた API をユーザーとして直接呼び出す場合に JSON ポリシーでのみ機能します。代わりにサービスを使用してターゲットサービスを呼び出した場合、ターゲットサービスは元のユーザーの IP アドレスではなく呼び出し元サービスの IP アドレスを認識します。これは、AWS CloudFormation を使用して Amazon EC2 を呼び出すことでインスタンスを自動的に作成した場合などに生じることがあります。現在のところ、JSON ポリシーで評価を行うために、発信元サービスを通じて元の IP アドレスをターゲットサービスに渡す方法はありません。これらのタイプのサービス API 呼び出しでは、`aws:SourceIp` 条件キーを使用しないでください。

## Amazon リソースネーム (ARN) の条件演算子
<a name="Conditions_ARN"></a>

Amazon Resource Name (ARN) 条件演算子では、キーと ARN の比較に基づいてアクセスを制限する `Condition` 要素を構築できます。ARN は文字列として見なされます。
+  **ポリシー変数** - [サポート](reference_policies_variables.md)
+ **ワイルドカード** – [サポート](reference_policies_elements_resource.md#reference_policies_elements_resource_wildcards)


****  

| 条件演算子 | 説明 | 
| --- | --- | 
|   `ArnEquals`, `ArnLike`  |  ARN の大文字と小文字を区別した一致。ARN のコロンで分割された 6 個の各構成要素は個別に確認され、それぞれ複数文字一致のワイルドカード (\$1) または 1 文字一致のワイルドカード (?) を含むことができます。`ArnEquals` および `ArnLike` 条件演算子は、同じように動作します。  | 
|   `ArnNotEquals`, `ArnNotLike`  |  ARN の符号反転の一致。`ArnNotEquals` および `ArnNotLike` 条件演算子は、同じように動作します。  | 

**Example ARN 条件演算子**  
次のリソースベースのポリシーの例は、SNS メッセージの送信先となる Amazon SQS キューにアタッチされたポリシーを示しています。この例では、サービスが 1 つまたは複数の特定の Amazon SNS トピックのためにメッセージを送る場合に限り、1 つまたは複数のキューにメッセージを送る Amazon SNS 許可を付与しています。`Resource` フィールドのキューを指定し、`SourceArn` キーの値として Amazon SNS トピックを指定します。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Principal": {
            "Service": "sns.amazonaws.com"
        },
        "Action": "SQS:SendMessage",
        "Resource": "arn:aws:sqs:us-east-1:123456789012:QUEUE-ID",
        "Condition": {
            "ArnEquals": {
                "aws:SourceArn": "arn:aws:sns:us-east-1:123456789012:TOPIC-ID"
            }
        }
    }
}
```
[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) キーは、リソース所有者に代わって別のサービスを呼び出すようにリソースがトリガーした場合にのみ、リクエストコンテキストに表示されます。IAM ユーザーがこのオペレーションを直接実行しようとすると、条件によ `false` が返され、リクエストはこのステートメントによって暗黙的に拒否されます。  
次の表は、AWS がリクエストの条件キー値に基づいてこのポリシーを評価する方法を示しています。  


| ポリシー条件 | リクエストコンテキスト | 結果 | 
| --- | --- | --- | 
|  <pre>"ArnEquals": {<br />  "aws:SourceArn": "arn:aws:sns:us-west-2:123456789012:TOPIC-ID"<br />}</pre>  | <pre>aws:SourceArn:<br />  – arn:aws:sns:us-west-2:123456789012:TOPIC-ID</pre>  | 一致 | 
|  <pre>"ArnEquals": {<br />  "aws:SourceArn": "arn:aws:sns:us-west-2:123456789012:TOPIC-ID"<br />}</pre>  | <pre>aws:SourceArn:<br />  – arn:aws:sns:us-west-2:777788889999:TOPIC-ID</pre>  | 一致なし | 
|  <pre>"ArnEquals": {<br />  "aws:SourceArn": "arn:aws:sns:us-west-2:123456789012:TOPIC-ID"<br />}</pre>  |  リクエストコンテキストに `aws:SourceArn` はありません。  | 一致なし | 

### 複数値 ARN 条件演算子
<a name="conditions_arn_multivalued"></a>

リクエストのキーに複数の値が含まれる場合、ARB 演算子は集合演算子 (`ForAllValues` および `ForAnyValue`) で修飾できます。複数のコンテキストキーまたは値の評価ロジックの詳細については、「[複数値のコンテキストキーの演算子を設定する](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)」を参照してください。


| 条件演算子 | 説明 | 
| --- | --- | 
|  `ForAllValues:ArnEquals` `ForAllValues:ArnLike`  |  リクエストコンテキストのすべての ARN は、ポリシーの ARN パターンの少なくとも 1 つと一致する必要があります。  | 
|  `ForAnyValue:ArnEquals` `ForAnyValue:ArnLike`  |  リクエストコンテキストの少なくとも 1 つの ARN は、ポリシーの ARN パターンのいずれかと一致する必要があります。  | 
|  `ForAllValues:ArnNotEquals` `ForAllValues:ArnNotLike`  |  符号反転の一致。 リクエストコンテキストの ARN のいずれも、ポリシー内の文字列 ARN パターンと一致してはいけません。  | 
|  `ForAnyValue:ArnNotEquals` `ForAnyValue:ArnNotLike`  |  符号反転の一致。 リクエストコンテキストの少なくとも 1 つの ARN は、ポリシーのどの ARN パターンとも一致してはいけません。  | 

**Example ARN 条件演算子で `ForAllValues` を使用する**  
以下の例では、`ForAllValues:ArnLike` を使用して Amazon CloudWatch Logs ログの論理配信ソースを作成または更新します。条件ブロックには、リクエストで渡されたログ生成リソース ARN をフィルタリングする条件キー [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchlogs.html#amazoncloudwatchlogs-policy-keys](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchlogs.html#amazoncloudwatchlogs-policy-keys) が含まれています。この条件演算子を使用する場合、リクエストのすべての ARN がポリシーの少なくとも 1 つの ARN と一致する必要があります。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "logs:PutDeliverySource",
            "Resource": "arn:aws:logs:us-east-1:123456789012:delivery-source:*",
            "Condition": {
                "ForAllValues:ArnLike": {
                    "logs:LogGeneratingResourceArns": [
                        "arn:aws:cloudfront::123456789012:distribution/*",
                        "arn:aws:cloudfront::123456789012:distribution/support*"
                    ]
                }
            }
        }
    ]
}
```
次の表は、AWS がリクエストの条件キー値に基づいてこのポリシーを評価する方法を示しています。  


| ポリシー条件 | リクエストコンテキスト | 結果 | 
| --- | --- | --- | 
|  <pre>"ForAllValues:ArnLike": {<br />  "logs:LogGeneratingResourceArns": [<br />    "arn:aws::cloudfront:123456789012:distribution/*",<br />    "arn:aws::cloudfront:123456789012:distribution/support*"<br />  ]<br />}</pre>  | <pre>logs:LogGeneratingResourceArns:<br />  – arn:aws::cloudfront:123456789012:distribution/costcenter</pre>  | 一致 | 
|  <pre>"ForAllValues:ArnLike": {<br />  "logs:LogGeneratingResourceArns": [<br />    "arn:aws::cloudfront:123456789012:distribution/*",<br />    "arn:aws::cloudfront:123456789012:distribution/support*"<br />  ]<br />}</pre>  | <pre>logs:LogGeneratingResourceArns:<br />  – arn:aws::cloudfront:123456789012:distribution/costcenter<br />  – arn:aws::cloudfront:123456789012:distribution/support2025</pre>  | 一致 | 
|  <pre>"ForAllValues:ArnLike": {<br />  "logs:LogGeneratingResourceArns": [<br />    "arn:aws::cloudfront:123456789012:distribution/*",<br />    "arn:aws::cloudfront:123456789012:distribution/support*"<br />  ]<br />}</pre>  | <pre>logs:LogGeneratingResourceArns:<br />  – arn:aws::cloudfront:123456789012:distribution/costcenter<br />  – arn:aws::cloudfront:123456789012:distribution/admin</pre>  | 一致なし | 
|  <pre>"ForAllValues:ArnLike": {<br />  "logs:LogGeneratingResourceArns": [<br />    "arn:aws::cloudfront:123456789012:distribution/*",<br />    "arn:aws::cloudfront:123456789012:distribution/support*"<br />  ]<br />}</pre>  | <pre>logs:LogGeneratingResourceArns:<br />  – arn:aws::cloudfront:777788889999:distribution/costcenter</pre>  | 一致なし | 
|  <pre>"ForAllValues:ArnLike": {<br />  "logs:LogGeneratingResourceArns": [<br />    "arn:aws::cloudfront:123456789012:distribution/*",<br />    "arn:aws::cloudfront:123456789012:distribution/support*"<br />  ]<br />}</pre>  |  リクエストコンテキストに `logs:LogGeneratingResourceArns` はありません。  | 一致  | 
`ForAllValues` 修飾子は、リクエストにコンテキストキーがない場合、またはコンテキストキーの値が null データセット (空の文字列など) に解決される場合、True を返します。欠落しているコンテキストキーや空の値を持つコンテキストキーが True と評価されないようにするには、コンテキストキーが存在し、その値が null でないかどうかをチェックするために `false` 値を使用する [Null 条件演算子](#Conditions_Null) をポリシーに含めることができます。

## IfExists 条件演算子
<a name="Conditions_IfExists"></a>

`Null` 条件 (`StringLikeIfExists` など) を除く任意の条件演算子名の末尾に `IfExists` を追加できます。「条件キーがリクエストのコンテキストで存在する場合、ポリシーで指定されたとおりにキーを処理します。キーが存在しない場合、条件要素は true と評価されます。」 `...IfExists` でチェックすると、ステートメント内の別の Condition 要素は一致なしの結果となることもありますが、キーが見つからないことはありません。`StringNotEqualsIfExists` のような否定条件演算子を持つ `"Effect": "Deny"` 要素を使用している場合は、条件キーがなくてもリクエストが拒否されます。

**`IfExists` の使用例**

多くの条件キーは特定のタイプのリソースに関する情報を示し、そのタイプのリソースにアクセスしている場合にのみ存在します。これらの条件キーはその他のタイプのリソースにはありません。ポリシーステートメントが 1 種類のリソースのみに適用される場合には、これで問題はありません。ところが、ポリシーステートメントが複数のサービスからアクションを参照する場合や、サービス内の特定のアクションが同じサービス内の異なるタイプのリソースにアクセスする場合などのように、1 つのステートメントが複数のタイプのリソースに適用される場合があります。このような場合、ポリシーステートメント内の 1 つのリソースのみに適用される条件キーを含めると、ポリシーステートメントの `Condition` 要素が失敗し、ステートメントの `"Effect"` は適用されません。

たとえば、次のポリシーの例を考えてみます。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Sid": "THISPOLICYDOESNOTWORK",
    "Effect": "Allow",
    "Action": "ec2:RunInstances",
    "Resource": "*",
    "Condition": {"StringLike": {"ec2:InstanceType": [
      "t1.*",
      "t2.*",
      "m3.*"
    ]}}
  }
}
```

------

前述のポリシーの*目的*は、ユーザーが `t1`、`t2`および `m3` タイプのインスタンスを起動できるようにすることです。ところが、インスタンスを起動する場合には、インスタンス自体に加えて、イメージ、キーペア、セキュリティグループおよびそれ以上のさまざまなリソースにアクセスする必要があります。ステートメント全体が、インスタンスを起動するために必要なすべてのリソースに対して評価されます。これらの追加のリソースには `ec2:InstanceType` 条件キーがないため、`StringLike` のチェックは失敗し、ユーザーは*いずれの*タイプのインスタンスも起動できません。

これに対応するには、`StringLikeIfExists` 条件演算子を代わりに使用します。そうすれば、条件キーが存在する場合のみにテストが行われます。以下のコードは次のように解釈できます。「チェックされるリソースには 「`ec2:InstanceType`」条件キーがあり、キーバリューが `t1.`、`t2.`、または `m3.` で始まる場合にのみ、アクションを許可します。チェックされるリソースにこの条件キーがなくても問題ありません。」 条件キー値のアスタリスク (\$1) を `StringLikeIfExists` 条件演算子と併用すると、ワイルドカードとして解釈され、文字列の一部が一致します。この `DescribeActions` 文には、コンソールでインスタンスを表示するために必要なアクションが含まれます。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "RunInstance",
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": "*",
      "Condition": {
        "StringLikeIfExists": {
          "ec2:InstanceType": [
            "t1.*",
            "t2.*",
            "m3.*"
          ]
        }
      }
    },
    {
      "Sid": "DescribeActions",
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeImages",
        "ec2:DescribeInstances",
        "ec2:DescribeVpcs",
        "ec2:DescribeKeyPairs",
        "ec2:DescribeSubnets",
        "ec2:DescribeSecurityGroups"
      ],
      "Resource": "*"
    }
  ]
}
```

------

次の表は、AWS がリクエストの条件キー値に基づいてこのポリシーを評価する方法を示しています。


| ポリシー条件 | リクエストコンテキスト | 結果 | 
| --- | --- | --- | 
|  <pre>"StringLikeIfExists": {<br />  "ec2:InstanceType": [<br />    "t1.*",<br />    "t2.*",<br />    "m3.*"<br />  ]<br />}</pre>  | <pre>ec2:InstanceType:<br />  – t1.micro</pre>  | 一致 | 
|  <pre>"StringLikeIfExists": {<br />  "ec2:InstanceType": [<br />    "t1.*",<br />    "t2.*",<br />    "m3.*"<br />  ]<br />}</pre>  | <pre>ec2:InstanceType:<br />  – m2.micro</pre>  | 一致なし | 
|  <pre>"StringLikeIfExists": {<br />  "ec2:InstanceType": [<br />    "t1.*",<br />    "t2.*",<br />    "m3.*"<br />  ]<br />}</pre>  |  リクエストコンテキストに `ec2:InstanceType` はありません。  | 一致 | 

## 条件キーの有無をチェックする条件演算子
<a name="Conditions_Null"></a>

`Null` 条件演算子を使用して、認可時に条件キーが存在していないかどうかを確認します。ポリシーステートメントで、`true`（キーは存在しません-nullです）または `false`（キーが存在し、その値はnullではありません）を使用します。

`Null` 条件演算子で[ポリシー変数](reference_policies_variables.md)を使用することはできません。

例えば、ユーザーが一時的な認証情報または独自の認証情報を使用してリクエストを行っているか判断するため、この条件演算子を使用することができます。ユーザーが一時的な認証情報を使用している場合、キー `aws:TokenIssueTime` が存在し、このキーには値があります。以下の例では、ユーザーが Amazon EC2 API を使用するために一時的な認証情報 (キーは欠落してはならない) を使用する必要があることを表記する条件が示されています。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement":{
      "Action":"ec2:*",
      "Effect":"Allow",
      "Resource":"*",
      "Condition":{"Null":{"aws:TokenIssueTime":"false"}}
  }
}
```

------

# 複数のコンテキストキーまたは値による条件
<a name="reference_policies_condition-logic-multiple-context-keys-or-values"></a>

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

**Topics**
+ [複数のキーまたは値の評価ロジック](#reference_policies_multiple-conditions-eval)
+ [否定された一致条件演算子の評価ロジック](#reference_policies_multiple-conditions-negated-matching-eval)

## 複数のキーまたは値の評価ロジック
<a name="reference_policies_multiple-conditions-eval"></a>

`Condition` 要素は複数の条件演算子を含むことができ、各条件演算子は複数のキーと値のペアを含むことができます。特に指定のない限り、ほとんどのコンテキストキーで複数の値を使用できます。
+ ポリシーステートメントに複数の[条件演算子](reference_policies_elements_condition_operators.md)がある場合、条件演算子は論理 `AND` を使用して評価されます。
+ 1 つの条件演算子にアタッチされている複数のコンテキストキーがポリシーステートメントにある場合、コンテキストキーは論理 `AND` を使用して評価されます。
+ 1 つの条件演算子に 1 つのコンテキストキーの値が複数含まれる場合、それらの値は論理 `OR` を使用して評価されます。
+ 1 つの否定された一致条件演算子に 1 つのコンテキストキーの値が複数含まれる場合、それらの値は論理 `NOR` を使用して評価されます。

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

![\[AND および OR がどのように複数のコンテキストキーおよび値に適用されるかを示した条件ブロック\]](http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/images/AccessPolicyLanguage_Condition_Block_AND_2.diagram.png)


例えば、次の 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 がリクエストの条件キー値に基づいてこのポリシーを評価する方法を示しています。


| ポリシー条件 | リクエストコンテキスト | 結果 | 
| --- | --- | --- | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | <pre>aws:PrincipalTag/department: legal<br />aws:PrincipalTag/role: audit<br />aws:PrincipalArn: <br />  arn:aws:iam::222222222222:user/Mary</pre>  |  **一致** | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | <pre>aws:PrincipalTag/department: hr<br />aws:PrincipalTag/role: audit<br />aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Nikki</pre>  | **一致なし** | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | <pre>aws:PrincipalTag/department: hr<br />aws:PrincipalTag/role: payroll<br />aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Mary</pre>  | **一致なし** | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  |  リクエストコンテキストに `aws:PrincipalTag/role` はありません。 <pre>aws:PrincipalTag/department: hr<br />aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Mary</pre>  | **一致なし**  | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | リクエストコンテキストに `aws:PrincipalTag` はありません。 <pre>aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Mary</pre>  | **一致なし**  | 

## 否定された一致条件演算子の評価ロジック
<a name="reference_policies_multiple-conditions-negated-matching-eval"></a>

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

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

![\[否定された一致条件演算子を使用する際に、AND および OR が複数のコンテキストキーと値にどのように適用されるかを示した条件ブロック\]](http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/images/AccessPolicyLanguage_Condition_Block_AND_Negated_NOR_2.diagram.png)


例えば、次の 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 がリクエストの条件キー値に基づいてこのポリシーを評価する方法を示しています。


| ポリシー条件 | リクエストコンテキスト | 結果 | 
| --- | --- | --- | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnNotLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | <pre>aws:PrincipalTag/department: legal<br />aws:PrincipalTag/role: audit<br />aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Nikki<br /></pre>  |  **一致** | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnNotLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | <pre>aws:PrincipalTag/department: hr<br />aws:PrincipalTag/role: audit<br />aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Mary</pre>  | **一致なし** | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnNotLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | <pre>aws:PrincipalTag/department: hr<br />aws:PrincipalTag/role: payroll<br />aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Nikki</pre>  | **一致なし** | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnNotLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | >リクエストコンテキストに `aws:PrincipalTag/role` はありません。 <pre>aws:PrincipalTag/department: hr<br />aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Nikki</pre>  | **一致なし** | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnNotLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | リクエストコンテキストに `aws:PrincipalTag` はありません。 <pre>aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Nikki</pre>  | **一致なし**  | 

# 単一値と複数値のコンテキストキー
<a name="reference_policies_condition-single-vs-multi-valued-context-keys"></a>

単一値のコンテキストキーと複数値のコンテキストキーの違いは、ポリシー条件の値の数ではなく、[リクエストコンテキスト](intro-structure.md#intro-structure-request)の値の数にあります。
+ 単一値の条件コンテキストキーはリクエストコンテキストに、最大で 1 つの値を持ちます。例えば、AWS でリソースにタグを付けると、各リソースタグは key-value ペアとして保存されます。リソースタグキーは単一のタグ値しか持つことができないため、[aws:ResourceTag/*tag-key*](reference_policies_condition-keys.md#condition-keys-resourcetag) は単一値のコンテキストキーです。単一値のコンテキストキーで条件集合演算子を使用しないでください。
+ 複数値の条件コンテキストキーは、リクエストコンテキストに複数の値を持つことができます。例えば、AWS でリソースにタグを付ける場合、1 つのリクエストに複数のタグの key-value ペアを含めることができます。したがって、[aws:TagKeys](reference_policies_condition-keys.md#condition-keys-tagkeys) は複数の値を持つコンテキストキーです。複数値のコンテキストキーには条件集合演算子が必要です。

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

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

## 重要ポイント
<a name="reference_policies_condition-key-points"></a>
+ 単一値と複数値の分類については、条件コンテキストキーの値の種類として、[AWS グローバル条件コンテキストキー](reference_policies_condition-keys.md) トピックでそれぞれ説明されています。
+ 「[サービス認証リファレンス](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html)」にある複数値のコンテキストキーは、`ArrayOfString` や `ArrayOfARN` などの条件演算子カテゴリタイプが付加された `ArrayOf` プレフィックスを使用します。これらは、リクエスト内に条件コンテキストキーの複数の値が含まれる可能性があることを示します。
+ 使用可能な単一値のコンテキストキーはポリシー変数として使用できますが、複数値のコンテキストキーをポリシー変数として使用することはできません。ポリシー変数の詳細については、「[IAM ポリシーの要素: 変数とタグ](reference_policies_variables.md)」を参照してください。
+ key-value ペアを含むコンテキストキーを使用する場合は、複数の tag-key 値があっても、各 `tag-key` は 1 つの値しか持てないことに留意してください。
  + [aws:PrincipalTag/*tag-key*](reference_policies_condition-keys.md#condition-keys-principaltag)、[aws:RequestTag/*tag-key*](reference_policies_condition-keys.md#condition-keys-requesttag)、[aws:ResourceTag/*tag-key*](reference_policies_condition-keys.md#condition-keys-resourcetag) は単一値のコンテキストキーです。
  + [aws:TagKeys](reference_policies_condition-keys.md#condition-keys-tagkeys) はリクエストで許可されるタグキーを定義しますが、タグキー値は含まれません。1 つのリクエストにタグのキーバリューペアを複数含めることができるため、`aws:TagKeys` は複数値のコンテキストキーです。
+ 複数値のコンテキストキーには条件集合演算子が必要です。単一値のコンテキストキーで、条件集合演算子の `ForAllValues` または `ForAnyValue` を使用しないでください。単一値のコンテキストキーで条件集合演算子を使用すると、過度にポリシーが許容される可能性があります。

## 複数値のコンテキストキーの演算子を設定する
<a name="reference_policies_condition-multi-valued-context-keys"></a>

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

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

### ForAllValues
<a name="reference_policies_condition-forallvalues"></a>

`ForAllValues` 修飾子は、リクエストコンテキストのすべてのメンバーの値が、修飾子の後に続く条件演算子と一致するかどうかをテストします。条件は、リクエスト内のすべてのコンテキストキーの値がポリシー内のコンテキストキーの値に一致する場合に `true` を返します。また、リクエストにコンテキストキーがない場合も、`true` を返します。

**重要**  
`ForAllValues` を `Allow` 効果で使用するときは、リクエストコンテキストでのコンテキストキーの欠落が予想外である場合に許容範囲が広くなりすぎる可能性があるため、注意が必要です。ポリシーには [`Null`](reference_policies_elements_condition_operators.md#Conditions_Null) 条件演算子と `false` 値を常に含めて、コンテキストキーが存在するかどうか、その値が null でないかどうかをチェックする必要があります。例については、[タグキーに基づいたアクセスの制御](access_tags.md#access_tags_control-tag-keys)を参照してください。

#### ForAllValues 集合演算子の例
<a name="reference_policies_condition-forallvalues-example"></a>

次の例では、ユーザーが EC2 インスタンスに割り当てられた特定のタグを削除できるようにするために、ForAllValues が aws:TagKeys とともに使用されています。このポリシーは、ユーザーが `environment` タグと `cost-center` タグのみを削除できるようにします。これらのタグは、個別に削除することも、一緒に削除することも可能です。リクエスト内のタグキーは、ポリシーで指定されたキーと完全に一致する必要があります。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:DeleteTags",
            "Resource": "arn:aws:ec2:us-east-1:111122223333:instance/*",
            "Condition": {
                "ForAllValues:StringEquals": {
                    "aws:TagKeys": [
                        "environment",
                        "cost-center"
                    ]
                },
                "Null": {
                    "aws:TagKeys": "false"
                }
            }
        }
    ]
}
```

------

次の表は、AWS がリクエストの条件キー値に基づいてこのポリシーを評価する方法を示しています。


| ポリシー条件 | リクエストコンテキスト | 結果 | 
| --- | --- | --- | 
|  <pre>"ForAllValues:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />},<br />"Null": {<br />  "aws:TagKeys": "false"<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment</pre>  |  **一致**  | 
|  <pre>"ForAllValues:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />},<br />"Null": {<br />  "aws:TagKeys": "false"<br />}</pre>  | <pre>aws:TagKeys:<br />  – cost-center</pre>  |  **一致**  | 
|  <pre>"ForAllValues:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />},<br />"Null": {<br />  "aws:TagKeys": "false"<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />  – cost-center</pre>  |  **一致**  | 
|  <pre>"ForAllValues:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />},<br />"Null": {<br />  "aws:TagKeys": "false"<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />  – dept</pre>  |  **一致なし**  | 
|  <pre>"ForAllValues:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />},<br />"Null": {<br />  "aws:TagKeys": "false"<br />}</pre>  |  リクエストコンテキストに `aws:TagKeys` はありません。  |  **一致なし**  | 

最後の例では、Null 条件チェックがコンテキストキーが欠落している場合の一致を防ぐため、結果が「一致なし」になることに留意してください。これは、許容範囲が過度に広範なポリシーを回避するためのベストプラクティスです。

### ForAnyValue
<a name="reference_policies_condition-foranyvalue"></a>

`ForAnyValue` 修飾子は、リクエストにあるコンテキストキーの値セットの少なくとも 1 メンバーが、ポリシー条件にあるコンテキストキーの値セットの少なくとも 1 メンバーに一致するかどうかをテストします。リクエストにあるコンテキストキーの値のいずれかが、ポリシーにあるコンテキストキーの値のいずれかに一致すると、条件が `true` を返します。一致するコンテキストキーがない、またはキーが存在しない場合、条件は `false` を返します。

**重要**  
`ForAnyValue` を `Deny` 効果で使用していて、リクエストにコンテキストキーが存在しないという場合、ポリシーは**一致なし**として評価します。一貫した動作のため、ポリシーに明示的な [`Null`](reference_policies_elements_condition_operators.md#Conditions_Null) 条件チェックを追加して、コンテキストキーが存在するかどうかを確認します。詳細については、「[条件キーの有無をチェックする条件演算子](reference_policies_elements_condition_operators.md#Conditions_Null)」を参照してください。

#### ForAnyValue 集合演算子の例
<a name="reference_policies_condition-foranyvalue-example"></a>

次の例では、ユーザーが EC2 インスタンスに割り当てられた特定のタグを削除できるようにするために、ForAnyValue が aws:TagKeys とともに使用されています。このポリシーは、リクエストで指定されたタグキーに `environment` または `cost-center` が含まれている場合に、ユーザーがインスタンスのタグを削除できるようにします。リクエストには、ポリシーで指定されたタグキー以外の追加のタグキーを含めることができますが、条件に一致させるには、指定されたキーの少なくとも 1 つを含める必要があります。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:DeleteTags",
            "Resource": "arn:aws:ec2:us-east-1:111122223333:instance/*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:TagKeys": [
                        "environment",
                        "cost-center"
                    ]
                }
            }
        }
    ]
}
```

------

次の表は、AWS がリクエストの条件キー値に基づいてこのポリシーを評価する方法を示しています。


| ポリシー条件 | リクエストコンテキスト | 結果 | 
| --- | --- | --- | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment</pre>  |  **一致**  | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – cost-center</pre>  |  **一致**  | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />  – cost-center</pre>  |  **一致**  | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />  – dept</pre>  |  **一致**  | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – dept</pre>  |  **一致なし**  | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />}</pre>  |  リクエストコンテキストに `aws:TagKeys` はありません。  |  **一致なし**  | 

# 条件ポリシーの例
<a name="reference_policies_condition_examples"></a>

IAM ポリシーでは、単一値のコンテキストキーと複数値のコンテキストキー、その両方に複数の値を指定して、リクエストコンテキストと比較できます。次の一連のポリシーの例では、複数のコンテキストキーと値を使用しているポリシー条件を示しています。

**注記**  
このリファレンスガイドに含めるポリシーを送信する場合は、このページの下部にある [**フィードバック**] ボタンを使用します。IAM ID ベースのポリシーの例については、「[IAM アイデンティティベースのポリシーの例](access_policies_examples.md)」を参照してください。

## 条件ポリシーの例：単一値のコンテキストキー
<a name="reference_policies_condition_example_library_single-valued"></a>
+ 単一値のコンテキストキーを持つ、複数の条件ブロック。([例を表示します](reference_policies_condition_examples-single-valued-context-keys.md#reference_policies_condition_examples-single-valued-context-keys-1)。)
+ 単一値のコンテキストキーバリューを複数持つ、1 つの条件ブロック。([例を表示します](reference_policies_condition_examples-single-valued-context-keys.md#reference_policies_condition_examples-single-valued-context-keys-2)。)

## 条件ポリシーの例：複数値のコンテキストキー
<a name="reference_policies_condition_example_library_multi-valued"></a>
+ 条件集合演算子の `ForAllValues` を使用している拒否ポリシー。([例を表示します](reference_policies_condition_examples-multi-valued-context-keys.md#reference_policies_condition_examples-multi-valued-context-keys-1)。)
+ 条件集合演算子の `ForAnyValue` を使用している拒否ポリシー。([例を表示します](reference_policies_condition_examples-multi-valued-context-keys.md#reference_policies_condition_examples-multi-valued-context-keys-2)。)

# 複数値のコンテキストキーの主な例
<a name="reference_policies_condition_examples-multi-valued-context-keys"></a>

次の一連のポリシーの例では、複数値のコンテキストキーを使用してポリシー条件を作成する方法を示しています。

## 例：条件集合演算子の ForAllValues を使用している拒否ポリシー
<a name="reference_policies_condition_examples-multi-valued-context-keys-1"></a>

次の例では、特定のタグキープレフィックスがリクエストに含まれている場合に、ID ベースのポリシーが IAM タグ付けアクションの使用を拒否する仕組みを示します。[`aws:TagKeys`](reference_policies_condition-keys.md#condition-keys-tagkeys) の値には、文字列の部分一致を目的としたワイルドカード (\$1) が含まれています。リクエストコンテキストキーには複数の値を含められるため、コンテキストキー `aws:TagKeys` を使用しているセット演算子 `ForAllValues` がポリシーに含まれています。コンテキストキー `aws:TagKeys` が一致するには、リクエストコンテキストのすべての値がポリシーの 1 つ以上の値と一致する必要があります。

`ForAllValues` 集合演算子は、リクエストにコンテキストキーがない場合にも true を返します。

`Null` 条件演算子を `false` の値でポリシーに含め、リクエストにコンテキストキーが存在することとその値が null でないことをチェックすることによって、欠落したコンテキストキーや、空の値を含むコンテキストキーが true と評価されることを防止できます。詳細については、「[条件キーの有無をチェックする条件演算子](reference_policies_elements_condition_operators.md#Conditions_Null)」を参照してください。

**重要**  
このポリシーでは、アクションを許可しません。特定のアクションを許可する他のポリシーと組み合わせてこのポリシーを使用します。

**Example 複数の値を持つコンテキストキーの単一のポリシー条件値を拒否する**  
次の例では、ポリシーは、リクエスト内の `aws:TagKeys` の値にプレフィックス **key1** が含まれていないリクエストを拒否します。リクエストコンテキストには複数の値を含めることができますが、`ForAllValues` 条件集合演算子の要件を満たすために、リクエストコンテキスト内のすべてのタグキー値はプレフィックス **key1** で始まる必要があります。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyRestrictedTags",
      "Effect": "Deny",
      "Action": [
        "iam:Tag*",
        "iam:UnTag*"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "ForAllValues:StringNotLike": {
          "aws:TagKeys": "key1*"
        }
      }
    }
  ]
}
```
次の表は、AWS がリクエストの条件キー値に基づいてこのポリシーを評価する方法を示しています。Deny ステートメントの場合、「一致」は拒否され、「一致なし」は拒否されないため、別のステートメントで許可される場合があります。  


| ポリシー条件 | リクエストコンテキスト | 結果 | 
| --- | --- | --- | 
|  <pre>"ForAllValues:StringNotLike": {<br />  "aws:TagKeys": "key1*"<br />}</pre>  | <pre>aws:TagKeys:<br />  – key1:legal</pre>  |  **一致なし** 別のステートメントで許可される場合があります。 | 
| <pre>"ForAllValues:StringNotLike": {<br />  "aws:TagKeys": "key1*"<br />}</pre>  | <pre>aws:TagKeys:<br />  – key1:hr<br />  – key1:personnel</pre>  | **一致なし** 別のステートメントで許可される場合があります。 | 
| <pre>"ForAllValues:StringNotLike": {<br />  "aws:TagKeys": "key1*"<br />}</pre>  | <pre>aws:TagKeys:<br />  – key2:audit</pre>  | **一致** | 
| <pre>"ForAllValues:StringNotLike": {<br />  "aws:TagKeys": "key1*"<br />}</pre>  | リクエストコンテキストに `aws:TagKeys` はありません。  | **一致** | 

**Example 複数の値を含むコンテキストキーの複数のポリシー条件値を拒否する**  
次の例では、ポリシーは、リクエスト内の `aws:TagKeys` の値に **key 1** または **key 2** というプレフィックスが含まれていないリクエストを拒否します。リクエストコンテキストには複数の値を含めることができますが、条件集合演算子 `ForAllValues` の要件を満たすために、リクエストコンテキスト内のすべてのタグキー値は、プレフィックス **key1** または **key2** で始まる必要があります。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyRestrictedTags",
      "Effect": "Deny",
      "Action": [
        "iam:Tag*",
        "iam:UnTag*"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "ForAllValues:StringNotLike": {
          "aws:TagKeys": [
            "key1*",
            "key2*"
          ]
        }
      }
    }
  ]
}
```
次の表は、AWS がリクエストの条件キー値に基づいてこのポリシーを評価する方法を示しています。Deny ステートメントの場合、「一致」は拒否され、「一致なし」は拒否されないため、別のステートメントで許可される場合があります。  


| ポリシー条件 | リクエストコンテキスト | 結果 | 
| --- | --- | --- | 
|  <pre>"ForAllValues:StringNotLike": {<br />  "aws:TagKeys": [<br />    "key1*",<br />    "key2*"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – key1:legal</pre>  |  **一致なし** 別のステートメントで許可される場合があります。 | 
| <pre>"ForAllValues:StringNotLike": {<br />   "aws:TagKeys": [<br />    "key1*",<br />    "key2*"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – key1:hr<br />  – key1:personnel</pre>  | **一致なし** 別のステートメントで許可される場合があります。 | 
| <pre>"ForAllValues:StringNotLike": {<br />   "aws:TagKeys": [<br />    "key1*",<br />    "key2*"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – key1:hr<br />  – key2:audit</pre>  | **一致なし** 別のステートメントで許可される場合があります。 | 
| <pre>"ForAllValues:StringNotLike": {<br />   "aws:TagKeys": [<br />    "key1*",<br />    "key2*"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – key3:legal</pre>  | **一致**  | 
| <pre>"ForAllValues:StringNotLike": {<br />   "aws:TagKeys": [<br />    "key1*",<br />    "key2*"<br />  ]<br />}</pre>  | リクエストコンテキストに `aws:TagKeys` はありません。  | **一致** | 

## 例：条件集合演算子の ForAnyValue を使用している拒否ポリシー
<a name="reference_policies_condition_examples-multi-valued-context-keys-2"></a>

次の ID ベースのポリシーの例では、ポリシー、`environment` または `webserver` で指定されているタグキーのいずれかでタグ付けされたスナップショットがある場合、EC2 インスタンスボリュームのスナップショットの作成を拒否します。リクエストコンテキストキーには複数の値を含められるため、コンテキストキー `aws:TagKeys` を使用しているセット演算子 `ForAnyValue` がポリシーに含まれています。ポリシーで指定されたタグキーの値が、タグ付けリクエストに 1 つでも含まれている場合、`aws:TagKeys` コンテキストキーは true を返し、拒否ポリシーの効果をもたらします。

**重要**  
このポリシーでは、アクションを許可しません。特定のアクションを許可する他のポリシーと組み合わせてこのポリシーを使用します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "ec2:CreateSnapshot",
        "ec2:CreateSnapshots"
      ],
      "Resource": "arn:aws:ec2:us-west-2::snapshot/*",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "aws:TagKeys": "webserver"
        }
      }
    }
  ]
}
```

------

次の表は、AWS がリクエストの条件キー値に基づいてこのポリシーを評価する方法を示しています。Deny ステートメントの場合、「一致」は拒否され、「一致なし」は拒否されないため、別のステートメントで許可される場合があります。


| ポリシー条件 | リクエストコンテキスト | 結果 | 
| --- | --- | --- | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "webserver"<br />}</pre>  | <pre>aws:TagKeys:<br />  – webserver</pre>  | **一致** | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "webserver"<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />  – webserver<br />  – test</pre>  |  **一致** | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "webserver"<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />  – test</pre>  | **一致なし** 別のステートメントで許可される場合があります。 | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "webserver"<br />}</pre>  | リクエストコンテキストに `aws:TagKeys` はありません。  | **一致なし** 別のステートメントで許可される場合があります。  | 

# 単一値のコンテキストキーポリシーの例
<a name="reference_policies_condition_examples-single-valued-context-keys"></a>

次の一連のポリシーの例では、単一値のコンテキストキーを使用してポリシー条件を作成する方法を示しています。

## 例：単一値のコンテキストキーを持つ、複数の条件ブロック
<a name="reference_policies_condition_examples-single-valued-context-keys-1"></a>

条件ブロックに複数の条件があり、それぞれにコンテキストキーが 1 つしかない場合、目的の `Allow` または `Deny` 効果を呼び出すには、すべてのコンテキストキーが true になる必要があります。否定一致条件演算子を使用すると、条件の値を評価するロジックが反転します。

次の例では、ユーザーが EC2 ボリュームを作成し、ボリューム作成時にボリュームにタグを適用しています。リクエストコンテキストには、コンテキストキー `aws:RequestTag/project` の値を含める必要があり、本稼働環境以外ならば、コンテキストキー `aws:ResourceTag/environment` の値はどの値でもかまいません。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ec2:CreateVolume",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "ec2:CreateTags",
      "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*",
      "Condition": {
        "StringLike": {
          "aws:RequestTag/project": "*"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "ec2:CreateTags",
      "Resource": "arn:aws:ec2:us-east-1:123456789012:*/*",
      "Condition": {
        "StringNotEquals": {
          "aws:ResourceTag/environment": "production"
        }
      }
    }
  ]
}
```

------

リクエストコンテキストには、プロジェクトのタグ値が含まれている必要があり、本稼働環境のリソース用にリクエストコンテキストを作成して `Allow` 効果を呼び出すことはできません。プロジェクト名に `QA` リソースタグがついて `Feature3` となっているため、次の EC2 ボリュームは正常に作成されました。

```
aws ec2 create-volume \
    --availability-zone us-east-1a \
    --volume-type gp2 \
    --size 80 \
    --tag-specifications 'ResourceType=volume,Tags=[{Key=project,Value=Feature3},{Key=environment,Value=QA}]'
```

## 例：単一値のコンテキストキーと値が複数ある、1 つの条件ブロック
<a name="reference_policies_condition_examples-single-valued-context-keys-2"></a>

条件ブロックに複数のコンテキストキーが含まれていて、それぞれのコンテキストキーに複数の値がある場合、目的の `Allow` または `Deny` 効果を呼び出すには、少なくとも 1 つのキーバリューが true になる必要があります。否定一致条件演算子を使用すると、コンテキストキーの値を評価するロジックが反転します。

次の例では、ユーザーが Amazon Elastic Container Service クラスターで、タスクを開始して実行できるようにします。
+ リクエストコンテキストには、**AND** `aws:RequestTag/environment` コンテキストキー用に、`production` **または** `prod-backup` を含める必要があります。
+ `ecs:cluster` コンテキストキーにより、`default1` **または** `default2` の ARN ECS クラスターでタスクが実行されたことが確実になります。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecs:RunTask",
        "ecs:StartTask"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/environment": [
            "production",
            "prod-backup"
          ]
        },
        "ArnEquals": {
          "ecs:cluster": [
            "arn:aws:ecs:us-east-1:111122223333:cluster/default1",
            "arn:aws:ecs:us-east-1:111122223333:cluster/default2"
          ]
        }
      }
    }
  ]
}
```

------

次の表は、AWS がリクエストの条件キー値に基づいてこのポリシーを評価する方法を示しています。


| ポリシー条件 | リクエストコンテキスト | 結果 | 
| --- | --- | --- | 
|  <pre>"StringEquals": {<br />  "aws:RequestTag/environment": [<br />    "production",<br />    "prod-backup"<br />  ]<br />},<br />"ArnEquals": {<br />  "ecs:cluster": [<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default1",<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default2"<br />  ]<br />}</pre>  | <pre>aws:RequestTag: environment:production<br />ecs:cluster:<br />  arn:aws:ecs:us-east-1:111122223333:cluster/default1</pre>  | 一致 | 
| <pre>"StringEquals": {<br />  "aws:RequestTag/environment": [<br />    "production",<br />    "prod-backup"<br />  ]<br />},<br />"ArnEquals": {<br />  "ecs:cluster": [<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default1",<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default2"<br />  ]<br />}</pre>  | <pre>aws:RequestTag: environment:prod-backup<br />ecs:cluster:<br />  arn:aws:ecs:us-east-1:111122223333:cluster/default2</pre>  | 一致 | 
| <pre>"StringEquals": {<br />  "aws:RequestTag/environment": [<br />    "production",<br />    "prod-backup"<br />  ]<br />},<br />"ArnEquals": {<br />  "ecs:cluster": [<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default1",<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default2"<br />  ]<br />}</pre>  | <pre>aws:RequestTag: webserver:production<br />ecs:cluster:<br />  arn:aws:ecs:us-east-1:111122223333:cluster/default2</pre>  | 一致なし | 
| <pre>"StringEquals": {<br />  "aws:RequestTag/environment": [<br />    "production",<br />    "prod-backup"<br />  ]<br />},<br />"ArnEquals": {<br />  "ecs:cluster": [<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default1",<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default2"<br />  ]<br />}</pre>  |  リクエストコンテキストに `aws:RequestTag` はありません。 <pre>ecs:cluster<br />  arn:aws:ecs:us-east-1:111122223333:cluster/default2</pre>  | 一致なし | 