

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 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*。除了 [...IfExist](#Conditions_IfExists) 和 [Null 檢查](#Conditions_Null)以外，此邏輯適用於所有條件運算子。這些運算子測試索引鍵是否存在於請求內容中。

條件運算子可分成以下幾種類別：
+ [：字串](#Conditions_String)
+ [數值](#Conditions_Numeric)
+ [日期和時間](#Conditions_Date)
+ [：布林值](#Conditions_Boolean)
+ [：二進位](#Conditions_BinaryEquals)
+ [IP 地址](#Conditions_IPAddress)
+ [Amazon Resource Name (ARN)](#Conditions_ARN) (僅可用於部分服務。)
+ [...IfExists](#Conditions_IfExists) (檢查鍵值是否做為另一檢查的一部分存在)
+ [Null 檢查](#Conditions_Null) (檢查鍵值是否做為獨立檢查存在)

## 字串條件運算子
<a name="Conditions_String"></a>

運用字串條件運算子，您可以建構以索引鍵與字串值的對比為基礎來限制存取的 `Condition` 元素。
+  **政策變數** – [支援](reference_policies_variables.md)
+ **萬用字元** – [支援](#Conditions_String-wildcard)


****  

| 條件運算子 | 描述 | 
| --- | --- | 
|   `StringEquals`   |  完全相符，區分大小寫  | 
|   `StringNotEquals`   |  否定相符  | 
|   `StringEqualsIgnoreCase`   |  完全相符，不區分大小寫  | 
|   `StringNotEqualsIgnoreCase`   |  否定相符，不區分大小寫  | 
|   `StringLike`   | 大小寫相符。值可以在字串的任何位置包含多字元比對萬用字元 (\$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) 或單一字元比對萬用字元 (?)。  | 

**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 儲存貯體執行指定操作，前提是 `s3:prefix` 與任一指定模式相符。    
****  

```
{
  "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:username](reference_policies_condition-keys.md#condition-keys-username)值，評估不同使用者的 AWS 此政策。  


| 政策條件 | 請求內容 | 結果 | 
| --- | --- | --- | 
|  <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`。  | 無相符項目 | 
如需關於如何使用 `Condition` 元素根據 OIDC 聯合身分的應用程式 ID 和使用者 ID 來限制存取資源的政策範例，請參閱 [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)。


| 條件運算子 | Description | 
| --- | --- | 
|  `ForAllValues:StringEquals` `ForAllValues:StringEqualsIgnoreCase`  |  請求中條件索引鍵的所有值都必須與政策中的至少一個值相符。  | 
|  `ForAnyValue:StringEquals` `ForAnyValue:StringEqualsIgnoreCase`  |  請求中至少有一個條件索引鍵值必須與政策中的其中一個值相符。  | 
|  `ForAllValues:StringNotEquals` `ForAllValues:StringNotEqualsIgnoreCase`  |  否定相符。 請求中內容索引鍵的所有值都不與政策中的任何內容索引鍵值相符。  | 
|  `ForAnyValue:StringNotEquals` `ForAnyValue:StringNotEqualsIgnoreCase`  |  否定相符。 請求中至少有一個內容索引鍵值不得與政策中內容索引鍵中的任何值相符。  | 
|  `ForAllValues:StringLike`  |  請求中條件索引鍵的所有值都必須與政策中的至少一個值相符。  | 
|  `ForAnyValue:StringLike`  |  請求中至少有一個條件索引鍵值必須與政策中的其中一個值相符。  | 
|  `ForAllValues:StringNotLike`  |  否定相符。 請求中內容索引鍵的所有值都不與政策中的任何內容索引鍵值相符。  | 
|  `ForAnyValue:StringNotLike`  |  否定相符。 請求中至少有一個內容索引鍵值不得與政策中內容索引鍵中的任何值相符。  | 

**Example 將 `ForAnyValue` 與字串條件運算子搭配使用**  
此範例會示範如何建立身分型政策，它允許使用 Amazon EC2 `CreateTags` 動作以將標籤連接至執行個體。使用 `StringEqualsIgnoreCase` 時，僅當標籤包含 `environment` 鍵且值為 `preprod` 或 `storage` 時，您才能連接標籤。將 `IgnoreCase` 附加至運算子時，可以允許任何現有的標籤值大寫 (例如 `preprod`、`Preprod` 和 `PreProd`) 都解析為 true。  
將 `ForAnyValue` 修飾詞與 [aws:TagKeys](reference_policies_condition-keys.md#condition-keys-tagkeys) 條件索引鍵搭配使用時，請求中至少有一個標籤索引鍵值必須與值 `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 和 Date 條件運算子是字串運算子的子集，它們會對條件索引鍵值強制執行一種結構。

建議使用與索引鍵要比較的值對應的條件運算子。例如，將索引鍵與字串值進行比較時，應該使用 [字串條件運算子](#Conditions_String)。同樣地，將索引鍵與 ARN 值進行比較時，應該使用 [Amazon Resource Name (ARN) 條件運算子](#Conditions_ARN)。

**Example**  
此範例說明如何圍繞組織中的資源建立邊界。此政策中的條件將拒絕存取 Amazon S3 動作，除非正在存取的資源位於 AWS Organizations中的一組特定組織單位中。 AWS Organizations 路徑是組織實體結構的文字表示。  
條件要求 `aws:ResourceOrgPaths` 包含任何列出的組織單位路徑。由於 `aws:ResourceOrgPaths` 是多值條件，因此政策會使用 `ForAllValues:StringNotLike` 運算子來比較 `aws:ResourceOrgPaths` 的值與政策中的組織單位清單。    
****  

```
{
  "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>

利用數位條件運算子，您可以建構以索引鍵與整數或小數值的對比來限制存取的 `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"}}
  }
}
```

------

如果您在政策條件中指定的索引鍵不存在於請求內容中，則值不相符。在此範例中，當您執行 `s3:max-keys` 操作時，`ListBucket` 索引鍵永遠存在於請求中。如果此政策允許所有 Amazon S3 操作，則只有包含 `max-keys` 內容索引鍵且值小於或等於 10 的操作，才允許執行。

## 日期條件運算子
<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 實作要採用 ISO 8601 日期格式](http://www.w3.org/TR/NOTE-datetime)或 epoch (UNIX) 時間格式。
+  **政策變數** – 不支援
+ **萬用字元** – 不支援


****  

| 條件運算子 | 描述 | 
| --- | --- | 
|   `DateEquals`   |  符合特定日期  | 
|   `DateNotEquals`   |  否定相符  | 
|   `DateLessThan`   |  在特定日期與時間前相符  | 
|   `DateLessThanEquals`   |  在特定日期與時間時或之前相符  | 
|   `DateGreaterThan`   |  在特定日期與時間後相符  | 
|   `DateGreaterThanEquals`   |  在特定日期與時間時或之後相符  | 

例如，下列陳述式包含的 `Condition` 元素將 `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) 索引鍵搭配使用。此條件指定用來提出請求的臨時安全憑證已於 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 API AWS 或 AWS SDK 請求中。在此範例中，如果 IAM 使用者嘗試檢視或編輯存取金鑰，則會拒絕請求。

## 布林值條件運算子
<a name="Conditions_Boolean"></a>

運用布林值條件，您可以建構 `Condition` 元素，這些元素會根據將索引鍵與 `true` 或 `false` 進行比較的結果來限制存取權。

如果索引鍵包含多個值，布林運算子可以使用集運算子 `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`   |  與 Array of Bool 資料類型搭配使用。內容索引鍵值中的所有布林值必須與政策中的布林值相符。 若要防止 `ForAllValues` 運算子將遺失內容索引鍵或具有空值的內容索引鍵評估為「已允許」，您可以在政策中包含 [Null 條件運算子](#Conditions_Null)。  | 
|   `ForAnyValue:Bool`   |  與 Array of Bool 資料類型搭配使用。內容索引鍵值中至少有一個布林值必須與政策中的布林值相符。  | 

**Example 布林值條件運算子**  
下列身分型政策透過將 `Bool` 條件運算子和 [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) 索引鍵搭配使用，拒絕當請求不在 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 地址條件運算子，您可以建構 `Condition` 元素，它們會以索引鍵與 IPv4 或 IPv6 地址或 IP 地址範圍的對比來限制存取。您可以搭配 [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` 做為預設字首值。

有些 AWS 服務支援 IPv6，使用 ：： 代表 0 的範圍。若要了解某項服務是否支援 IPv6，請參閱該服務的文件。
+  **政策變數** – 不支援
+ **萬用字元** – 不支援


****  

| 條件運算子 | 描述 | 
| --- | --- | 
|   `IpAddress`   |  指定的 IP 地址或範圍  | 
|   `NotIpAddress`   |  除指定 IP 地址或範圍外的所有 IP 地址  | 

**Example IP 位址條件運算子**  
下列陳述式將 `IpAddress` 條件運算子與 `aws:SourceIp` 索引鍵搭配使用，來指定請求必須來自 IP 範圍 203.0.113.0 至 203.0.113.255。    
****  

```
{
    "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>  | 無相符項目 | 
以下範例顯示如何混合使用 IPv4 與 IPv6 地址，以涵蓋您組織的所有有效 IP 地址。建議您使用您的 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"
        ]
      }
    }
  }
}
```
如果以使用者身分直接呼叫測試的 API，`aws:SourceIp` 條件索引鍵僅在 JSON 政策中有效。如果改為使用服務代表您呼叫目標服務，則目標服務看到的是進行呼叫的服務的 IP 地址而不是來源使用者的 IP 地址。例如，如果使用 AWS CloudFormation 呼叫 Amazon EC2 來建構執行個體，則會發生這種情況。目前，無法透過進行呼叫的服務將來源 IP 地址傳遞給目標服務以在 JSON 政策中進行評估。對於這些服務 API 呼叫類型，請勿使用 `aws:SourceIp` 條件索引鍵。

## Amazon Resource Name (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 的六個由冒號分隔開的部分都要單獨檢查，每一個部分都可包括一個多字元比對萬用字元 (\$1) 或一個單字元比對萬用字元 (?)。`ArnEquals` 和 `ArnLike` 條件運算子的行為完全相同。  | 
|   `ArnNotEquals`, `ArnNotLike`  |  ARN 否定相符。`ArnNotEquals` 和 `ArnNotLike` 條件運算子的行為完全相同。  | 

**Example ARN 條件運算子**  
下列以資源為基礎的政策範例顯示連接至 Amazon SQS 佇列的政策 (您想要將 SNS 訊息傳送到此佇列)。它授予 Amazon SNS 將訊息傳送到所選佇列的許可，但僅在該服務代表特定 Amazon SNS 主題傳送這些訊息時才授予此許可。您在 `Resource` 欄位中指定佇列，Amazon SNS 主題則作為 `SourceArn` 索引鍵的值。    
****  

```
{
    "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>

如果請求中的索引鍵包含多個值，則可以使用集運算子 `ForAllValues` 和 `ForAnyValue` 來限定 ARN 運算子。如需有關多個內容索引鍵或值之評估邏輯的詳細資訊，請參閱[用於多值內容索引鍵的集運算子](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)。


| 條件運算子 | Description | 
| --- | --- | 
|  `ForAllValues:ArnEquals` `ForAllValues:ArnLike`  |  請求內容中的所有 ARN 都必須與政策中的至少一個 ARN 模式相符。  | 
|  `ForAnyValue:ArnEquals` `ForAnyValue:ArnLike`  |  請求內容中至少有一個 ARN 必須與政策中的其中一個 ARN 模式相符。  | 
|  `ForAllValues:ArnNotEquals` `ForAllValues:ArnNotLike`  |  否定相符。 請求內容中的所有 ARN 都不與政策中的任何字串 ARN 模式相符。  | 
|  `ForAnyValue:ArnNotEquals` `ForAnyValue:ArnNotLike`  |  否定相符。 請求內容中必須至少有一個 ARN 不得與政策中的任何 ARN 模式相符。  | 

**Example 將 `ForAllValues` 與 ARN 條件運算子搭配使用**  
下列範例使用 `ForAllValues:ArnLike` 來建立或更新 Amazon CloudWatch Logs 日誌的邏輯交付來源。條件區塊包含條件索引鍵 [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。使用此條件運算子，請求中的所有 ARN 都必須與政策中的至少一個 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`。  | 匹配  | 
如果請求中沒有內容索引鍵，或內容索引鍵值解析為 Null 資料集 (例如空白字串)，則 `ForAllValues` 限定詞會傳回 true。若要防止遺失內容索引鍵或具有空值的內容索引鍵評估為 true，您可以在政策中包含值為 `false` 的 [Null 條件運算子](#Conditions_Null)，以檢查內容索引鍵是否存在且其值不為 Null。

## ...IfExists 條件運算子
<a name="Conditions_IfExists"></a>

除 `IfExists` 條件外，您可在任何條件運算子名稱的尾端加入 `Null`，例如 `StringLikeIfExists`。執行此操作，並表明如果請求的內容中存在條件索引鍵，則依照政策所述來處理索引鍵。如果該索引鍵不存在，則評估條件元素為 true。」 陳述式中其他條件因素仍然可以導致不相符，但使用 `...IfExists` 檢查時並非使用遺失索引鍵。如果使用 `"Effect": "Deny"` 元素搭配否定條件運算子，例如 `StringNotEqualsIfExists`，即使條件索引鍵不存在，仍然會拒絕請求。

**使用 `IfExists` 的範例**

許多條件索引鍵描述有關特定類型的資源的資訊，僅當存取該類型的資源時才存在。這些條件索引鍵在其他類型的資源上不存在。當政策陳述式僅適用於一種類型的資源時，這不會導致問題。但是，有時單一陳述式可以適用於多種類型的資源，例如當政策陳述式從多個服務引用操作時，或是當服務中的給定操作存取同一服務中的多種不同資源類型時。在這種情況下，在政策陳述式中包含僅適用於一種資源的條件索引鍵可能會導致政策陳述式中的 `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.` 開頭時才允許該動作。如果正在檢查的資源沒有該條件索引鍵，則無需擔心它。』 與 `StringLikeIfExists` 條件運算子搭配使用時，條件索引鍵值中的星號 (\$1) 會被解譯為萬用字元，以實現部分字串相符。`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)。

您不可使用[政策變數](reference_policies_variables.md)與 `Null` 條件運算子。

例如，您可以使用此條件運算子來確定使用者使用的是臨時憑證還是自己的憑證來發出請求。如果使用者使用的是臨時憑證，則索引鍵 `aws:TokenIssueTime` 存在並具有一個值。下列範例展示了一個條件，該條件規定使用者必須使用臨時憑證 (必須存在索引鍵) 才能使用 Amazon EC2 API。

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

****  

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

------