

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

# IAM JSON 政策元素參考
<a name="reference_policies_elements"></a>

JSON 政策文件由元素組成。這些元素按照在政策中使用的大致順序列出。元素的順序不會有影響，例如，`Resource` 元素可排在 `Action` 元素之前。您不需要指定政策中的任何 `Condition` 元素。如需進一步了解 JSON 政策文件的一般結構和目的，請參閱 [JSON 政策概觀](access_policies.md#access_policies-json)。

部分 JSON 政策元素會相互排斥。這表示您不能建立同時使用兩個元素的政策。例如，您不能在同一政策陳述式中同時使用 `Action` 與 `NotAction`。相互排斥的其他組合包括 `Principal`/`NotPrincipal` 以及 `Resource`/`NotResource`。

政策中所包含的具體內容因服務而異，取決於服務所提供的動作、內含的資源類型等。當您針對特定服務編寫政策時，參考該服務的範例將會有所幫助。若需要支援 IAM 之所有服務的清單，以及探討這些服務的 IAM 和政策的文件連結，請參閱 [AWS 使用 IAM 的 服務](reference_aws-services-that-work-with-iam.md)。

 當您建立或編輯 JSON 政策時，IAM 可以執行政策驗證以協助您建立有效的政策。IAM 會識別 JSON 語法錯誤，而 IAM Access Analyzer 會提供額外的政策檢查及建議，協助您進一步改良政策。若要進一步了解政策驗證的資訊，請參閱 [IAM 政策驗證](access_policies_policy-validator.md)。若要進一步了解 IAM Access Analyzer 政策檢查和可動作的建議，請參閱 [IAM Access Analyzer 政策驗證](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)。

**Topics**
+ [Version](reference_policies_elements_version.md)
+ [Id](reference_policies_elements_id.md)
+ [Statement](reference_policies_elements_statement.md)
+ [Sid](reference_policies_elements_sid.md)
+ [Effect](reference_policies_elements_effect.md)
+ [Principal](reference_policies_elements_principal.md)
+ [NotPrincipal](reference_policies_elements_notprincipal.md)
+ [Action](reference_policies_elements_action.md)
+ [NotAction](reference_policies_elements_notaction.md)
+ [Resource](reference_policies_elements_resource.md)
+ [NotResource](reference_policies_elements_notresource.md)
+ [Condition](reference_policies_elements_condition.md)
+ [變數和標籤](reference_policies_variables.md)
+ [支援的資料類型](reference_policies_elements_datatypes.md)

# IAM JSON 政策元素：Version
<a name="reference_policies_elements_version"></a>

**消除歧義注意事項**  
此 `Version` JSON 政策元素與「政策版本」**不同。`Version` 政策元素是在政策內使用，並定義政策語言的版本。另一方面，政策版本會在您在 IAM 中變更客戶受管政策時建立。變更的政策不會覆寫現有的政策。IAM 反而會建立新版本的受管政策。如果您在搜尋有關受管政策可用的多版本支援的詳細資訊，請參閱[版本控制 IAM 政策](access_policies_managed-versioning.md)。

`Version` 政策元素指定用於處理政策的語言語法規則。若要使用所有可用的政策功能，請在所有政策的 `Statement` 元素**之外**包含下列 `Version` 元素。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*"
    }
  ]
}
```

------

IAM 支援下列 `Version` 元素值：
+ `2012-10-17`. 這是政策語言的目前版本，您應該一律包含 `Version` 元素，並將其設定為 `2012-10-17`。否則，您無法使用此版本所引進的功能 (例如[政策變數](reference_policies_variables.md))。
+ `2008-10-17`. 這是舊版本的政策語言。您可以在較舊的現有政策上看到此版本。對於任何新的政策，或您更新任何現有政策時，請不要使用此版本。較新的功能 (例如政策變數) 將無法使用您的政策。例如，`${aws:username}` 這類變數無法辨識為變數，而是視為政策中的文字字串。

# IAM JSON 政策元素：Id
<a name="reference_policies_elements_id"></a>

`Id` 元素指定政策的選用識別符。該 ID 在不同的服務中的使用各有不同。以資源為基礎的政策中允許使用 ID，但是以身分為基礎的政策不允許使用 ID。

對於可讓您設定 `ID` 元素的服務，我們建議您對該值使用 UUID (GUID)，或者將 UUID 做為 ID 的一部分合併以確保唯一性。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "cd3ad3d9-2776-4ef1-a904-4c229d1642ee",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*"
    }
  ]
}
```

------

**注意**  
某些 AWS 服務 （例如 Amazon SQS 或 Amazon SNS) 可能需要此元素，並對其具有唯一性要求。如需有關編寫政策的服務特定資訊，請參閱您正在使用的服務文件。

# IAM JSON 政策元素：Statement
<a name="reference_policies_elements_statement"></a>

`Statement` 元素是政策的主要元素。此元素為必要。`Statement` 元素可包含單一陳述式，或是個別陳述式的陣列。每個個別的陳述式區塊都必須用大括號 \$1 \$1 括起。針對多個陳述式，陣列必須用方括號 [ ] 括起。

```
"Statement": [{...},{...},{...}]
```

