

# 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"}}
  }
}
```

------