

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

# 具有多個內容索引鍵或值的條件
<a name="reference_policies_condition-logic-multiple-context-keys-or-values"></a>

您可以使用政策的 `Condition` 元素來測試請求中單一內容索引鍵的多個內容索引鍵或多個值。當您以程式設計方式或透過 提出請求時 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` 評估條件運算子。
+ 如果您的政策陳述式已將多個內容索引鍵連接至單一條件運算子，則使用邏輯 `AND` 評估內容索引鍵。
+ 如果單一條件運算子包含一個內容索引鍵的多個值，則使用邏輯 `OR` 評估這些值。
+ 如果單一否定相符條件運算子包含一個內容索引鍵的多個值，則使用邏輯 `NOR` 評估這些值。

條件元素區塊中的所有內容索引鍵都必須解析為 true 才能調用所需的 `Allow` 或 `Deny` 效果。下圖說明具有多個條件運算子和內容索引鍵值對的條件的計算邏輯。

![條件區塊顯示如何將 AND 和 OR 套用到多個內容索引鍵和值](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/AccessPolicyLanguage_Condition_Block_AND_2.diagram.png)


例如，下列 S3 儲存貯體政策說明上圖在政策中的表示方式。條件區塊包含條件運算子 `StringEquals` 和 `ArnLike`，以及內容索引鍵 `aws:PrincipalTag` 和 `aws:PrincipalArn`。若要調用所需的 `Allow` 或 `Deny` 效果，條件區塊中的所有內容索引鍵都必須解析為 true。發出請求的用戶必須同時具有*部門*和*角色*這兩個主體標籤索引鍵，其中包含政策中指定的其中一個標籤索引鍵值。此外，發出請求之使用者的主體 ARN 必須符合政策中指定的其中一個 `aws:PrincipalArn` 值才會評估為 true。

------
#### [ 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>

部分[條件運算子](reference_policies_elements_condition_operators.md) (例如 `StringNotEquals` 或 `ArnNotLike`) 使用否定相符將政策中的內容索引鍵值對與請求中的內容金鑰值對進行比較。使用否定相符條件運算子為政策中的單一內容索引鍵指定多個值時，有效許可的工作方式類似於邏輯 `NOR`。在否定相符中，僅當所有值都評估為 false 時，邏輯 `NOR` 或 `NOT OR` 才傳回 true。

下圖說明具有多個條件運算子和內容索引鍵值對的條件的計算邏輯。此圖包含內容索引鍵 3 的否定相符條件運算子。

![條件區塊顯示在使用否定相符條件運算子時如何將 AND 和 OR 套用到多個內容索引鍵和值](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/AccessPolicyLanguage_Condition_Block_AND_Negated_NOR_2.diagram.png)


例如，下列 S3 儲存貯體政策說明上圖在政策中的表示方式。條件區塊包含條件運算子 `StringEquals` 和 `ArnNotLike`，以及內容索引鍵 `aws:PrincipalTag` 和 `aws:PrincipalArn`。若要調用所需的 `Allow` 或 `Deny` 效果，條件區塊中的所有內容索引鍵都必須解析為 true。發出請求的用戶必須同時具有*部門*和*角色*這兩個主體標籤索引鍵，其中包含政策中指定的其中一個標籤索引鍵值。由於 `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>  | **沒有相符項目**  | 