以下範例顯示政策，其中包含在單一 `Statement` 元素中的一系列三個陳述式 (政策可讓您存取 Amazon S3 主控台中您自己的「主資料夾」)。政策包含 `aws:username` 變數，這會在政策評估期間以請求的使用者名稱取代。如需詳細資訊，請參閱[簡介](reference_policies_variables.md#policy-vars-intro)。

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

****  

```
{
  "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}/*"
      ]
    }
  ]
}
```

------

# IAM JSON 政策元素：Sid
<a name="reference_policies_elements_sid"></a>

您可以提供 `Sid` (陳述式 ID) 作為政策陳述式的可選識別符。您可以將 `Sid` 值指派給陳述式陣列中的每個陳述式。您可以使用 `Sid` 值做為政策陳述式的描述。在允許您指定 `ID` 元素的服務 (例如 SQS 和 SNS) 中，`Sid` 值只是政策文件 ID 的子 ID。在 IAM 中，`Sid` 值在 JSON 政策中必須是唯一的。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "ExampleStatementID",
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*"
    }
  ]
}
```

------

`Sid` 元素支援 ASCII 大寫字母 (A-Z)、小寫字母 (A-Z) 和數字 (0-9)。

IAM 未在 IAM API 中公開 `Sid`。您無法根據此 ID 擷取特定陳述式。

**注意**  
某些 AWS 服務 （例如 Amazon SQS 或 Amazon SNS) 可能需要此元素，並對其具有唯一性要求。如需有關編寫政策的服務特定資訊，請參閱您正在使用的服務文件。

# IAM JSON 政策元素：Effect
<a name="reference_policies_elements_effect"></a>

`Effect` 元素是必要的，且指定陳述式會導致允許或明確拒絕。`Effect` 的有效值為 `Allow` 和 `Deny`。`Effect` 值會區分大小寫。

```
"Effect":"Allow"
```

在預設情況下，拒絕存取資源。若要允許存取資源，您必須將 `Effect` 元素設定為 `Allow`。若要覆寫允許 (例如，以強制方式覆寫允許)，您必須將 `Effect` 元素設定為 `Deny`。如需詳細資訊，請參閱[政策評估邏輯](reference_policies_evaluation-logic.md)。

# AWS JSON 政策元素： Principal
<a name="reference_policies_elements_principal"></a>

使用資源型 JSON 政策中的 `Principal` 元素來指定允許或拒絕存取資源的主體。

您可以在[資源型政策](access_policies_identity-vs-resource.md)中使用 `Principal` 元素。許多服務支援資源型政策，包括 IAM。IAM 資源型政策類型是角色信任政策。在 IAM 角色中，使用角色信任政策中的 `Principal` 元素來指定誰可擔任該角色。對於跨帳戶存取，您必須指定信任帳戶的 12 位數識別碼。若要了解在您信任區域 (受信任組織或帳戶) 外帳戶中的主體是否具有擔任您角色的許可，請參閱[什麼是 IAM Access Analyzer？](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html)。

**注意**  
在您建立角色後，您可以變更帳戶為「\$1」，以允許每個人擔任該角色。若執行此操作，我們強烈建議您限制誰可以透過其他方式存取角色，例如 `Condition` 元素會限制只能存取特定 IP 地址。切勿讓任何人都能存取您的角色！

支援資源型政策的其他資源範例包括 Amazon S3 儲存貯體或 AWS KMS key。

您不能使用身分型政策中的 `Principal` 元素。身分型政策是指您連接到 IAM 身分 (使用者、群組或角色) 的許可政策。在這些情況中，主體由政策連接的身分隱含識別。

**Topics**
+ [如何指定主體](#Principal_specifying)
+ [AWS 帳戶 主體](#principal-accounts)
+ [IAM 角色主體](#principal-roles)
+ [角色工作階段主體](#principal-role-session)
+ [OIDC 聯合身分主體](#principal-federated-web-identity)
+ [SAML 聯合身分主體](#principal-saml)
+ [IAM 使用者主體](#principal-users)
+ [IAM Identity Center 主體](#principal-identity-users)
+ [AWS STS 聯合身分使用者主體](#sts-session-principals)
+ [AWS 服務主體](#principal-services)
+ [AWS 選擇加入區域中的服務主體](#principal-services-in-opt-in-regions)
+ [所有主體](#principal-anonymous)
+ [其他資訊](#Principal_more-info)

## 如何指定主體
<a name="Principal_specifying"></a>

您可以在資源型政策的 `Principal` 元素中指定主體，或在支援主體的條件金鑰中指定。

您可以在政策中指定以下任何主體：
+ AWS 帳戶 和根使用者
+ IAM 角色
+ 角色工作階段 
+ IAM 使用者
+ 聯合身分使用者主體
+ AWS 服務
+ 所有主體

您無法將使用者群組識別為政策 (例如資源型政策) 中的主體，因為群組與許可 (而非驗證) 相關，並且主體是經過驗證的 IAM 實體。

您可以使用陣列在以下幾節中為每個主體類型指定一個以上的主體類型。陣列可以使用一個或多個值。當您在元素中指定多個主體時，便會授予每個主體許可。這是邏輯 `OR`，而不是邏輯 `AND`，因為您一次只會驗證為一位主體。如果包含多個值，請使用方括號 (`[` 和 `]`)，並以逗號分隔陣列的每個項目。下列範例政策會定義 123456789012 帳戶或 555555555555 帳戶的許可。

```
"Principal" : { 
"AWS": [ 
  "123456789012",
  "555555555555" 
  ]
}
```

**注意**  
您不能使用萬用字元來符合部分主體名稱或 ARN。

## AWS 帳戶 主體
<a name="principal-accounts"></a>

您可以在資源型政策的 `Principal`元素或支援主體的條件索引鍵中指定 AWS 帳戶 識別符。這會委派帳戶的授權。當您允許存取其他帳戶時，該帳戶中的管理員必須接著授予該帳戶中身分 (IAM 使用者或角色) 的存取權。當您指定 時 AWS 帳戶，您可以使用帳戶 ARN (arn：aws：iam：：*account-ID*：root)，或由帳戶 ID 後面加上 `"AWS":`字首的縮短表單。

例如，指定帳戶 ID `123456789012`，您就可以使用以下其中一種方法來指定 `Principal` 元素中的帳戶：

```
"Principal": { "AWS": "arn:aws:iam::123456789012:root" }
```

```
"Principal": { "AWS": "123456789012" }
```

帳戶 ARN 和簡化帳戶 ID 的行為方式相同。兩者都會委派帳戶的許可。使用 `Principal` 元素中的帳戶 ARN 不會將許可限制為帳戶的根使用者。

**注意**  
當您儲存包含簡化帳戶 ID 的資源型政策時，服務可能會將其轉換為主體 ARN。如此並不會變更政策的功能。

有些 AWS 服務支援指定帳戶委託人的其他選項。例如，Amazon S3 可讓您使用以下格式指定[正式使用者 ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html#FindingCanonicalId)：

```
"Principal": { "CanonicalUser": "79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be" }
```

您也可以使用 陣列 AWS 帳戶，將多個 （或正式使用者 ID) 指定為委託人。例如，您可以使用全部三種方法在儲存貯體政策中指定主體。

```
"Principal": { 
  "AWS": [
    "arn:aws:iam::123456789012:root",
    "999999999999"
  ],
  "CanonicalUser": "79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be"
}
```

## IAM 角色主體
<a name="principal-roles"></a>

您可以在資源型政策的 `Principal` 元素中指定 IAM 角色主體 ARN，或在支援主體的條件金鑰中指定。IAM 角色是身分。在 IAM 中，身分是您可以指派許可的資源。角色信任另一個已驗證的身分來擔任該角色。這包括 AWS 中的主體或來自外部身分提供者 (IdP) 的使用者。當主體或身分擔任角色時，他們會收到具有擔任角色許可的暫時安全憑證。當他們使用這些工作階段登入資料在 中執行操作時 AWS，就會成為*角色工作階段主體*。

當您在資源型政策中指定角色主體時，主體的有效許可會受限於限制角色許可的任何政策類型。其中包括工作階段政策和許可界限。如需有關如何評估角色工作階段的有效許可的詳細資訊，請參閱 [政策評估邏輯](reference_policies_evaluation-logic.md)。

若要在 `Principal` 元素中指定角色 ARN，請使用以下格式：

```
"Principal": { "AWS": "arn:aws:iam::AWS-account-ID:role/role-name" }
```

**重要**  
如果角色信任政策中 `Principal` 元素包含指向特定 IAM 角色的 ARN，則該 ARN 會在儲存政策時轉換為角色的唯一主體 ID。如果有人希望藉由刪除並重新建立角色來提升特權，這麼做可有助於減輕此類風險。您通常不會在主控台中看到此 ID，因為在顯示信任政策時，IAM 會反向轉換回角色 ARN。不過，如果您刪除角色，則關係會中斷。即使重新建立角色，您的政策都不再適用，因為新角色有不符合信任政策中所儲存的主體 ID 的新主體 ID。發生這種情況時，委託人 ID 會顯示在以資源為基礎的政策中，因為 AWS 無法再將其對應回有效的 ARN。結果是，如果您刪除並重新建立了信任政策的 `Principal` 元素所引用的角色，您必須編輯政策中的角色來以正確 ARN 替換主體 ID。當您儲存政策時，ARN 再次轉換為角色的新主體 ID。如需詳細資訊，請參閱[了解 AWS處理政策中已刪除的 IAM 角色](https://repost.aws/articles/ARSqFcxvd7R9u-gcFD9nmA5g/understanding-aws-s-handling-of-deleted-iam-roles-in-policies)。

或者，您可以指定角色主體作為資源型政策中的主體，或使用 `aws:PrincipalArn` 條件金鑰[建立廣泛許可政策](#principal-anonymous)。當您使用此索引鍵時，角色工作階段主體會根據擔任的角色 ARN 授予許可，而不是根據所產生之工作階段的 ARN 授予許可。由於 AWS 不會將條件金鑰 ARNs 轉換為 IDs，因此如果您刪除角色，然後使用相同名稱建立新角色，則授予角色 ARN 的許可會保留。在資源型政策的 `Principal` 元素中，使用 `aws:PrincipalArn` 條件金鑰及萬用字元 (\$1) 授予的許可，不受身分型政策類型 (例如許可界限或工作階段政策) 的限制，除非身分型政策包含明確拒絕。

## 角色工作階段主體
<a name="principal-role-session"></a>

您可以在資源型政策的 `Principal` 元素中指定角色工作階段，或在支援主體的條件金鑰中指定。當主體或身分擔任角色時，他們會收到具有擔任的角色許可的暫時安全憑證。當他們使用這些工作階段登入資料在 中執行操作時 AWS，就會成為*角色工作階段主體*。

您用於角色工作階段主體的格式取決於用來擔任角色 AWS STS 的操作。

**重要**  
AWS 建議您盡可能在政策中使用 [IAM 角色主體](#principal-roles)，而不是角色工作階段主體。視需要使用`Condition`陳述式和條件索引鍵進一步縮小存取範圍。

若要在 `Principal`元素中指定角色工作階段主體 ARN，請使用下列格式：

```
"Principal": { "AWS": "arn:aws:sts::AWS-account-ID:assumed-role/role-name/role-session-name" }
```

此外，系統管理員可以設計程序來控制如何發出角色工作階段。例如，他們可以為使用者提供一鍵式解決方案，以建立可預測的工作階段名稱。如果您的系統管理員執行這項操作，則可以在政策或條件金鑰中使用角色工作階段主體。否則，您可以在 `aws:PrincipalArn` 條件金鑰中將角色 ARN 指定為主體。將角色指定為主體的方式可以變更產生工作階段的有效許可。如需詳細資訊，請參閱[IAM 角色主體](#principal-roles)。

## OIDC 聯合身分主體
<a name="principal-federated-web-identity"></a>

OIDC 聯合委託人是使用 JSON Web 字符 (JWT) 從 OIDC 相容 IDP 呼叫 AWS STS `AssumeRoleWithWebIdentity` API 時所使用的委託人，也稱為 OpenID 提供者 (OP)，以請求臨時 AWS 憑證。OIDC 聯合委託人可以代表您 AWS 帳戶中的 OIDC IDP，或 4 個內建身分提供者：Login with Amazon、Facebook、 Google和 [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/role-based-access-control.html)。

從其 OIDC IDP 發出 JWT 的使用者、工作負載或系統可以使用 `AssumeRoleWithWebIdentity` JWT 呼叫 ，為設定為信任發出 JWT 的 OIDC IDP 的 IAM 角色請求臨時 AWS 安全登入資料。只要符合 [AWS STS列出的需求](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html#manage-oidc-provider-prerequisites)，JWT 可以是 ID 權杖、存取權杖或透過任何其他方法提供的 JWT 權杖。如需詳細資訊，請參閱[常見案例](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_federation_common_scenarios.html)和[透過 OIDC 提供者請求憑證](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity)。

在您的角色信任政策中使用此委託人類型，允許或拒絕`AssumeRoleWIthWebIdentity`使用 中存在的 OIDC IDP AWS 帳戶或四個內建 IDPs許可。若要在角色信任政策的 `Principal` 元素中指定 OIDC 聯合身分主體 ARN，請針對內建的 OIDC IDP，使用下列四種格式之一：

```
"Principal": { "Federated": "cognito-identity.amazonaws.com" }
```

```
"Principal": { "Federated": "www.amazon.com" }
```

```
"Principal": { "Federated": "graph.facebook.com" }
```

```
"Principal": { "Federated": "accounts.google.com" }
```

使用新增至帳戶的 OIDC 提供者 (例如 GitHub) 時，需要在角色的信任政策中指定提供者的 ARN。此組態可讓您撰寫 IAM 政策，專門控制透過自訂身分提供者進行驗證之使用者的存取權。

```
"Principal": { "Federated": "arn:aws:iam::AWS-account-ID:oidc-provider/full-OIDC-identity-provider-URL" }
```

例如，如果 GitHub 是受信任的 Web 身分提供者，則角色信任政策的 `Principal` 元素中的 OIDC 角色工作階段 ARN 會使用下列格式：

```
"Principal": { "Federated": "arn:aws:iam::AWS-account-ID:oidc-provider/tokens.actions.githubusercontent.com" }
```

如需詳細資訊，請參閱 [Configuring OpenID Connect in Amazon Web Services](https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services)。

角色信任政策以外的政策類型不支援 OIDC 聯合身分主體。

## SAML 聯合身分主體
<a name="principal-saml"></a>

*SAML 聯合委託人*是呼叫 AWS STS `AssumeRoleWithSAML` API 以使用 SAML 聲明請求臨時 AWS 登入資料的委託人。您可以使用 SAML 身分提供者 (IdP) 登入，然後使用此操作擔任 IAM 角色。與 類似`AssumeRoleWithWebIdentity`， `AssumeRoleWithSAML` 不需要 AWS 登入資料進行身分驗證。反之，使用者會先向 SAML 身分提供者進行身分驗證，然後使用其 SAML 聲明進行 `AssumeRoleWithSAML` API 呼叫，或重新導向至 AWS 登入/SAML 頁面以登入 AWS 管理主控台。如需哪些主體可以使用此操作擔任角色的詳細資訊，請參閱 [比較 AWS STS 登入資料](id_credentials_sts-comparison.md)。

在角色信任政策中使用此主體類型，以根據受信任的 SAML 身分提供者允許或拒絕許可。若要在角色信任政策的 `Principal` 元素中指定 SAML 身分角色工作階段 ARN，請使用下列格式：

```
"Principal": { "Federated": "arn:aws:iam::AWS-account-ID:saml-provider/provider-name" }
```

## IAM 使用者主體
<a name="principal-users"></a>

您可以在資源型政策的 `Principal` 元素中指定 IAM 使用者，或在支援主體的條件金鑰中指定。

**注意**  
在 `Principal` 元素中，[*Amazon Resource Name (ARN)*](reference_identifiers.md#identifiers-arns) 的使用者名稱部分區分大小寫。

```
"Principal": { "AWS": "arn:aws:iam::AWS-account-ID:user/user-name" }
```

```
"Principal": {
  "AWS": [
    "arn:aws:iam::AWS-account-ID:user/user-name-1", 
    "arn:aws:iam::AWS-account-ID:user/user-name-2"
  ]
}
```

當您在 `Principal` 元素中指定使用者時，您無法使用萬用字元 (`*`) 來表示「所有使用者」。主體必須一律指定特定的使用者。

**重要**  
如果角色信任政策中您的 `Principal` 元素包含指向特定 IAM 使用者的 ARN，則該 ARN 會在儲存政策時將 ARN 轉換為使用者的唯一主體 ID。如果有人希望藉由刪除並重新建立使用者來提升特權，這麼做可有助於減輕此類風險。您通常不會在主控台中看到此 ID，因為在顯示信任政策時還會反向轉換回使用者的 ARN。不過，如果您刪除使用者，則關係會中斷。即使重新建立使用者，政策都不再適用。這是因為新的使用者有新的主體 ID，其不符合儲存在信任政策中的 ID。發生這種情況時，委託人 ID 會顯示在以資源為基礎的政策中，因為 AWS 無法再將其對應回有效的 ARN。結果是，如果您刪除並重新建立了信任政策的 `Principal` 元素所引用的使用者，您必須編輯角色來以正確 ARN 替換不正確的主體 ID。當您儲存政策時，IAM 再次將 ARN 轉換為使用者的新主體 ID。

## IAM Identity Center 主體
<a name="principal-identity-users"></a>

在 IAM Identity Center 中，資源型政策中的主體必須定義為 AWS 帳戶 主體。若要指定存取權，請參照條件區塊中許可集合的角色 ARN。如需詳細資訊，請參閱《IAM Identity Center 使用者指南》**中的[資源政策、Amazon EKS 和 AWS KMS中的參考許可集合](https://docs.aws.amazon.com/singlesignon/latest/userguide/referencingpermissionsets.html)。

## AWS STS 聯合身分使用者主體
<a name="sts-session-principals"></a>

您可以在資源型政策的 `Principal` 元素中指定*聯合身分使用者工作階段*，或在支援主體的條件金鑰中指定。

**重要**  
AWS 建議您限制使用 AWS STS 聯合身分使用者工作階段。改為使用 [IAM 角色](IAM/latest/UserGuide/tutorial_cross-account-with-roles.html)。

聯合身分使用者主體是透過使用長期 AWS STS IAM 憑證呼叫 `GetFederationToken`的操作建立。聯合身分使用者許可是呼叫 `GetFederationToken` 的主體與作為參數傳遞至 `GetFederationToken` API 的工作階段政策之間的交集。

在 中 AWS，IAM 使用者或 AWS 帳戶根使用者 可以使用長期存取金鑰進行身分驗證。如需哪些主體可以使用此操作聯合身分的詳細資訊，請參閱 [比較 AWS STS 登入資料](id_credentials_sts-comparison.md)。
+ **IAM 聯合身分使用者** – IAM 使用者使用 `GetFederationToken` 操作進行聯合，該操作會產生此 IAM 使用者的聯合身分使用者工作階段。
+ **聯合身分根使用者** – 根使用者使用 `GetFederationToken` 操作進行聯合，該操作會產生此根使用者的聯合身分使用者工作階段。

當 IAM 使用者或根使用者請求 AWS STS 使用此操作的臨時登入資料時，他們會開始臨時聯合身分使用者工作階段。此工作階段的 ARN 是以聯合的原始身分為基礎。

若要在 `Principal` 元素中指定聯合身分使用者工作階段 ARN，請使用以下格式：

```
"Principal": { "AWS": "arn:aws:sts::AWS-account-ID:federated-user/user-name" }
```

## AWS 服務主體
<a name="principal-services"></a>

您可以在資源型政策的 `Principal`元素或支援主體的條件金鑰中指定 AWS 服務。*服務主體*是服務的識別碼。

服務可擔任的 IAM 角色 AWS 稱為*[服務角色](id_roles.md#iam-term-service-role)*。服務角色必須包含信任政策。*信任政策*是連接到角色的資源型政策，這些政策定義可擔任該角色的主體。有些服務角色具有已預先定義的信任政策。不過，在某些情況下，您必須在信任政策中指定服務主體。IAM 政策中的服務主體不能為 `"Service": "*"`。

**重要**  
服務主體的識別碼包含服務名稱，而且通常採用以下格式：  
`service-name.amazonaws.com`

服務主體是由服務定義。您可以藉由開啟 [AWS 使用 IAM 的 服務](reference_aws-services-that-work-with-iam.md)，檢查**服務連結角色**資料欄中是否為**是**，並開啟**是**連結，以檢視該服務的服務連結角色文件，從而尋找某些服務的服務主體。尋找該服務的 **Service-Linked Role Permissions** (服務連結角色許可) 區段，以檢視服務主體。

以下範例顯示一個可以連接到服務角色的政策。政策啟用兩種服務，分別為 Amazon ECS 和 Elastic Load Balancing，來擔任角色。然後服務可以執行指派給角色的許可政策所授予的任何任務 (不顯示)。若要指定多個服務主體，不用指定兩個 `Service` 元素；您可以只使用一個該元素。實際上，您可以將一組多個服務主體作為單一 `Service` 元素的值。

```
"Principal": {
    "Service": [
        "ecs.amazonaws.com",
        "elasticloadbalancing.amazonaws.com"
   ]
}
```

## AWS 選擇加入區域中的服務主體
<a name="principal-services-in-opt-in-regions"></a>

您可以在數個 AWS 區域以及您必須選擇加入的部分區域中啟動資源。如需您必須選擇加入的區域完整清單，請參閱 *AWS 一般參考*指南中的[管理 AWS 區域](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)。

當選擇加入區域中 AWS 的服務在相同區域內提出請求時，服務主體名稱格式會識別為其服務主體名稱的非區域化版本：

`service-name.amazonaws.com`

當選擇加入區域中 AWS 的服務向另一個區域提出跨區域請求時，服務主體名稱格式會識別為其服務主體名稱的區域化版本：

`service-name.{region}.amazonaws.com`

例如，您有一個位於區域 `ap-southeast-1` 中的 Amazon SNS 主題，而 Amazon S3 儲存貯體位於選擇加入區域 `ap-east-1`。您想要設定 S3 儲存貯體通知，將訊息發佈到 SNS 主題。若要允許 S3 服務將訊息張貼到 SNS 主題，您必須透過該主題以資源為基礎的存取政策授與 S3 服務主體 `sns:Publish` 權限。

如果您指定 S3 服務主體的非區域化版本 `s3.amazonaws.com`，則在存取政策主題中，從儲存貯體到主題的 `sns:Publish` 要求將會失敗。下列範例會在 SNS 主題存取政策的 `Principal` 政策元素中指定非區域化 S3 服務主體。

```
"Principal": { "Service": "s3.amazonaws.com" }
```

由於儲存貯體位於選擇加入的區域，而且要求是在同一個區域之外發出，因此 S3 服務主體會顯示為區域化服務主體名稱 `s3.ap-east-1.amazonaws.com`。當選擇加入區域中的服務向另一個區域提出請求時，您必須使用區域化 AWS 服務主體名稱。指定區域化服務主體名稱後，如果儲存貯體向位於另一個區域的 SNS 主題發出 `sns:Publish` 要求，則該要求將會成功。下列範例會在 SNS 主題存取政策的 `Principal` 政策元素中指定區域化 S3 服務主體。

```
"Principal": { "Service": "s3.ap-east-1.amazonaws.com" }
```

只有在您指定區域化服務主體名稱時，從選擇加入區域至另一個區域的跨區域要求的資源政策或服務主體型允許清單才會成功。

**注意**  
對於 IAM 角色信任政策，建議使用非區域化服務主體名稱。IAM 資源是全球性的，因此可以在任何區域中使用相同的角色。

## 所有主體
<a name="principal-anonymous"></a>

可使用萬用字元 (\$1) 在資源型政策的 `Principal` 元素中或支援主體的條件金鑰中指定所有主體。[資源型政策](access_policies.md#policies_resource-based) *授予*許可和[條件金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)用於限制政策陳述式的條件。

**重要**  
強烈建議您不要在資源型政策的 `Principal` 中搭配使用萬用字元 (\$1) 與 `Allow` 效果，除非您打算授予公開或匿名存取。否則，請指定預定的主體、服務或 `Principal` 元素中的 AWS 帳戶，然後進一步限制 `Condition` 元素中的存取。IAM 角色信任政策尤其如此，因為它們允許其他主體成為您帳戶中的主體。

對於資源型政策，搭配使用萬用字元 (\$1) 與 `Allow` 效果可授權存取所有使用者，包括匿名使用者 (公開存取)。對於您帳戶中的 IAM 使用者和角色主體，不需要其他許可。對於其他帳戶中的主體，他們也必須在其帳戶中具有身分型許可，以允許他們存取您的資源。這稱為[跨帳戶存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html)。

對於匿名使用者，下列元素相同：

```
"Principal": "*"
```

```
"Principal" : { "AWS" : "*" }
```

您不能使用萬用字元來比對部分主體名稱或 ARN。

以下範例顯示可用於明確拒絕所有主體的資源型政策 (而不是 [AWS JSON 政策元素： NotPrincipal](reference_policies_elements_notprincipal.md))，但在 `Condition` 元素中指定的主體*除外*。此政策應[新增至 Amazon S3 儲存貯體](https://docs.aws.amazon.com//AmazonS3/latest/userguide/add-bucket-policy.html)。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "UsePrincipalArnInsteadOfNotPrincipalWithDeny",
      "Effect": "Deny",
      "Action": "s3:*",
      "Principal": "*",
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/*",
        "arn:aws:s3:::amzn-s3-demo-bucket"
      ],
      "Condition": {
        "ArnNotEquals": {
          "aws:PrincipalArn": "arn:aws:iam::444455556666:user/user-name"
        }
      }
    }
  ]
}
```

------

## 其他資訊
<a name="Principal_more-info"></a>

如需詳細資訊，請參閱下列內容：
+ *Amazon Simple Storage Service 使用者指南*中的[儲存貯體政策範例](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html)
+ *Amazon Simple Notification Service 開發人員指南*中的 [Amazon SNS 政策範例](https://docs.aws.amazon.com/sns/latest/dg/UsingIAMwithSNS.html#ExamplePolicies_SNS)
+ *Amazon Simple Queue Service 開發人員指南*中的 [Amazon SQS 政策範例](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSExamples.html)
+ *AWS Key Management Service 開發人員指南*中的[索引鍵政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)
+ *AWS 一般參考* 中的[帳戶識別符](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html)
+ [OIDC 聯合身分](id_roles_providers_oidc.md)

# AWS JSON 政策元素： NotPrincipal
<a name="reference_policies_elements_notprincipal"></a>

`NotPrincipal` 元素使用 `"Effect":"Deny"` 來拒絕存取所有主體，但 `NotPrincipal` 元素中指定的主體***除外***。委託人可以是 IAM 使用者、 AWS STS 聯合身分使用者委託人、IAM 角色、擔任的角色工作階段 AWS 帳戶、 AWS 服務或其他委託人類型。如需有關主體的資訊，請參閱 [AWS JSON 政策元素： Principal](reference_policies_elements_principal.md)。

`NotPrincipal` 必須與 `"Effect":"Deny"` 搭配使用。不支援將其與 `"Effect":"Allow"` 搭配使用。

**重要**  
不建議將 `NotPrincipal` 用於新的資源型政策，作為安全和授權策略的一部分。使用 `NotPrincipal` 時，會難以疑難排解多個政策類型的影響。我們建議改為將 `aws:PrincipalArn` 內容索引鍵與 ARN 條件運算子搭配使用。

## 重點
<a name="notprincipal-key-points"></a>
+ 某些 AWS 服務 (包括 VPC 端點) 的資源型政策支援 `NotPrincipal` 元素。資源型政策是您直接內嵌在資源中的政策。您無法在以 IAM 身分為基礎的政策或 IAM 角色信任政策中使用 `NotPrincipal` 元素。
+ 對於已附加許可界限政策的 IAM 使用者或角色，請勿使用所含 `NotPrincipal` 政策元素具有 `Deny` 效果的資源型政策陳述式。無論在 `NotPrincipal` 元素中指定何值，具有 `Deny` 效果的 `NotPrincipal` 元素將始終拒絕任何已附加許可界限政策的 IAM 主體。這會造成部分本可存取資源的 IAM 使用者或角色失去存取權。我們建議您變更資源型政策陳述式，將條件運算子 [`ArnNotEquals`](reference_policies_elements_condition_operators.md#Conditions_ARN) 與 [`aws:PrincipalArn`](reference_policies_condition-keys.md#condition-keys-principalarn) 內容索引鍵搭配使用來限制存取，而不是使用 `NotPrincipal` 元素。如需有關許可界限的資訊，請參閱 [IAM 實體的許可界限](access_policies_boundaries.md)。
+ 使用 `NotPrincipal` 時，還必須指定未遭拒之主體的帳戶 ARN。否則，政策可能會拒絕存取包含主體的整個帳戶。根據您包含在政策中的服務， AWS 可能先驗證帳戶，再來才是使用者。如果正在評估擔任角色的使用者 （使用角色的使用者）， AWS 則 可能會先驗證帳戶，然後驗證角色，然後驗證擔任角色使用者。擔任角色的使用者由該使用者擔任角色時指定的角色工作階段名稱來進行識別。因此，我們強烈建議您明確包含使用者帳戶的 ARN，或同時包含角色 ARN 和包含該角色的帳戶的 ARN。
+ 服務控制政策 (SCP) 和資源控制政策 (RCP) 不支援 `NotPrincipal` 元素。

## `NotPrincipal` 元素的替代方案
<a name="notprincipal-alternatives"></a>

在 中管理存取控制時 AWS，在某些情況下，您可能需要明確拒絕所有委託人存取資源，但您指定的一或多個委託人除外。 AWS 建議使用具有全域條件內容索引鍵的拒絕陳述式，以便更精確地控制和更輕鬆地進行故障診斷。下列範例展示了使用條件運算子 (例如 `StringNotEquals` 或 `ArnNotEquals`) 來拒絕存取所有主體 (Condition 元素中指定的主體除外) 的替代方法。

## 使用 IAM 角色的案例範例
<a name="notprincipal-alternative-role"></a>

您可以將資源型政策與拒絕陳述式搭配使用，來防止所有 IAM 角色 (Condition 元素中指定的角色除外) 存取或操作資源。此方法遵循 AWS 安全原則，明確拒絕一律優先於任何允許陳述式，並有助於維護整個 AWS 基礎設施的最低權限原則。

建議使用帶有全域條件內容索引鍵和條件運算子 (例如 [`ArnNotEquals`](reference_policies_elements_condition_operators.md#Conditions_ARN)) 的拒絕陳述式，而不是使用 `NotPrincipal`，來明確允許 IAM 角色存取資源。下列範例使用了 [aws:PrincipalArn](reference_policies_condition-keys.md#condition-keys-principalarn) 來明確允許角色 `read-only-role` 存取 `Bucket_Account_Audit` 資料夾中的 Amazon S3 儲存貯體。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyCrossAuditAccess",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::Bucket_Account_Audit",
        "arn:aws:s3:::Bucket_Account_Audit/*"
      ],
      "Condition": {
        "ArnNotEquals": {
          "aws:PrincipalArn": "arn:aws:iam::444455556666:role/read-only-role"
        }
      }
    }
  ]
}
```

------

## 使用服務主體的案例範例
<a name="notprincipal-alternative-service-principal"></a>

您可以使用拒絕陳述式來防止所有服務主體 (`Condition` 元素中指定的主體除外) 存取或操作資源。當您需要實作精細存取控制或在 AWS 環境中的不同服務和應用程式之間建立安全邊界時，此方法特別有用。

建議使用帶有全域條件內容索引鍵和條件運算子 (例如 [`StringNotEquals`](reference_policies_elements_condition_operators.md#Conditions_String)) 的拒絕陳述式，而不是使用 `NotPrincipal`，來明確允許服務主體存取資源。下列範例使用了 `aws:PrincipalServiceName` 來明確允許 AWS CodeBuild 服務主體存取 `BUCKETNAME` 資料夾中的 Amazon S3 儲存貯體。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyNotCodeBuildAccess",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::BUCKETNAME",
        "arn:aws:s3:::BUCKETNAME/*"
      ],
      "Condition": {
        "StringNotEqualsIfExists": {
          "aws:PrincipalServiceName": "codebuild.amazonaws.com"
        }
      }
    }
  ]
}
```

------

# IAM JSON 政策元素：Action
<a name="reference_policies_elements_action"></a>

`Action` 元素描述了將允許或拒絕的特定動作。陳述式必須包含 `Action` 或 `NotAction` 元素。每個 AWS 服務都有自己的一組動作，描述您可以使用該服務執行的任務。例如，Amazon S3 的動作清單可以在 Amazon *Simple Storage Service 使用者指南*中的[在政策中指定許可](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html)中找到，Amazon EC2 的動作清單可以在 [Amazon EC2 API 參考](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/query-apis.html)中找到，而 的動作清單 AWS Identity and Access Management 可以在 [IAM API 參考](https://docs.aws.amazon.com/IAM/latest/APIReference/API_Operations.html)中找到。若要尋找其他服務的動作清單，請參閱該服務的 API 參考[文件](https://aws.amazon.com/documentation)。

AWS 也提供 JSON 格式的服務參考資訊，以簡化政策管理工作流程的自動化。透過 服務參考資訊，您可以從 AWS 服務 機器可讀取的檔案跨 存取可用的動作、資源和條件索引鍵。如需詳細資訊，請參閱 Service Authorization Reference 中的 [Simplified AWS 服務 information for programmatic access](https://docs.aws.amazon.com/service-authorization/latest/reference/service-reference.html)。

您可以使用服務命名空間做為動作字首 (`iam`、`ec2`、`sqs`、`sns`、`s3` 等) 來指定值，其後跟隨要允許或拒絕的動作名稱。該名稱必須符合所支援的服務的動作。字首和動作名稱不區分大小寫。例如，`iam:ListAccessKeys` 與 `IAM:listaccesskeys` 相同。以下範例顯示不同服務的 `Action` 元素。

**Amazon SQS 動作**

```
"Action": "sqs:SendMessage"
```

**Amazon EC2 動作**

```
"Action": "ec2:StartInstances"
```

**IAM 動作**

```
"Action": "iam:ChangePassword"
```

**Amazon S3 動作**

```
"Action": "s3:GetObject"
```

您可以為 `Action` 元素指定多個值。

```
"Action": [ "sqs:SendMessage", "sqs:ReceiveMessage", "ec2:StartInstances", "iam:ChangePassword", "s3:GetObject" ]
```

您可以使用多字元比對萬用字元 (`*`) 和單一字元比對萬用字元 (`?`)，讓 存取特定 AWS 產品提供的所有動作。例如，以下 `Action` 元素適用於所有 S3 動作。

```
"Action": "s3:*"
```

您也可以將萬用字元 (`*` 或 `?`) 用作動作名稱的一部分。例如，以下 `Action` 元素適用於包含字串 `AccessKey` 的所有 IAM 動作，包括 `CreateAccessKey`、`DeleteAccessKey`、`ListAccessKeys` 和 `UpdateAccessKey`。

```
"Action": "iam:*AccessKey*"
```

有些服務可讓您限制可用的動作。例如，Amazon SQS 可讓您僅提供所有可能的 Amazon SQS 動作的子集。在這種情況下，`*` 萬用字元不允許完全控制佇列；它只允許您已共用的部分動作。如需詳細資訊，請參閱《Amazon Simple Queue Service 開發人員指南》**中的[了解許可](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/acp-overview.html#PermissionTypes)。

# IAM JSON 政策元素：NotAction
<a name="reference_policies_elements_notaction"></a>

`NotAction` 是進階政策元素，明確符合「除了」**指定的動作清單外的所有內容。使用 `NotAction` 可以透過僅列出一些不相符的動作來產生較短的政策，而不是包括相符的長動作清單。在 `NotAction` 中指定的動作不受政策陳述式中的 `Allow` 或 `Deny` 效果的影響。反之，這表示如果使用 `Allow` 效果，則允許未列出的所有適用動作或服務。此外，如果您使用 `Deny` 效果，則會拒絕此類未列出的動作或服務。將 `NotAction` 與 `Resource` 元素一起使用時，可以為政策提供範圍。這是 AWS 決定哪些動作或服務適用的方式。如需詳細資訊，請參閱下列範例政策。

**帶允許的 NotAction** 

您可以使用 陳述式中的 `NotAction`元素`"Effect": "Allow"`來提供 AWS 服務中所有動作的存取權，但 中指定的動作除外`NotAction`。您可以將其與 `Resource` 元素一起使用，以便為政策提供範圍，將允許的動作限制為可以對指定資源執行的動作。

以下範例可讓使用者存取*除了*刪除儲存貯體之外可在任何 S3 資源上執行的所有 Amazon S3 動作。此政策也不允許在其他服務中執行動作，因為其他服務動作不適用於 S3 資源。

```
"Effect": "Allow",
"NotAction": "s3:DeleteBucket",
"Resource": "arn:aws:s3:::*",
```

有時，您可能想要允許存取大量動作。透過使用 `NotAction` 元素，您可以有效地反轉陳述式，從而產生更短的動作清單。例如，因為 AWS 有這麼多的服務，您可能想要建立一個政策，允許使用者執行除存取 IAM 動作以外的一切。

下列範例允許使用者存取每個 AWS 服務中的每個動作，IAM 除外。

```
"Effect": "Allow",
"NotAction": "iam:*",
"Resource": "*"
```

在相同陳述式中或在政策中的不同陳述式小心使用 `NotAction` 元素和 `"Effect": "Allow"`。`NotAction` 符合未明確列出或適用於指定資源的所有服務和動作，並可能導致授予使用者比您預期更多的許可。

**帶拒絕的 NotAction**

您可以在陳述式中使用 `NotAction` 元素 `"Effect": "Deny"` 拒絕存取除 `NotAction` 元素中指定的動作之外的所有列出的資源。此組合不允許列出的項目，而是明確拒絕未列出的動作。您仍必須允許您要允許的動作。

如果使用者未使用 MFA 登入，則以下條件範例拒絕存取非 IAM 動作。如果使用者使用 MFA 登入，則 `"Condition"` 測試失敗，最終的 `"Deny"` 陳述式沒有影響。但請注意，這不會授予使用者存取任何動作的許可；它只會明確拒絕除 IAM 動作以外的所有其他動作。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "DenyAllUsersNotUsingMFA",
        "Effect": "Deny",
        "NotAction": "iam:*",
        "Resource": "*",
        "Condition": {"BoolIfExists": {"aws:MultiFactorAuthPresent": "false"}}
    }]
}
```

------

如需拒絕特定區域以外動作存取 (特定服務除外) 的範例政策，請參閱 [AWS： AWS 根據請求的區域拒絕對 的存取](reference_policies_examples_aws_deny-requested-region.md)。

# IAM JSON 政策元素：Resource
<a name="reference_policies_elements_resource"></a>

IAM 政策陳述式中的 `Resource` 元素可指定套用該陳述式的一個或多個物件。陳述式必須包含 `Resource` 或 `NotResource` 元素。

您可以使用 Amazon Resource Name (ARN) 來指定資源。ARN 的格式取決於您參考的 AWS 服務 和特定資源。雖然 ARN 格式不同，但務必使用 ARN 來識別資源。如需有關 ARN 格式的詳細資訊，請參閱 [IAM ARN](reference_identifiers.md#identifiers-arns)。如需有關如何指定資源的詳細資訊，請參閱您要撰寫陳述式的服務文件。

**注意**  
有些 AWS 服務 不允許您指定個別資源的動作。在這些情況下，您在 `Action` 或 `NotAction` 元素中列出的任何動作都會套用至該服務中的所有資源。在這種情況下，您可以在 `Resource` 元素中使用萬用字元 (`*`)。

以下範例參考特定的 Amazon SQS 佇列。

```
"Resource": "arn:aws:sqs:us-east-2:account-ID-without-hyphens:queue1"
```

以下範例參考 AWS 帳戶中名為 `Bob` 的 IAM 使用者。

**注意**  
在 `Resource` 元素中，IAM 使用者名稱區分大小寫。

```
"Resource": "arn:aws:iam::account-ID-without-hyphens:user/Bob"
```

## 在資源 ARN 中使用萬用字元
<a name="reference_policies_elements_resource_wildcards"></a>

可以在 ARN 的個別區段內 (各部分以冒號分隔) 使用萬用字元 (`*` 和 `?`)。
+ 字元的任意組合 (`*`)
+ 任何單一字元 (`?`)

您可以在每個區段中使用多個 `*` 或 `?` 字元。如果萬用字元 `*` 是資源 ARN 區段的最後一個字元，則其可以展開，以符合冒號界限以外的內容。我們建議您在由冒號分隔的 ARN 區段內使用萬用字元 (`*` 和 `?`)。

**注意**  
您無法在識別 AWS 產品的服務區段中使用萬用字元。如需 ARN 客群的詳細資訊，請參閱 [使用 Amazon Resource Name (ARNs識別 AWS 資源](reference-arns.md)。

以下範例參考路徑為 `/accounting` 的所有 IAM 使用者。

```
"Resource": "arn:aws:iam::account-ID-without-hyphens:user/accounting/*"
```

以下範例參考特定 Amazon S3 儲存貯體中的所有項目。

```
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
```

星號 (`*`) 字元可以展開以取代區段內的所有項目，包括如正斜線 (`/`) 等字元，這些字元可能會顯示為指定服務命名空間內的分隔符號。例如，假設下列 Amazon S3 ARN，因為相同的萬用字元擴充邏輯適用於所有服務。

```
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*/test/*"
```

ARN 中的萬用字元適用於儲存貯體中的所有以下物件，而不僅僅是列出的第一個物件。

```
amzn-s3-demo-bucket/1/test/object.jpg
amzn-s3-demo-bucket/1/2/test/object.jpg
amzn-s3-demo-bucket/1/2/test/3/object.jpg 
amzn-s3-demo-bucket/1/2/3/test/4/object.jpg
amzn-s3-demo-bucket/1///test///object.jpg
amzn-s3-demo-bucket/1/test/.jpg
amzn-s3-demo-bucket//test/object.jpg
amzn-s3-demo-bucket/1/test/
```

考慮上一個清單中的最後兩個物件。Amazon S3 物件名稱可以傳統分隔符號正斜線 (`/`) 字元開頭或結尾。雖然 `/` 作為分隔符，但在資源 ARN 中使用此字元時卻沒有特定的意義。它被視為與任何其他有效字元相同。ARN 不符合下列物件：

```
amzn-s3-demo-bucket/1-test/object.jpg
amzn-s3-demo-bucket/test/object.jpg
amzn-s3-demo-bucket/1/2/test.jpg
```

## 指定多個資源
<a name="reference_policies_elements_resource_multiple-resources"></a>

您可以使用 ARNs 陣列，在 `Resource` 元素中指定多個資源。以下範例參考兩個 DynamoDB 資料表。

```
"Resource": [
    "arn:aws:dynamodb:us-east-2:account-ID-without-hyphens:table/books_table",
    "arn:aws:dynamodb:us-east-2:account-ID-without-hyphens:table/magazines_table"
]
```

## 在資源 ARN 中使用政策變數
<a name="reference_policies_elements_resource_policy-variables"></a>

在 `Resource` 元素中，您可以在 ARN 中用於識別特定資源 (即 ARN 的尾隨部分) 的部分中使用 JSON [政策變數](reference_policies_variables.md)。例如，您可以使用索引鍵 `{aws:username}` 做為資源 ARN 的一部分，以表示目前使用者的名稱應做為資源名稱的一部分包含在內。以下範例顯示如何在 `{aws:username}` 元素中使用 `Resource` 索引鍵。此政策允許存取與目前使用者名稱符合的 Amazon DynamoDB 資料表。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Action": "dynamodb:*",
        "Resource": "arn:aws:dynamodb:us-east-2:111122223333:table/${aws:username}"
    }
}
```

------

如需有關 JSON 政策變數的詳細資訊，請參閱 [IAM 政策元素：變數與標籤](reference_policies_variables.md)。

# IAM JSON 政策元素：NotResource
<a name="reference_policies_elements_notresource"></a>

`NotResource` 是進階政策元素，會明確比對除指定資源以外的每項資源。使用 `NotResource` 可以透過僅列出一些不相符的資源來產生較短的政策，而不是包括相符的長資源清單。這對套用在單一 AWS 服務中的政策特別有用。

例如，假設您有一個名為 `HRPayroll` 的群組。不應允許 `HRPayroll` 成員存取除 `HRBucket` 儲存貯體中的 `Payroll` 資料夾以外的任何 Amazon S3 資源。以下政策明確拒絕存取除列出的資源以外的所有 Amazon S3 資源。不過，請注意，此政策不授予使用者存取任何資源的許可。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Deny",
    "Action": "s3:*",
    "NotResource": [
      "arn:aws:s3:::HRBucket/Payroll",
      "arn:aws:s3:::HRBucket/Payroll/*"
    ]
  }
}
```

------

一般而言，要明確拒絕對資源的存取，您可以編寫使用 `"Effect":"Deny"` 的政策，其中包含個別列出每個資料夾的 `Resource` 元素。但是，在這種情況下，每次向 `HRBucket` 新增資料夾或向 Amazon S3 新增不應存取的資源時，都必須將其名稱新增至 `Resource` 元素中的清單。如果您使用 `NotResource` 元素，則會自動拒絕使用者存取新資料夾，除非您將資料夾名稱新增到 `NotResource` 元素。

使用 `NotResource` 時，請記住，此元素中指定的資源是「唯一」**不受限的資源。因此，這會限制可能套用至動作的所有資源。在上述範例中，政策只影響 Amazon S3 動作，因此只會影響 Amazon S3 資源。如果 `Action` 元素也包含 Amazon EC2 動作，則該政策將拒絕存取未在 `NotResource` 元素中指定的任何 EC2 資源。若要了解服務中的哪些動作允許指定資源的 ARN，請參閱 [AWS 服務的動作、資源和條件金鑰](reference_policies_actions-resources-contextkeys.html)。

## NotResource 與其他元素
<a name="notresource-element-combinations"></a>

`"Effect": "Allow"`、`"Action": "*"` 和 `"NotResource": "arn:aws:s3:::HRBucket"` 元素**絕對**不能一起使用。此陳述式非常危險，因為它允許 S3 `HRBucket` 儲存貯體以外所有資源 AWS 上的 中的所有動作。 S3 它甚至允許使用者自行新增允許他們存取 `HRBucket` 的政策。請勿執行此作業。

在相同陳述式中或在政策中的不同陳述式小心使用 `NotResource` 元素和 `"Effect": "Allow"`。`NotResource` 允許未明確列出的所有服務和資源，並可能導致授予使用者比您預期的更多許可。在相同陳述式中使用 `NotResource` 元素和 `"Effect": "Deny"` 會拒絕未明確列出的服務和資源。

# IAM JSON 政策元素：Condition
<a name="reference_policies_elements_condition"></a>

`Condition` 元素 (或 `Condition` 區塊**) 可讓您於政策生效時指定條件。`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)。例如，下列條件包含 `StringEquals` 運算子，以確保僅 `john` 所做的請求會相符。使用者指定的 `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"`) 以允許對該資源的存取，則金鑰名稱同時符合兩個標籤，但只有一個值符合。這會導致意外的條件失敗。

**重要**  
根據最佳實務，確保帳戶成員在命名鍵值對屬性時遵守一致的命名慣例。範例包括標籤或 AWS KMS 加密內容。您可以使用[`aws:TagKeys`](reference_policies_condition-keys.md#condition-keys-tagkeys)內容金鑰進行標記，或使用 [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)進行 AWS KMS 加密內容。
+ 如需所有條件運算子的清單及其運作方式的描述，請參閱[條件運算子](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)人向 提出[請求](intro-structure.md#intro-structure-request)時 AWS， 會將請求資訊 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=...
```

該請求內容與一項政策相符，該政策允許使用者移除自己的多重要素驗證 (MFA) 裝置，但前提是他們必須在過去一小時 (3,600 秒) 內使用 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` 的值為 2800，小於 3600，因此政策允許此授權請求。

AWS 會評估政策中的每個內容索引鍵，並傳回 *true* 或 *false* 的值。請求中不存在的內容索引鍵視為不相符。

請求內容可傳回下列值：
+ **True** (真) – 若申請者在過去一個小時或一個小時內使用 MFA 登入，條件便會傳回 *true*。
+ **False** (偽) – 若申請者在過去超過一個小時中使用 MFA 登入，條件便會傳回 *false*。
  + **不存在** – 如果請求者在 AWS CLI 或 AWS API 中使用其 IAM 使用者存取金鑰提出請求，則金鑰不存在。在此情況下，由於索引鍵不存在，因此不會相符。

**注意**  
在某些情況下，當條件索引鍵值不存在時，條件仍然可以傳回 true。例如，如果新增 `ForAllValues` 限定詞，則當請求中不存在內容索引鍵時，請求會傳回 true。若要防止遺失內容索引鍵或具有空值的內容索引鍵評估為 true，您可以在政策中包含值為 `false` 的 [Null 條件運算子](reference_policies_elements_condition_operators.md#Conditions_Null)，以檢查內容索引鍵是否存在且其值不為 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` 元素可以包含多個條件運算子，而且每個條件運算子都可以包含多個內容索引鍵值對。下圖說明了這一點。

![\[兩個條件運算子區塊圖。第一個區塊包含兩個內容金鑰預留位置，每個預留位置都有多個值。第二個條件區塊包含一個內容索引鍵，其中包含多個值。\]](http://docs.aws.amazon.com/zh_tw/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*。除了 [...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"}}
  }
}
```

------

# 具有多個內容索引鍵或值的條件
<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>  | **沒有相符項目**  | 

# 單值與多值的內容索引鍵
<a name="reference_policies_condition-single-vs-multi-valued-context-keys"></a>

單值與多值內容索引鍵之間的差異在於[請求內容](intro-structure.md#intro-structure-request)中值的數目，而非政策條件中值的數目。
+ *單值*條件內容索引鍵在請求內容中最多有一個值。例如，當您在 中標記資源時 AWS，每個資源標籤都會儲存為索引鍵/值對。由於資源標籤金鑰只能有單一標籤值，因此 [aws:ResourceTag/*tag-key*](reference_policies_condition-keys.md#condition-keys-resourcetag) 是單值內容索引鍵。請勿使用具有單值內容索引鍵的條件集運算子。
+ *多值*條件內容索引鍵在請求內容中可以擁有多個值。例如，當您在 中標記資源時 AWS，您可以在單一請求中包含多個標籤鍵/值對。因此，[aws:TagKeys](reference_policies_condition-keys.md#condition-keys-tagkeys) 是多值內容索引鍵。多值內容索引鍵需要條件集運算子。

例如，請求可以來自最多一個 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) 主題中作為*值類型*的每個條件內容索引鍵的描述中。
+ [Service Authorization Reference](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html) 中的多值內容索引鍵使用 `ArrayOf` 字首，後接條件運算子類別類型 (例如 `ArrayOfString` 或 `ArrayOfARN`)，表示請求可能包含條件內容索引鍵的多個值。
+ 可以使用任何可用的單值內容索引鍵作為政策變數，但不能使用多值內容金鑰作為政策變數。如需有關政策變數的詳細資訊，請參閱 [IAM 政策元素：變數與標籤](reference_policies_variables.md)。
+ 使用包含金鑰/值對的內容索引鍵時，請務必注意，即使可以有多個標籤鍵值，每個 `tag-key` 只能有一個值。
  + [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) 定義了請求中允許的標籤索引鍵，但不包含標籤索引鍵值。由於您可以在請求中包含多個標籤索引鍵值對，因此 `aws:TagKeys` 是多值內容索引鍵。
+ 多值內容索引鍵需要條件集運算子。請勿將條件集運算子 `ForAllValues` 或 `ForAnyValue` 與單值內容索引鍵搭配使用。使用條件集運算子搭配單值內容索引鍵可能會導致過度寬鬆的政策。

## 用於多值內容索引鍵的集運算子
<a name="reference_policies_condition-multi-valued-context-keys"></a>

若要將您的條件內容索引鍵與具有多值的[請求內容](intro-structure.md#intro-structure-request)索引鍵進行比較，您必須使用 `ForAllValues` 或 `ForAnyValue` 集運算子。這些集運算子用於比較兩組值，例如請求中的標籤集和政策條件中的標籤集。

`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` 效果搭配使用，請務必小心，因為如果請求內容中意外出現遺失內容索引鍵，則可能導致政策過度寬鬆。您應該始終在政策中包含具有 `false` 值的 [`Null`](reference_policies_elements_condition_operators.md#Conditions_Null) 條件運算子，以檢查內容索引鍵是否存在且其值不為 Null。如需範例，請參閱 [根據標籤索引鍵控制存取權限](access_tags.md#access_tags_control-tag-keys)。

#### ForAllValues 集運算子範例
<a name="reference_policies_condition-forallvalues-example"></a>

在下列範例中，ForAllValues 會與 aws:TagKeys 搭配使用，以允許使用者刪除指派給 EC2 執行個體的特定標籤。此政策僅允許使用者刪除 `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` 限定詞會測試這組請求內容索引鍵值是否至少有一個成員與政策條件中這組內容索引鍵值的至少一個成員相符。如果請求中任一內容索引鍵值與政策中的任一內容索引鍵值相符，則條件會傳回 `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>

在下列範例中，ForAnyValue 會與 aws:TagKeys 搭配使用，以允許使用者刪除指派給 EC2 執行個體的特定標籤。如果請求中指定的標籤索引鍵包含 `environment` 或 `cost-center`，則此政策允許使用者刪除執行個體的標籤。請求可以包含政策中指定標籤索引鍵之外的其他標籤索引鍵，但必須包含至少一個指定索引鍵以符合條件。

------
#### [ 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 政策中，您可以為單值和多值內容索引鍵指定多個值，以便與請求內容進行比較。下列一組政策範例示範具有多個內容索引鍵和值的政策條件。

**注意**  
如果您想提交要包含在本參考指南中的政策，請使用此頁面底部的 **Feedback (意見回饋)** 按鈕。如需以身分為基礎的 IAM 政策範例，請參閱 [以身分為基礎的 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)。)
+ 具有多個單值內容索引鍵和值的一個條件區塊。([檢視此範例](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>

下列範例說明如何使用身分型政策，在請求中包含特定標籤索引鍵字首時，拒絕使用 IAM 標記動作。[`aws:TagKeys`](reference_policies_condition-keys.md#condition-keys-tagkeys) 的值包含用於部分字串比對的萬用字元 (\$1)。此政策包含具有內容索引鍵 `aws:TagKeys` 的 `ForAllValues` 集運算子，因為請求內容索引鍵可以包含多值。為了使內容索引鍵 `aws:TagKeys` 符合，請求內容中的每個值都必須與政策中的至少一個值相符。

如果請求中沒有內容索引鍵，`ForAllValues` 集運算子也會傳回 true。

您可以透過在政策中包含一個值為 `false` 的 `Null` 條件運算子，來檢查請求中的內容索引鍵是否存在且其值不為 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 評估此政策。對於拒絕陳述式，「相符」表示「遭拒」，「無相符項目」表示「未遭拒」，且可能由其他陳述式允許。  


| 政策條件 | 請求內容 | 結果 | 
| --- | --- | --- | 
|  <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` 值不包含字首 **key1** 或 **key2**。請求內容可以包含多個值，但由於使用了 `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 評估此政策。對於拒絕陳述式，「相符」表示「遭拒」，「無相符項目」表示「未遭拒」，且可能由其他陳述式允許。  


| 政策條件 | 請求內容 | 結果 | 
| --- | --- | --- | 
|  <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>

如果使用政策中指定的其中一個標籤索引鍵 (`environment` 或 `webserver`) 標記任何快照，下列以身分為基礎的政策範例將拒絕建立 EC2 執行個體磁碟區的快照。此政策包含具有內容索引鍵 `aws:TagKeys` 的 `ForAnyValue` 集運算子，因為請求內容索引鍵可以包含多值。如果您的標記請求包含政策中指定的任何一個標籤索引鍵值，`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 評估此政策。對於拒絕陳述式，「相符」表示「遭拒」，「無相符項目」表示「未遭拒」，且可能由其他陳述式允許。


| 政策條件 | 請求內容 | 結果 | 
| --- | --- | --- | 
|  <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>

當條件區塊具有多個條件時，每個條件都有單一內容索引鍵，所有內容索引鍵都必須解析為 true 才能調用所需的 `Allow` 或 `Deny` 效果。當您使用否定相符條件運算子時，會反轉條件值的評估邏輯。

下列範例可讓使用者建立 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` 效果。下列 EC2 磁碟區已成功建立，因為專案名稱為 `Feature3`，資源標籤為 `QA`。

```
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}]'
```

## 範例：具有多個單值內容索引鍵和值的一個條件區塊
<a name="reference_policies_condition_examples-single-valued-context-keys-2"></a>

當條件區塊包含多個內容索引鍵，且每個內容索引鍵都具有多個值時，每個內容索引鍵都必須解析為 true，以便至少一個金鑰值能夠調用所需的 `Allow` 或 `Deny` 效果。當您使用否定相符條件運算子時，會反轉內容索引鍵值的評估邏輯。

下列範例可讓使用者在 Amazon Elastic Container Service 叢集上啟動和執行任務。
+ 對於 `aws:RequestTag/environment` 內容索引鍵 **AND**，請求內容必須包含 `production` **OR** `prod-backup`。
+ `ecs:cluster` 內容索引鍵確保任務在 `default1` **OR** `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>  | 無相符項目 | 

# IAM 政策元素：變數與標籤
<a name="reference_policies_variables"></a>

當您在撰寫政策時不知道資源或條件索引鍵的確切值時，請使用 AWS Identity and Access Management (IAM) 政策變數做為預留位置。

**注意**  
如果 AWS 無法解析變數，這可能會導致整個陳述式無效。例如，如果您使用 `aws:TokenIssueTime` 變數，此變數只會在請求者使用臨時憑證驗證時解析值 (IAM 角色)。為避免變數造成陳述式無效，請使用 [... IfExists 條件運算子。](reference_policies_elements_condition_operators.md#Conditions_IfExists)

**Topics**
+ [簡介](#policy-vars-intro)
+ [在政策中使用變數](#policy-vars-using-variables)
+ [做為政策變數的標籤](#policy-vars-tags)
+ [在此您可以使用政策變數](#policy-vars-wheretouse)
+ [沒有值的政策變數](#policy-vars-no-value)
+ [您可以使用適用於政策變數的請求資訊](#policy-vars-infotouse)
+ [指定預設值](#policy-vars-default-values)
+ [如需詳細資訊](#policy-vars-formoreinfo)

## 簡介
<a name="policy-vars-intro"></a>

在 IAM 政策中，許多動作允許您為要控制存取的特定資源提供名稱。例如，下列政策可讓使用者為 `marketing` 專案列出、讀取和寫入 S3 儲存貯體 `amzn-s3-demo-bucket` 中的物件。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],      
      "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket"],
      "Condition": {"StringLike": {"s3:prefix": ["marketing/*"]}}
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],      
      "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket/marketing/*"]
    }
  ]
}
```

------

在某些情況下，您在編寫政策時可能不知道資源的確切名稱。您可能想要一般化政策，以使其適用於許多使用者，而不必為每個使用者製作政策的唯一副本。建議您建立適用於該群組中任何使用者的單一群組政策，而不是為每個使用者建立單獨政策。

## 在政策中使用變數
<a name="policy-vars-using-variables"></a>

您可以使用在政策中設定預留位置的*政策變數*來定義政策內的動態值。

變數使用 **`$`** 字首後接一對大括號 (**`{ }`**) 進行標記，其中包含請求中的值的變數名稱。

評估政策時，政策變數將取代為來自請求中傳遞的條件式內容金鑰的值。變數可用於以[身分為基礎的政策、資源政策、服務控制政策、工作階段政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)以及 [VPC 端點政策](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)。用作許可界限的以身分為基礎的政策也支援政策變數。

全域條件內容索引鍵可以用作跨 AWS 服務請求中的變數。與 AWS 資源互動時，服務特定條件索引鍵也可以用作變數，但只有在針對支援其資源提出請求時才可用。如需每個 AWS 服務和資源可用的內容金鑰清單，請參閱[https://docs.aws.amazon.com/service-authorization/latest/reference/reference.html](https://docs.aws.amazon.com/service-authorization/latest/reference/reference.html)。在某些情況下，您無法使用值填入全域條件內容索引鍵。若要進一步了解每個索引鍵，請參閱 [AWS 全域條件內容索引鍵](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。

**重要**  
索引鍵名稱不區分大小寫。例如，`aws:CurrentTime` 等同於 `AWS:currenttime`。
您可以使用任何單一值條件鍵作為變數。您無法使用多重值條件鍵做為變數。

下面範例顯示了 IAM 角色或使用者的政策，它用政策變數替換特定資源名稱。您可以利用 `aws:PrincipalTag` 條件索引鍵來重複使用此政策。此政策被評估時，僅在儲存貯體名稱以 `team` 主體標籤中的團隊名稱作為結尾時，`${aws:PrincipalTag/team}` 才會允許該動作。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],      
      "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket"],
      "Condition": {"StringLike": {"s3:prefix": ["${aws:PrincipalTag/team}/*"]}}
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],      
      "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket/${aws:PrincipalTag/team}/*"]
    }
  ]
}
```

------

該變數使用 `$` 字首標記，後跟一對大括號 (`{ }`)。在 `${ }` 字元內，您可以包含要在政策中想要使用的請求中的值的名稱。您可以使用的值將在本頁稍後討論。

如需有關此全域條件索引鍵的詳細資訊，請參閱全域條件金鑰清單中的 [aws:PrincipalTag/*tag-key*](reference_policies_condition-keys.md#condition-keys-principaltag)。

**注意**  
若要使用政策變數，必須在陳述式中包含 `Version` 元素，並且必須將版本設定為支援政策變數的版本。變數已導入版本 `2012-10-17`。舊版的政策語言不支援政策變數。如果不包含 `Version` 元素，並將其設定為適當的版本，則 `${aws:username}` 等變數將被視為政策中的常值字串。  
`Version` 政策元素與政策版本不同。`Version` 政策元素是在政策內使用，並定義政策語言的版本。另一方面，政策版本會在您在 IAM 中變更客戶受管政策時建立。變更的政策不會覆寫現有的政策。IAM 反而會建立新版本的受管政策。若要進一步了解 `Version` 政策元素，請參閱 [IAM JSON 政策元素：Version](reference_policies_elements_version.md)。若要進一步了解政策版本，請參閱 [版本控制 IAM 政策](access_policies_managed-versioning.md)。

允許主體從 S3 儲存貯體的 /David 路徑取得物件之政策如下所示：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/David/*"
      ]
    }
  ]
}
```

------

如果此政策附加至使用者 `David`，該使用者會從其自己的 S3 儲存貯體取得物件，但您必須為包含使用者名稱的每個使用者建立獨立政策。您接著會將每個政策連接到個別使用者。

透過使用政策變數，您可以建立可重複使用的政策。如果 `aws:PrincipalTag` 的標籤鍵值與請求中傳遞的標籤鍵 `owner` 值相符，下列政策將允許使用者從 Amazon S3 儲存貯體取得物件。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [{
    "Sid": "AllowUnlessOwnedBySomeoneElse",
    "Effect": "Allow",
    "Action": ["s3:GetObject"],    
    "Resource": ["*"],
    "Condition": {
        "StringEquals": {
          "s3:ExistingObjectTag/owner": "${aws:PrincipalTag/owner}"
        }
      }
    }
  ]
}
```

------

像這樣使用政策變數來替代使用者時，您不必為每個單獨使用者設定獨立的政策。在下列範例中，政策會附加至由產品經理使用臨時安全憑證擔任的 IAM 角色。使用者提出新增 Amazon S3 物件的請求時，IAM 會將目前請求中的 `dept` 標籤值替換為 `${aws:PrincipalTag}` 變數，並評估該政策。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowOnlyDeptS3Prefix",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/${aws:PrincipalTag/dept}/*"
            ]
        }
    ]
}
```

------

## 做為政策變數的標籤
<a name="policy-vars-tags"></a>

在某些 AWS 服務中，您可以將自己的自訂屬性連接到這些服務建立的資源。例如，您可以將標籤套用至 Amazon S3 儲存貯體或 IAM 使用者。這些標籤均為鍵值組。您定義標籤鍵名稱以及與該鍵名稱關聯的值。例如，您可以建立一個具有 **department** 索引鍵和 **Human Resources** 值的標籤。如需有關標記 IAM 實體的詳細資訊，請參閱 [AWS Identity and Access Management 資源的標籤](id_tags.md)。有關標記其他 AWS 服務建立之資源的資訊，請參閱該服務的文件。如需有關使用標籤編輯器的詳細資訊，請參閱 *AWS 管理主控台 使用者指南中的*[使用標籤編輯器](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/tag-editor.html)。

您可以標記 IAM 資源以簡化探索、整理和追蹤您的 IAM 資源。您也可以標記 IAM 身分來控制存取資源或標記本身。若要進一步了解有關使用標籤以控制存取的詳細資訊，請參閱[使用標籤控制對 IAM 使用者和角色的存取](access_iam-tags.md)。

## 在此您可以使用政策變數
<a name="policy-vars-wheretouse"></a>

 您可以在 `Resource` 元素中使用政策變數，也可以在 `Condition` 元素中使用字串比較。

### 資源元素
<a name="policy-vars-resourceelement"></a>

您可以在 `Resource` 元素中使用政策變數，但只能在 ARN 的資源部分中使用政策變數。ARN 的這個部分會出現在第 5 個冒號 (:) 之後。您無法使用變數來取代第 5 個冒號之前的 ARN 部分，例如服務或帳戶。如需有關 ARN 格式的詳細資訊，請參閱 [IAM ARN](reference_identifiers.md#identifiers-arns)。

若要以標籤值取代 ARN 的一部分，請以 `${ }` 包住字首與索引鍵名稱。例如，以下資源元素僅指其名稱與請求之使用者的部門標籤值相同的儲存貯體。

`"Resource": ["arn:aws::s3:::amzn-s3-demo-bucket/${aws:PrincipalTag/department}"]`

許多 AWS 資源使用包含使用者建立名稱的 ARNs。下列 IAM 政策可確保只有具有相符 access-project、access-application 和 access-environment 標籤值的特定使用者才能修改其資源。此外，使用 [\$1 萬用字元比對](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html)時，它們能允許自訂資源名稱尾碼。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowAccessBasedOnArnMatching",
      "Effect": "Allow",
      "Action": [
        "sns:CreateTopic",
        "sns:DeleteTopic"],      
      "Resource": ["arn:aws:sns:*:*:${aws:PrincipalTag/access-project}-${aws:PrincipalTag/access-application}-${aws:PrincipalTag/access-environment}-*"
      ]
    }
  ]
}
```

------

### 條件元素
<a name="policy-vars-conditionelement"></a>

在涉及字串運算子或 ARN 運算子的任何條件下，您都可以將政策變數用於 `Condition` 值。字串運算子包括 `StringEquals`、`StringLike` 和 `StringNotLike`。ARN 運算子包括 `ArnEquals` 和 `ArnLike`。您無法使用政策變數搭配其他運算子，例如 `Numeric`、`Date`、`Boolean`、`Binary`、`IP Address` 或 `Null` 運算子。如需有關條件運算子的詳細資訊，請參閱 [IAM JSON 政策元素：條件運算子](reference_policies_elements_condition_operators.md)。

在 `Condition` 元素表達式中參照標籤時，請使用相關的字首和索引鍵名稱做為條件金鑰。然後，使用您想在條件值中測試的值。

例如，下列政策範例允許完整存取使用者，但僅限在標籤 `costCenter` 連接至使用者時。此標籤也必須有一個 `12345` 或 `67890` 的值。如果此標籤沒有值，或有任何其他值，請求將會失敗。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
          "iam:*user*"
       ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "iam:ResourceTag/costCenter": [ "12345", "67890" ]
        }
      }
    }
  ]
}
```

------

## 沒有值的政策變數
<a name="policy-vars-no-value"></a>

當政策變數參考的條件內容索引鍵沒有值或不存在於請求授權內容中時，該值實際上是空值。沒有相等或類似的值。在以下情況下，授權內容中可能不存在條件內容索引鍵：
+ 您正在對不支援該條件索引鍵的資源請求中使用服務特定條件內容索引鍵。
+ IAM 主體、工作階段、資源或請求的標籤不存在。
+ 在 [AWS 全域條件內容索引鍵](reference_policies_condition-keys.md) 中列出了每個全域條件內容金鑰的其他情況。

當您在 IAM 政策的條件元素中使用沒有值的變數時 ([IAM JSON 政策元素：條件運算子](reference_policies_elements_condition_operators.md)，例如 `StringEquals` 或 `StringLike` 不匹配)，政策陳述式不會生效。

反向條件運算子 (例如 `StringNotEquals` 或 `StringNotLike`) 確實與空值匹配，因為其正在測試的條件索引鍵的值不等於或不類似於有效空值。

在下列範例中，`aws:principaltag/Team` 必須等於 `s3:ExistingObjectTag/Team` 才能允許存取。未設定 `aws:principaltag/Team` 時，系統會明確拒絕存取。如果在授權內容中沒有值的變數用作政策的 `Resource` 或 `NotResource` 元素的一部分，則包含沒有值之政策變數的資源將不會與任何資源相匹配。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
   {
    "Effect": "Deny", 
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
    "Condition": {
      "StringNotEquals": {
        "s3:ExistingObjectTag/Team": "${aws:PrincipalTag/Team}"
       }
      }
    }
  ]
}
```

------

## 您可以使用適用於政策變數的請求資訊
<a name="policy-vars-infotouse"></a>

 您可以使用 JSON 政策的 `Condition` 元素，來比較[請求內容](reference_policies_evaluation-logic_policy-eval-reqcontext.md)中的金鑰和您在政策中指定的鍵值。當您使用政策變數時， 會從請求內容索引鍵 AWS 取代 值，以取代政策中的 變數。

### 主體索引鍵值
<a name="principaltable"></a>

`aws:username`、`aws:userid` 及 `aws:PrincipalType` 的值取決於啟動請求之主體的類型。例如，請求可能是使用 IAM 使用者、IAM 角色或 AWS 帳戶根使用者的憑證提出。下列資料表顯示不同類型之主體的鍵值。


****  

| Principal | `aws:username` | `aws:userid` | `aws:PrincipalType` | 
| --- | --- | --- | --- | 
| AWS 帳戶根使用者 | (不存在) | AWS 帳戶 ID | Account | 
| IAM 使用者 | ：IAM-user-name | [：唯一 ID](reference_identifiers.md#identifiers-unique-ids) | User | 
| AWS STS 聯合身分使用者主體 | (不存在) | account:caller-specified-name | FederatedUser | 
| OIDC 聯合身分主體 有關使用 Web 聯合身分時可用的政策索引鍵的詳細資訊，請參閱 [AWS OIDC 聯合的可用金鑰](reference_policies_iam-condition-keys.md#condition-keys-wif)。 | (不存在) |   *role-id*：*caller-specified-role-name*  其中 `role-id` 是[角色的唯一 ID](reference_identifiers.md#identifiers-unique-ids)，caller-specified-role-name 由傳遞給 AssumeRoleWithWebIdentity 請求的 [RoleSessionName](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AssumeRole.html#API_AssumeRoleWithWebIdentity_RequestParameters) 參數指定。  | AssumedRole | 
| SAML 聯合身分主體 有關使用 SAML 聯合時可用的政策索引鍵的詳細資訊，請參閱 [單獨辨識以 SAML 為基礎的聯合身分中的使用者](id_roles_providers_saml.md#CreatingSAML-userid)。 | (不存在) |  *role-id*：*caller-specified-role-name* 其中 `role-id` 是[角色的唯一 ID](reference_identifiers.md#identifiers-unique-ids)，而 caller-specified-role-name 由 Attribute 元素指定，其 [Name 屬性](id_roles_providers_create_saml_assertions.md)設定為 https://aws.amazon.com/SAML/attributes/RoleSessionName。  | AssumedRole | 
| 擔任的角色 | (不存在) |  *role-id*：*caller-specified-role-name* 其中 `role-id` 是[角色的唯一 ID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids)，caller-specified-role-name 由傳遞給 AssumeRole 請求的 [RoleSessionName](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html#API_AssumeRole_RequestParameters) 參數指定。  | AssumedRole | 
| 指派給 Amazon EC2 執行個體的角色 | (不存在) |  *role-id*:*ec2-instance-id* 其中 `role-id` 是[角色的唯一 ID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids)，而 ec2-instance-id 是 [EC2 執行個體的唯一識別符](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstances.html)。  | AssumedRole | 
| 匿名呼叫者 (僅限 Amazon SQS、Amazon SNS 和 Amazon S3) | (不存在) | anonymous | Anonymous | 

對於此表格、中的項目，請注意下列事項：
+ 「不存在」**表示該值不在目前請求資訊中，並且任何符合它的嘗試都會失敗並導致陳述式無效。
+ *role-id* 是在建立時指派給每個角色的唯一識別符。您可以使用 AWS CLI 命令顯示角色 ID： `aws iam get-role --role-name rolename`
+ *caller-specified-name* 和 *caller-specified-role-name* 是呼叫程序 (例如，應用程式或服務) 在呼叫取得暫時憑證時所傳遞的名稱。
+ *ec2-instance-id* 是在啟動時指派給執行個體的值，並顯示在 Amazon EC2 主控台的 **Instances** (執行個體) 頁面上。您也可以執行 AWS CLI 命令來顯示執行個體 ID： `aws ec2 describe-instances`

### 聯合身分主體在請求中可用的資訊
<a name="policy-vars-infoWIF"></a>

聯合身分主體是使用 IAM 以外的系統進行身分驗證的使用者。例如，公司可能有內部呼叫 的應用程式以供內部使用 AWS。向使用該應用程式的每個公司使用者提供 IAM 身分可能是不切實際的。相反地，公司可能會使用具有單一 IAM 身分的代理 (中間層) 應用程式，或者公司可能使用 SAML 身分提供者 (IdP)。代理應用程式或 SAML IdP 使用公司網路對個別使用者進行身分驗證。然後，代理應用程式可以使用其 IAM 身分來取得個別使用者的臨時安全憑證。SAML IdP 可以有效地交換 AWS 臨時安全登入資料的身分資訊。然後，臨時登入資料可用於存取 AWS 資源。

同樣，您可以為應用程式需要存取 AWS 資源的行動裝置建立應用程式。在這種情況下，您可以使用 *OIDC 聯合*，其中應用程式使用 Login with Amazon、Amazon Cognito、Facebook 或 Google 等知名身分提供者對使用者進行身分驗證。然後，應用程式可以使用來自這些提供者的使用者身分驗證資訊來取得用來存取 AWS 資源的臨時安全憑證。

使用 OIDC 聯合的建議方法是利用 Amazon Cognito 和 AWS 行動 SDKs。如需詳細資訊，請參閱下列內容：
+ [Amazon Cognito 使用者指南](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html) 
+ [暫時性憑證的常見案例](id_credentials_temp.md#sts-introduction)

### 特殊字元
<a name="policy-vars-specialchars"></a>

有幾個特殊的預先定義的政策變數具有固定值，使您能夠表示具有特殊含意的字元。如果這些特殊字元是字串的一部分，那麼您正在嘗試比對，並且從字面上插入它們會被轉譯。例如，在字串中插入 \$1 星號將被轉譯為萬用字元，比對任何字元，而不是做為文字 \$1。在這些情況下，您可以使用以下預定義的政策變數：
+ **\$1\$1\$1\$1** - 在需要 \$1 星號字元的地方使用。
+ **\$1\$1?\$1** - 在需要 ? 問號字元的地方使用。
+ **\$1\$1\$1\$1** - 在需要 \$1 貨幣符號字元的地方使用。

這些預先定義的政策變數可以在可以使用一般政策變數的任何字串中使用。

## 指定預設值
<a name="policy-vars-default-values"></a>

若要將預設值新增到一個變數，請以單引號 (`' '`) 括住預設值，並使用逗號和空格 (`, `) 分隔變數文字和預設值。

例如，如果主體標記為 `team=yellow`，他們可以存取名為 `amzn-s3-demo-bucket-yellow` 的 `ExampleCorp's` Amazon S3 儲存貯體。具有此資源的政策可讓團隊成員存取其團隊儲存貯體，但不能存取其他團隊的儲存貯體。對於沒有團隊標籤的使用者，它會將 `company-wide` 的預設值設定為儲存貯體名稱。這些使用者只能存取 `amzn-s3-demo-bucket-company-wide` 儲存貯體，其中他們可以檢視廣泛的資訊，例如加入團隊的指示。

```
"Resource":"arn:aws:s3:::amzn-s3-demo-bucket-${aws:PrincipalTag/team, 'company-wide'}"
```

## 如需詳細資訊
<a name="policy-vars-formoreinfo"></a>

如需有關政策的詳細資訊，請參閱以下項目：
+  [中的政策和許可 AWS Identity and Access Management](access_policies.md) 
+  [以身分為基礎的 IAM 政策範例](access_policies_examples.md) 
+  [IAM JSON 政策元素參考](reference_policies_elements.md) 
+  [政策評估邏輯](reference_policies_evaluation-logic.md) 
+  [OIDC 聯合身分](id_roles_providers_oidc.md)

# IAM JSON 政策元素：支援的資料類型
<a name="reference_policies_elements_datatypes"></a>

本部分列出在 JSON 政策中指定值時所支援的資料類型。政策語言不支援每個政策元素的所有類型；有關每個元素的相關資訊，請參閱上一個部分。
+ Strings
+ 編號 (Ints 和 Floats)
+ Boolean
+ Null
+ 清單
+ 地圖
+ 結構 (只是巢狀地圖)

下表將每種資料類型對應至序列化。請注意，所有政策必須採用 UTF-8。如需 JSON 資料類型的資訊，請前往 [RFC 4627](https://datatracker.ietf.org/doc/html/rfc4627)。


****  

| 類型 | JSON | 
| --- | --- | 
|  字串  |  字串  | 
|  整數  |  Number  | 
|  Float  |  Number  | 
|  Boolean  |  true false  | 
|  Null  |  null  | 
|  日期  |  字串遵守 [ISO 8601 的 W3C 描述檔](http://www.w3.org/TR/NOTE-datetime)  | 
|  IpAddress  |  字串遵守 [RFC 4632](https://datatracker.ietf.org/doc/html/rfc4632)  | 
|  列出  |  Array  | 
|  物件  |  物件  | 