

# IAM JSON 策略参考
<a name="reference_policies"></a>

本节介绍了 IAM 中的 JSON 策略的元素、变量和评估逻辑的详细语法、描述和示例。有关更多一般信息，请参阅 [JSON 策略概述](access_policies.md#access_policies-json)。

此参考包括以下部分。
+  [IAM JSON 策略元素参考](reference_policies_elements.md) - 详细了解您在创建策略时可以使用的元素。查看其他策略示例，并了解条件、支持的数据类型以及在各种服务中的使用方式。
+ [策略评估逻辑](reference_policies_evaluation-logic.md) - 本部分介绍 AWS 请求、如何对其进行身份验证，以及 AWS 如何使用策略来确定对资源的访问权限。
+ [IAM JSON 策略语言的语法](reference_policies_grammar.md) - 本部分介绍用于在 IAM 中创建策略的语言的正式语法。
+ [工作职能的 AWS 托管策略](access_policies_job-functions.md) – 本部分列出直接映射到 IT 行业常见工作职能的所有 AWS 托管策略。使用这些策略可以授予执行特定工作职能中的预期任务所需要的权限。这些策略将许多服务的权限整合到一个策略中。
+ [AWS 全局条件上下文密钥](reference_policies_condition-keys.md) - 本部分包含可用于限制 IAM policy 中的权限的所有 AWS 全局条件键的列表。
+ [IAM 和 AWS STS 条件上下文密钥](reference_policies_iam-condition-keys.md) – 本部分包含可用于限制 IAM policy 中的权限的所有 IAM 和 AWS STS 全局条件键的列表。
+ [AWS 服务的操作、资源和条件键](reference_policies_actions-resources-contextkeys.html) — 本部分提供了您可以在 IAM policy 中用作权限的所有 AWS API 操作。它还包括可用于进一步优化请求的特定于服务的条件键。

# 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 和策略的文档链接，请参阅 [使用 IAM 的 AWS 服务](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 policy 版本控制](access_policies_managed-versioning.md)。

`Version` 策略元素指定用于处理策略的语言语法规则。要使用所有可用策略功能，请将以下 `Version` 元素包含在所有策略中的 `Statement` 元素之**外**。

------
#### [ 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` 元素的产品，我们建议您使用 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"，允许所有人担任该角色。如果执行此操作，我们强烈建议您通过其他方法 (如将访问只限定为特定 IP 地址的 `Condition` 元素) 限制能够访问该角色的用户。不要将角色的访问权限开放给所有人！

支持基于资源的策略的其他资源示例包括 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) 或 `"AWS":` 前缀后加账户 ID 构成的简略格式。

例如，给定账户 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)。

[IAM 联合身份用户](#principal-anonymous) — IAM 用户使用 `aws:PrincipalArn` 操作联合身份，为 IAM 用户生成联合身份用户会话主体。当您使用此密钥时，角色会话主体将根据所担任的角色的 ARN 而不是所生成的会话的 ARN 授予权限。由于 AWS 不将条件密钥 ARN 转换为 ID，如果您删除该角色，然后创建一个具有相同名称的新角色，则授予该角色 ARN 的权限将继续存在。基于身份的策略类型，例如权限边界或会话策略，不限制在 `Principal` 元素中使用带通配符（\$1）的 `aws:PrincipalArn` 条件键授予权限，除非基于身份的策略包含显式拒绝。

## 角色会话主体
<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 联合身份验证主体是指使用符合 OIDC 标准的 IDP（也称为 OpenID Provider (OP)）提供的 JSON 网络令牌 (JWT) 调用 AWS STS `AssumeRoleWithWebIdentity` API 以请求临时 AWS 凭证时使用的主体。OIDC 联合身份验证主体可以代表 AWS 账户中的 OIDC IDP，也可以代表 4 个内置身份提供商：Login with Amazon、Google、Facebook 和 [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/role-based-access-control.html)。

已从 OIDC IDP 签发 JWT 的用户、工作负载或系统可使用 JWT 来调用 `AssumeRoleWithWebIdentity`，以请求 IAM 角色的临时 AWS 安全凭证，该 IAM 角色已配置为信任“签发 JWT 的 OIDC IDP”。只要[符合 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)。

在您的角色信任策略中使用此主体类型，以允许或拒绝使用 AWS 账户 中存在的 OIDC IDP 或四个内置 IDP 中的一个来调用 `AssumeRoleWIthWebIdentity` 的权限。要在角色信任策略的 `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 是受信任的网络身份提供商，则角色信任策略 `Principal` 元素中的 OIDC 角色会话 ARN 使用以下格式：

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

有关更多信息，请参阅[在 Amazon Web Services 中配置 OpenID Connect](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，则在保存策略时该 IAM 将 ARN 转换为该用户的唯一主体 ID。如果有人希望通过删除并重新创建用户来提升特权，这样有助于减轻此类风险。您通常不会在控制台中看到这个 ID，因为显示信任策略时它还会反向转换为用户的 ARN。但是，如果您删除角色，这种关系即被打破。即使您重新创建用户，策略也不再适用。这是因为：新用户拥有新的主体 ID，该 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` 元素中指定 *federated user sessions*（联合身份用户会话）。

**重要**  
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 服务。一个*服务主体*是服务的标识符。

可以由 AWS 服务担任的 IAM 角色称为*[服务角色](id_roles.md#iam-term-service-role)*。服务角色必须包括信任策略。*信任策略*是附加到角色的基于资源的策略，这些策略定义了可担任该角色的主体。某些服务角色具有预定义的信任策略。但有些情况下，您必须在信任策略中指定服务主体。IAM policy 中的服务主体不能是 `"Service": "*"`。

**重要**  
服务主体的标识符包括服务名称，通常采用以下格式：  
`service-name.amazonaws.com`

服务主体由服务定义。可以通过以下方式找到某些服务的服务主体：打开 [使用 IAM 的 AWS 服务](reference_aws-services-that-work-with-iam.md)，检查服务在 **Service-linked role**（服务相关角色）列中是否具有 **Yes**，然后打开 **Yes**（是）链接以查看该服务的服务相关角色文档。查找该服务的**服务相关角色权限**部分，查看服务主体。

以下示例显示了一个可以附加到服务角色的策略。该策略可启用两个服务（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`

例如，您有一个 Amazon SNS 主题位于区域 `ap-southeast-1`，一个 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>

您可以在基于资源的策略的 `Principal` 元素或在支持主体的条件键中使用通配符（\$1）指定所有主体。使用 [基于资源的策略](access_policies.md#policies_resource-based) *授予*权限和[条件键](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)来限制策略语句的条件。

**重要**  
我们强烈建议不要在带有 `Allow` 效果的基于资源的策略的 `Principal` 元素中使用通配符（\$1），除非您打算授予公共或匿名访问权限。否则，请在 `Principal` 元素中指定预期的主体、服务或 AWS 账户，然后进一步将访问权限限制在 `Condition` 元素内。对于 IAM 角色信任策略尤其如此，因为它们允许其他主体成为您账户中的主体。

对于基于资源的策略，使用带 `Allow` 效果的通配符（\$1）向所有用户（包括匿名用户）授予访问权限（公共访问权限）。对于账户中的 IAM 用户和角色主体，不需要其他权限。对于其他账户中的主体，他们还必须在其账户中拥有基于身份的权限，以允许他们访问您的资源。这称为 [cross-account access](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`，则可能难以排查多策略类型的影响。我们建议改用带 ARN 条件运算符的 `aws:PrincipalArn` 上下文键。

## 关键点
<a name="notprincipal-key-points"></a>
+ 对于部分 AWS 服务（包括 VPC 端点），基于资源的策略也支持 `NotPrincipal` 元素。基于资源的策略是直接嵌入资源中的策略。您不能在基于 IAM 身份的策略或 IAM 角色信任策略中使用 `NotPrincipal` 元素。
+ 如果基于资源的策略语句包含对附加了权限边界策略的 IAM 用户或角色具有 `Deny` 效果的 `NotPrincipal` 策略元素，则不要使用这种策略语句。具有 `Deny` 效果的 `NotPrincipal` 元素将始终拒绝任何附加了权限边界策略的 IAM 主体，无论 `NotPrincipal` 元素中指定的值为何。这会导致本来可以访问该资源的某些 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 建议使用带有全局条件上下文键的 Deny 语句，以实现更精确的控制和更轻松的故障排除。以下示例显示了使用条件运算符（如 `StringNotEquals` 或 `ArnNotEquals`）拒绝所有主体的访问权限（条件元素中指定的主体除外）的其他方法。

## 使用 IAM 角色的示例场景
<a name="notprincipal-alternative-role"></a>

您可以使用带有 Deny 语句的基于资源的策略来防止所有 IAM 角色（条件元素中指定的角色除外）访问或操作您的资源。这种方法遵循 AWS 安全原则，即显式拒绝始终优先于任何 allow 语句，并且有助于在整个 AWS 基础设施中维护最低权限原则。

我们建议不要使用 `NotPrincipal`，而是使用带有全局条件上下文键和条件运算符（如 [`ArnNotEquals`](reference_policies_elements_condition_operators.md#Conditions_ARN)）的 Deny 语句，来显式允许 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>

您可以使用 Deny 语句来防止所有服务主体（`Condition` 元素中指定的主体除外）访问或操作您的资源。当您需要在 AWS 环境中实施精细访问控制或在不同服务和应用程序之间建立安全边界时，这种方法特别有用。

我们建议不要使用 `NotPrincipal`，而是使用带有全局条件上下文键和条件运算符（如 [`StringNotEquals`](reference_policies_elements_condition_operators.md#Conditions_String)）的 Deny 语句，来显式允许服务主体访问您的资源。以下示例使用 `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 服务访问可用操作、资源和条件键。有关更多信息，请参阅《服务授权参考》中的[用于编程访问的简化 AWS 服务信息](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 Storage 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 与 Allow** 

可在包含 `"Effect": "Allow"` 的语句中使用 `NotAction` 元素来提供对 AWS 服务中所有操作（在 `NotAction` 中指定的操作除外）的访问权限。您可以将它与 `Resource` 元素结合使用以提供策略的范围，从而将允许的操作限制为那些可在指定资源上执行的操作。

以下示例允许用户访问可在任何 S3 资源上执行的所有 Amazon S3 操作，但删除存储桶的操作*除外*。此策略也不允许其他服务中的操作，因为其他服务操作不适用于 S3 资源。

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

有时您可能需要允许访问大量操作。使用 `NotAction` 元素可有效地修改语句，生成更短的操作列表。例如，由于 AWS 提供了如此多的服务，您可能需要创建一个策略，以允许用户执行除访问 IAM 操作之外的所有操作。

下面的示例允许用户访问除 IAM 之外的 AWS 服务中的所有操作。

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

在同一语句或一个策略内的不同语句中使用 `NotAction` 元素和 `"Effect": "Allow"` 时要谨慎。`NotAction` 匹配未显式列出或适用指定资源的所有服务和操作，并且可能导致向用户授予超出您意图的更多权限。

**NotAction 与 Deny**

可在一个语句中将 `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 资源名称（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 资源名称（ARN）标识 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>

您可以使用 ARN 数组在 `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 policy 元素：变量和标签](reference_policies_variables.md)。

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

`NotResource` 是高级策略元素，可明确匹配除指定资源以外的所有资源。使用 `NotResource` 时只列出不应匹配的一些资源，而不是包括将匹配的长资源列表，因此生成的策略较短。这对于在单个 AWS 服务中应用的策略特别有用。

例如，假设您有名为 `HRPayroll` 的组。不应允许 `HRPayroll` 的成员访问除 `HRBucket` 存储桶中的 Amazon S3 文件夹之外的任何 `Payroll` 资源。以下策略显式拒绝访问除所列资源外的所有 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"` 元素一起使用。此语句非常危险，因为它允许对在 `HRBucket` S3 存储桶之外的所有资源执行 AWS 中的所有操作。这甚至允许用户向自己添加策略，从而允许他们访问 `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)向 AWS 发出[请求](intro-structure.md#intro-structure-request)时，AWS 会将请求信息收集到请求上下文中。请求上下文包括有关主体、资源、操作和其他环境属性的信息。策略评估将策略中的属性与请求中发送的属性进行匹配，以评估和授权您可以在 AWS 中执行的操作。

您可以使用 JSON 策略的 `Condition` 元素来针对请求上下文测试特定上下文键。例如，您可以创建一个策略，该策略使用 [aws:CurrentTime](reference_policies_condition-keys.md#condition-keys-currenttime) 上下文键以[允许用户仅在特定的日期范围内执行操作](reference_policies_examples_aws-dates.md)。

以下示例显示了 Martha Rivera 发送停用其 MFA 设备的请求时的请求上下文表示。

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

请求上下文与允许用户删除自己的多重身份验证 (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** - 如果请求者在过去 1 小时或更短时间内已使用 MFA 进行登录，则条件返回 *true*。
+ **False** - 如果请求者在 1 小时前已使用 MFA 进行登录，则条件返回 *false*。
  + **Not present**（不存在）- 如果请求者已使用其 IAM 用户访问密钥在 AWS CLI 或 AWS API 中发出请求，则键不存在。在此情况下，键不存在，并且它不匹配。

**注意**  
在某些情况下，当条件键值不存在时，条件仍然可以返回 true。例如，如果您添加 `ForAllValues` 限定符，则当请求中不存在上下文键时，请求将返回 true。为了防止缺失的上下文键或具有空值的上下文键评估为 true，您可以在策略中包含具有 `false` 值的 [Null 条件运算符](reference_policies_elements_condition_operators.md#Conditions_Null)，以检查上下文键是否存在且其值不为空。

## 条件块
<a name="AccessPolicyLanguage_ConditionBlock"></a>

以下示例显示 `Condition` 元素的基本格式：

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

请求中的值由上下文键表示，在此示例中为 `s3:prefix`。将上下文密钥值与您指定为文本值的值进行比较，例如 `jane/*`。要进行的比较类型由[条件运算符](reference_policies_elements_condition_operators.md)指定（此处为 `StringLike`）。您可以使用典型的布尔比较（例如等于、大于和小于）来创建比较字符串、日期、数字等的条件。使用[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)或 [ARN 运算符](reference_policies_elements_condition_operators.md#Conditions_ARN)时，还可以在上下文键值中使用[策略变量](reference_policies_variables.md)。以下示例包括 `aws:username` 变量。

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

在某些情况下，上下文键可能包含多个值。例如，对 Amazon DynamoDB 的请求可能需要从表返回或更新多个属性。访问 DynamoDB 表的策略可能包含 `dynamodb:Attributes` 上下文键，此键包含请求中列出的所有属性。您可以使用 `Condition` 元素中的集合运算符，根据策略中的允许属性列表测试请求中的多个属性。有关更多信息，请参阅 [多值上下文键的集合运算符](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)。

在请求期间评估策略时，AWS 会将键替换为请求中的相应值。(在此示例中，AWS 将使用请求的日期和时间。) 将对条件进行评估以返回 true 或 false，然后再整体考虑策略是允许还是拒绝请求。

### 一个条件中包含多个值
<a name="Condition-multiple-conditions"></a>

一个 `Condition` 元素可以包含多个条件运算符，而每个条件运算符又可以包含多个上下文键值对。下图对此进行了说明。

![\[两个条件运算符方框图。第一个块包含两个上下文键占位符，每个占位符都有多个值。第二个条件块包含一个具有多个值的上下文键。\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/AccessPolicyLanguage_Condition_Block.diagram.png)


有关更多信息，请参阅 [多值上下文键的集合运算符](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)。

# IAM JSON 策略元素：条件运算符
<a name="reference_policies_elements_condition_operators"></a>

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

在 `Condition` 元素中使用条件运算符来将策略中的条件键和值与请求上下文中的值进行匹配。有关 `Condition` 元素的更多信息，请参阅 [IAM JSON 策略元素：Condition](reference_policies_elements_condition.md)。

您可以在策略中使用的条件运算符取决于您选择的条件键。您可以选择全局条件键或特定于服务的条件键。要了解可用于全局条件键的条件运算符，请参阅[AWS 全局条件上下文密钥](reference_policies_condition-keys.md)。要了解可用于特定于服务的条件键的条件运算符，请参阅 [AWS 服务的操作、资源和条件键](reference_policies_actions-resources-contextkeys.html)并选择要查看的服务。

**重要**  
如果请求上下文中没有您在策略条件中指定的键，则这些值不匹配，并且条件为 *false*。如果策略条件要求该键为*不*匹配，如 `StringNotLike` 或 `ArnNotLike`，并且右键不存在，则条件为 *true*。此逻辑适用于所有条件运算符，但 [...IfExists](#Conditions_IfExists) 和 [Null check](#Conditions_Null) 除外。这些运算符测试请求上下文中是否存在 (exists) 键。

条件运算符可分为以下类别：
+ [String](#Conditions_String)
+ [数值](#Conditions_Numeric)
+ [日期和时间](#Conditions_Date)
+ [布尔值](#Conditions_Boolean)
+ [二进制](#Conditions_BinaryEquals)
+ [IP 地址](#Conditions_IPAddress)
+ [Amazon Resource Name (ARN)](#Conditions_ARN)（仅适用于某些服务。）
+ [… IfExists](#Conditions_IfExists)（检查密钥值是否作为另一检查的一部分存在）
+ [空检查](#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 如何根据请求上下文中的 [aws:username](reference_policies_condition-keys.md#condition-keys-username) 值，并针对不同用户评估此策略。  


| 策略条件 | 请求上下文 | 结果 | 
| --- | --- | --- | 
|  <pre>"StringLike": {<br />  "s3:prefix": [<br />    "home/",<br />    "home/${aws:username}/"<br />  ]<br />}</pre>  | <pre>aws:username:<br />  – martha_rivera</pre>  | <pre>"StringLike": {<br />  "s3:prefix": [<br />    "home/",<br />    "home/martha_rivera/"<br />  ]<br />}</pre>  | 
|  <pre>"StringLike": {<br />  "s3:prefix": [<br />    "home/",<br />    "home/${aws:username}/"<br />  ]<br />}</pre>  |  <pre>aws:username:<br />  – nikki_wolf</pre>  |  <pre>"StringLike": {<br />  "s3:prefix": [<br />    "home/",<br />    "home/nikki_wolf/"<br />  ]<br />}</pre>  | 
|  <pre>"StringLike": {<br />  "s3:prefix": [<br />    "home/",<br />    "home/${aws:username}/"<br />  ]<br />}</pre>  |  请求上下文中没有 `aws:username`。  | 不匹配 | 
有关说明如何使用 `Condition` 元素基于应用程序 ID 和用户 ID 限制资源的访问权限，以用于 OIDC 联合身份验证的策略示例，请参阅 [Amazon S3：允许 Amazon Cognito 用户访问其存储桶中的对象](reference_policies_examples_s3_cognito-bucket.md)。

### 多值字符串条件运算符
<a name="conditions_string_multivalued"></a>

如果请求中的一个键包含多个值，则可以用集合运算符（`ForAllValues` 和 `ForAnyValue`）来限定字符串运算符。有关多个上下文键或值的评估逻辑的更多信息，请参阅 [多值上下文键的集合运算符](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)。


| 条件运算符 | 说明 | 
| --- | --- | 
|  `ForAllValues:StringEquals` `ForAllValues:StringEqualsIgnoreCase`  |  请求中条件键的所有值均须与策略中的至少一个值相匹配。  | 
|  `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` 的情况下，只有在标签包含值为 `preprod` 或 `storage` 的 `environment` 键时，才能附加标签。向运算符追加 `IgnoreCase` 时，允许任何现有标签值的大写（例如 `preprod`、`Preprod` 和 `PreProd`）解析为 true。  
当添加带有 [aws:TagKeys](reference_policies_condition-keys.md#condition-keys-tagkeys) 条件键的 `ForAnyValue` 修饰符时，请求中至少有一个标签键值须与 `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 中的特定组织单位 (OU) 中。AWS Organizations 路径是 Organizations 实体结构的文本表示形式。  
条件的要求是 `aws:ResourceOrgPaths` 包含列出的任何 OU 路径。由于 `aws:ResourceOrgPaths` 为多值条件，因此该策略使用 `ForAllValues:StringNotLike` 运算符来比较 `aws:ResourceOrgPaths` 的值和策略中的 OU 列表。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyS3AccessOutsideMyBoundary",
      "Effect": "Deny",
      "Action": [
        "s3:*"
      ],
      "Resource": "*",
      "Condition": {
        "ForAllValues:StringNotLike": {
          "aws:ResourceOrgPaths": [
            "o-acorg/r-acroot/ou-acroot-mediaou/",
            "o-acorg/r-acroot/ou-acroot-sportsou/*"
          ] 
        }
      }
    }
  ]
}
```
下表显示了 AWS 如何根据请求中的条件键值来评估此策略。  


| 策略条件 | 请求上下文 | 结果 | 
| --- | --- | --- | 
|  <pre>"ForAllValues:StringNotLike": {<br />  "aws:ResourceOrgPaths": [<br />    "o-acorg/r-acroot/ou-acroot-mediaou/",<br />    "o-acorg/r-acroot/ou-acroot-sportsou/*"<br />  ] <br />}</pre>  | <pre>aws:ResourceOrgPaths:<br />  – o-acorg/r-acroot/ou-acroot-sportsou/costcenter/</pre>  | 匹配 | 
|  <pre>"ForAllValues:StringNotLike": {<br />  "aws:ResourceOrgPaths": [<br />    "o-acorg/r-acroot/ou-acroot-mediaou/",<br />    "o-acorg/r-acroot/ou-acroot-sportsou/*"<br />  ] <br />}</pre>  | <pre>aws:ResourceOrgPaths:<br />  – o-acorg/r-acroot/ou-acroot-mediaou/costcenter/</pre>  | 不匹配 | 
|  <pre>"ForAllValues:StringNotLike": {<br />  "aws:ResourceOrgPaths": [<br />    "o-acorg/r-acroot/ou-acroot-mediaou/",<br />    "o-acorg/r-acroot/ou-acroot-sportsou/*"<br />  ] <br />}</pre>  |  请求中没有 `aws:ResourceOrgPaths:`。  | 不匹配 | 

## 数字条件运算符
<a name="Conditions_Numeric"></a>

利用数字条件运算符，您可以构建基于键与整数或小数值的对比来限制访问的 `Condition` 元素。
+  **策略变量** – 不支持
+ **通配符** - 不支持


****  

| 条件运算符 | 说明 | 
| --- | --- | 
|   `NumericEquals`   |  Matching  | 
|   `NumericNotEquals`   |  否定匹配  | 
|   `NumericLessThan`   |  “小于”匹配  | 
|   `NumericLessThanEquals`   |  “小于或等于”匹配  | 
|   `NumericGreaterThan`   |  “大于”匹配  | 
|   `NumericGreaterThanEquals`   |  “大于或等于”匹配  | 

例如，以下语句包含一个 `Condition` 元素，该元素使用 `NumericLessThanEquals` 条件运算符与 `s3:max-keys` 密钥来指定请求者一次*最多*可在 `amzn-s3-demo-bucket` 内列出 10 个对象。

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

****  

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

------

如果请求上下文中没有您在策略条件中指定的键，则这些值不匹配。在此示例中，当您执行 `ListBucket` 操作时，`s3:max-keys` 键始终存在于请求中。如果此策略允许所有 Amazon S3 操作，则只允许包含值小于或等于 10 的 `max-keys` 上下文密钥的操作。

## 日期条件运算符
<a name="Conditions_Date"></a>

利用日期条件运算符，您可以构建基于键与日期/时间值的对比来限制访问的 `Condition` 元素。您可以将这些条件运算符与 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-currenttime](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-currenttime) 键或 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-epochtime](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-epochtime) 键配合使用。您必须指定日期/时间值，且其中一个 [W3C 实现要采用 ISO 8601 日期格式或新纪元 (UNIX) 时间格式](http://www.w3.org/TR/NOTE-datetime)。
+  **策略变量** – 不支持
+ **通配符** - 不支持


****  

| 条件运算符 | 说明 | 
| --- | --- | 
|   `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、AWS API 或 AWS 开发工具包请求中未提供此键。在此示例中，如果 IAM 用户尝试查看或编辑访问键，请求将被拒绝。

## 布尔值条件运算符
<a name="Conditions_Boolean"></a>

利用布尔值条件，您可以构建基于键与 `true` 或 `false` 的对比来限制访问的 `Condition` 元素。

如果一个键包含多个值，则可以用集合运算符（`ForAllValues` 和 `ForAnyValue`）来限定布尔运算符。有关多个上下文键或值的评估逻辑的更多信息，请参阅 [多值上下文键的集合运算符](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)。
+  **策略变量** - [支持](reference_policies_variables.md)
+ **通配符** - 不支持


****  

| 条件运算符 | 说明 | 
| --- | --- | 
|   `Bool`   |  布尔值匹配  | 
|   `ForAllValues:Bool`   |  与布尔数组数据类型一起使用。上下文键值中所有布尔值均须与策略中的布尔值相匹配。 为防止 `ForAllValues` 运算符将缺失的上下文键或带有空值的上下文键评估为“允许”，可以在策略中包含 [Null 条件运算符](#Conditions_Null)。  | 
|   `ForAnyValue: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)。


| 条件运算符 | 说明 | 
| --- | --- | 
|  `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 使用带有 ARN 条件运算符的 `ForAllValues`**  
以下示例使用 `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`。  | 匹配  | 
如果请求中没有上下文键或者上下文键值解析为空数据集（如空字符串），则 `ForAllValues` 限定符也会返回 true。为了防止缺失的上下文键或具有空值的上下文键评估为 true，您可以在策略中包含具有 `false` 值的 [Null 条件运算符](#Conditions_Null)，以检查上下文键是否存在且其值不为空。

## ...IfExists 条件运算符
<a name="Conditions_IfExists"></a>

除 `Null` 条件外，您可在任何条件运算符名称的末尾添加 `IfExists`，例如，`StringLikeIfExists`。如果您是指“如果请求的内容中存在条件键，则依照策略所述来处理键。如果该键不存在，则条件元素的计算结果将为 true。” 语句中其他条件因素仍然可以导致不匹配，但使用 `...IfExists` 检查时没有缺失键。如果您使用带有否定条件运算符（如 `StringNotEqualsIfExists`）的 `"Effect": "Deny"` 元素，则即使条件键不存在，请求仍会被拒绝。

**使用 `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` 条件运算符。这样，仅当条件键存在时才会进行测试。您会读到以下策略内容：If the resource being checked has an "`ec2:InstanceType`" condition key, then allow the action only if the key value begins with `t1.`, `t2.`, or `m3.`. 如果所检查的资源没有改条件键，则无需担心。” 条件键值中的星号 (\$1) 与 `StringLikeIfExists` 条件运算符一起使用时，会被解释为通配符以实现部分字符串匹配。`DescribeActions` 语句包含在控制台中查看实例所需的操作。

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

****  

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

------

下表显示了 AWS 如何根据请求中的条件键值来评估此策略。


| 策略条件 | 请求上下文 | 结果 | 
| --- | --- | --- | 
|  <pre>"StringLikeIfExists": {<br />  "ec2:InstanceType": [<br />    "t1.*",<br />    "t2.*",<br />    "m3.*"<br />  ]<br />}</pre>  | <pre>ec2:InstanceType:<br />  – t1.micro</pre>  | 匹配 | 
|  <pre>"StringLikeIfExists": {<br />  "ec2:InstanceType": [<br />    "t1.*",<br />    "t2.*",<br />    "m3.*"<br />  ]<br />}</pre>  | <pre>ec2:InstanceType:<br />  – m2.micro</pre>  | 不匹配 | 
|  <pre>"StringLikeIfExists": {<br />  "ec2:InstanceType": [<br />    "t1.*",<br />    "t2.*",<br />    "m3.*"<br />  ]<br />}</pre>  |  请求上下文中没有 `ec2:InstanceType`。  | 匹配 | 

## 用于检查条件键是否存在的条件运算符
<a name="Conditions_Null"></a>

使用 `Null` 条件运算符检查授权时是否缺少条件键。在策略语句中使用 `true`（密钥不存在 - 为 null）或 `false`（密钥存在且值不为 null）。

您不能对[策略变量](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_cn/IAM/latest/UserGuide/images/AccessPolicyLanguage_Condition_Block_AND_2.diagram.png)


例如，以下 S3 存储桶策略说明了上图在策略中的表示方式。此条件块包含条件运算符 `StringEquals` 和 `ArnLike`，以及上下文键 `aws:PrincipalTag` 和 `aws:PrincipalArn`。要调用所需的 `Allow` 或 `Deny` 效果，条件元素块中的所有上下文键都必须解析为 true。提出请求的用户必须同时拥有 *department* 和 *role* 这两个主体标签键，包括策略中指定的一个标签键值。此外，发出请求的用户的主体 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_cn/IAM/latest/UserGuide/images/AccessPolicyLanguage_Condition_Block_AND_Negated_NOR_2.diagram.png)


例如，以下 S3 存储桶策略说明了上图在策略中的表示方式。此条件块包含条件运算符 `StringEquals` 和 `ArnNotLike`，以及上下文键 `aws:PrincipalTag` 和 `aws:PrincipalArn`。要调用所需的 `Allow` 或 `Deny` 效果，条件元素块中的所有上下文键都必须解析为 true。提出请求的用户必须同时拥有 *department* 和 *role* 这两个主体标签键，包括策略中指定的一个标签键值。由于 `ArnNotLike` 条件运算符使用否定匹配，发出请求的用户的主体 ARN 不得与策略中指定的任何 `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"
          ]
        },
        "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) 主题每个条件上下文键的描述中。
+ [服务授权参考](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html)中的多值上下文键使用 `ArrayOf` 前缀，后跟条件运算符类别类型，例如 `ArrayOfString` 或 `ArrayOfARN`，表示请求可能包含条件上下文键的多个值。
+ 您可以使用任何可用的单值上下文键作为策略变量，但不能使用多值上下文键作为策略变量。有关策略变量的更多信息，请参阅 [IAM policy 元素：变量和标签](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) 条件运算符，以检查上下文键是否存在且其值不为空。有关示例，请参阅[根据标签键控制访问](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`。  |  **不匹配**  | 

请注意，在最后一个示例中，结果为“无匹配”，因为当上下文键缺失时，空条件检查会阻止匹配。这是避免过于宽松的策略的最佳实践。

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

`ForAnyValue` 限定符测试请求上下文键值集中的至少一个成员是否与策略条件中上下文键值集中的至少一个成员匹配。如果请求中的任何一个上下文键值与策略中的任何一个上下文键值匹配，则条件返回 `true`。如果没有匹配的上下文键或者键不存在，则条件返回 `false`。

**重要**  
当使用具有 `Deny` 效果的 `ForAnyValue` 时，如果上下文键不存在于请求中，则策略的评估结果为**不匹配**。为了确保行为一致，请在策略中添加显式 [`Null`](reference_policies_elements_condition_operators.md#Conditions_Null) 条件检查，以验证上下文键是否存在。有关更多信息，请参阅 [用于检查条件键是否存在的条件运算符](reference_policies_elements_condition_operators.md#Conditions_Null)。

#### AnyValue 集合运算符示例
<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 policy 中，您可以为单值和多值上下文键指定多个值，以便与请求上下文进行比较。以下一组策略示例演示了具有多个上下文键和值的策略条件。

**注意**  
如果您愿意提交策略供本参考指南采用，请使用该页面底部的 **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` 条件运算符来检查请求中的上下文键是否存在且其值不为空，从而防止缺失的上下文键或具有空值的上下文键评估为 true。有关更多信息，请参阅 [用于检查条件键是否存在的条件运算符](reference_policies_elements_condition_operators.md#Conditions_Null)。

**重要**  
该策略不允许进行任何操作。可将此策略与允许特定操作的其他策略结合使用。

**Example 拒绝多值上下文键的单个策略条件值**  
在以下示例中，策略拒绝请求中 `aws:TagKeys` 的值不包含前缀 **key1** 的请求。请求上下文可以有多个值，但由于 `ForAllValues` 条件集合运算符，请求上下文中的所有标签键值都必须以前缀 **key1** 开头。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyRestrictedTags",
      "Effect": "Deny",
      "Action": [
        "iam:Tag*",
        "iam:UnTag*"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "ForAllValues:StringNotLike": {
          "aws:TagKeys": "key1*"
        }
      }
    }
  ]
}
```
下表显示了 AWS 如何根据请求中的条件键值来评估此策略。对于 Deny 语句，匹配表示被拒绝，不匹配表示不拒绝，因此它可能被另一个语句允许。  


| 策略条件 | 请求上下文 | 结果 | 
| --- | --- | --- | 
|  <pre>"ForAllValues:StringNotLike": {<br />  "aws:TagKeys": "key1*"<br />}</pre>  | <pre>aws:TagKeys:<br />  – key1:legal</pre>  |  **不匹配** 可能被另一个语句允许。 | 
| <pre>"ForAllValues:StringNotLike": {<br />  "aws:TagKeys": "key1*"<br />}</pre>  | <pre>aws:TagKeys:<br />  – key1:hr<br />  – key1:personnel</pre>  | **不匹配** 可能被另一个语句允许。 | 
| <pre>"ForAllValues:StringNotLike": {<br />  "aws:TagKeys": "key1*"<br />}</pre>  | <pre>aws:TagKeys:<br />  – key2:audit</pre>  | **匹配** | 
| <pre>"ForAllValues:StringNotLike": {<br />  "aws:TagKeys": "key1*"<br />}</pre>  | 请求上下文中没有 `aws:TagKeys`。  | **匹配** | 

**Example 拒绝多值上下文键的多个策略条件值**  
在以下示例中，策略拒绝请求中 `aws:TagKeys` 的值不包含前缀 **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 如何根据请求中的条件键值来评估此策略。对于 Deny 语句，匹配表示被拒绝，不匹配表示不拒绝，因此它可能被另一个语句允许。  


| 策略条件 | 请求上下文 | 结果 | 
| --- | --- | --- | 
|  <pre>"ForAllValues:StringNotLike": {<br />  "aws:TagKeys": [<br />    "key1*",<br />    "key2*"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – key1:legal</pre>  |  **不匹配** 可能被另一个语句允许。 | 
| <pre>"ForAllValues:StringNotLike": {<br />   "aws:TagKeys": [<br />    "key1*",<br />    "key2*"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – key1:hr<br />  – key1:personnel</pre>  | **不匹配** 可能被另一个语句允许。 | 
| <pre>"ForAllValues:StringNotLike": {<br />   "aws:TagKeys": [<br />    "key1*",<br />    "key2*"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – key1:hr<br />  – key2:audit</pre>  | **不匹配** 可能被另一个语句允许。 | 
| <pre>"ForAllValues:StringNotLike": {<br />   "aws:TagKeys": [<br />    "key1*",<br />    "key2*"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – key3:legal</pre>  | **匹配**  | 
| <pre>"ForAllValues:StringNotLike": {<br />   "aws:TagKeys": [<br />    "key1*",<br />    "key2*"<br />  ]<br />}</pre>  | 请求上下文中没有 `aws:TagKeys`。  | **匹配** | 

## 示例：使用条件集合运算符 ForAnyValue 的拒绝策略
<a name="reference_policies_condition_examples-multi-valued-context-keys-2"></a>

如果任何快照使用策略中指定的标签键之一（`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 如何根据请求中的条件键值来评估此策略。对于 Deny 语句，匹配表示被拒绝，不匹配表示不拒绝，因此它可能被另一个语句允许。


| 策略条件 | 请求上下文 | 结果 | 
| --- | --- | --- | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "webserver"<br />}</pre>  | <pre>aws:TagKeys:<br />  – webserver</pre>  | **匹配** | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "webserver"<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />  – webserver<br />  – test</pre>  |  **匹配** | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "webserver"<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />  – test</pre>  | **不匹配** 可能被另一个语句允许。 | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "webserver"<br />}</pre>  | 请求上下文中没有 `aws:TagKeys`。  | **不匹配** 可能被另一个语句允许。  | 

# 单值上下文键策略示例
<a name="reference_policies_condition_examples-single-valued-context-keys"></a>

以下一组策略示例演示了如何使用单值上下文键创建策略条件。

## 示例：具有单值上下文键的多个条件块
<a name="reference_policies_condition_examples-single-valued-context-keys-1"></a>

条件块有多个条件时，每个条件都有一个上下文键，所有上下文键必须解析为 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` **或** `prod-backup`。
+ `ecs:cluster` 上下文键可确保在 `default1` **或** `default2` ARN ECS 集群上运行任务。

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

****  

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

------

下表显示了 AWS 如何根据请求中的条件键值来评估此策略。


| 策略条件 | 请求上下文 | 结果 | 
| --- | --- | --- | 
|  <pre>"StringEquals": {<br />  "aws:RequestTag/environment": [<br />    "production",<br />    "prod-backup"<br />  ]<br />},<br />"ArnEquals": {<br />  "ecs:cluster": [<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default1",<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default2"<br />  ]<br />}</pre>  | <pre>aws:RequestTag: environment:production<br />ecs:cluster:<br />  arn:aws:ecs:us-east-1:111122223333:cluster/default1</pre>  | 匹配 | 
| <pre>"StringEquals": {<br />  "aws:RequestTag/environment": [<br />    "production",<br />    "prod-backup"<br />  ]<br />},<br />"ArnEquals": {<br />  "ecs:cluster": [<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default1",<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default2"<br />  ]<br />}</pre>  | <pre>aws:RequestTag: environment:prod-backup<br />ecs:cluster:<br />  arn:aws:ecs:us-east-1:111122223333:cluster/default2</pre>  | 匹配 | 
| <pre>"StringEquals": {<br />  "aws:RequestTag/environment": [<br />    "production",<br />    "prod-backup"<br />  ]<br />},<br />"ArnEquals": {<br />  "ecs:cluster": [<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default1",<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default2"<br />  ]<br />}</pre>  | <pre>aws:RequestTag: webserver:production<br />ecs:cluster:<br />  arn:aws:ecs:us-east-1:111122223333:cluster/default2</pre>  | 不匹配 | 
| <pre>"StringEquals": {<br />  "aws:RequestTag/environment": [<br />    "production",<br />    "prod-backup"<br />  ]<br />},<br />"ArnEquals": {<br />  "ecs:cluster": [<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default1",<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default2"<br />  ]<br />}</pre>  |  请求上下文中没有 `aws:RequestTag`。 <pre>ecs:cluster<br />  arn:aws:ecs:us-east-1:111122223333:cluster/default2</pre>  | 不匹配 | 

# IAM policy 元素：变量和标签
<a name="reference_policies_variables"></a>

在编写策略时，如果您不知道资源或条件键的精确值，可以使用 AWS Identity and Access Management (IAM) policy 变量作为占位符。

**注意**  
如果 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 policy 中，您可通过很多操作为要控制其访问权限的特定资源指定名称。例如，以下策略允许用户为 `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 policy 版本控制](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 的这一部分出现在第五个冒号 (:) 之后。不能使用变量来替换 ARN 中第五个冒号之前的部分，例如服务或账户。有关 ARN 格式的更多信息，请参见[IAM ARN](reference_identifiers.md#identifiers-arns)。

要将 ARN 的一部分替换为标签值，请用 `${ }` 将前缀和键名称括起来。例如，以下 Resource 元素将仅指向名称等于请求用户的 department 标签中的值的存储桶。

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

许多 AWS 资源使用包含用户创建的名称的 ARN。以下 IAM policy 确保只有 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 policy 的条件元素中使用没有值的变量时，[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 账户根用户 的凭证发出请求。以下表为不同类型的主体显示这些键的值。


****  

| 主体 | `aws:username` | `aws:userid` | `aws:PrincipalType` | 
| --- | --- | --- | --- | 
| AWS 账户根用户 | (不存在) | AWS 账户 ID | Account | 
| IAM 用户 | IAM 用户名称 | [唯一 ID](reference_identifiers.md#identifiers-unique-ids) | User | 
| AWS STS 联合用户主体 | (不存在) | 账户:调用者指定的名称 | FederatedUser | 
| OIDC 联合主体 有关在使用 Web 联合身份验证时可用的策略键的信息，请参阅[AWS OIDC 联合身份验证的可用键](reference_policies_iam-condition-keys.md#condition-keys-wif)。 | (不存在) |   *角色 ID*：*调用方指定的角色名称*  其中，`role-id` 是[角色的唯一 ID](reference_identifiers.md#identifiers-unique-ids)，调用方指定的角色名称由传递给 AssumeRoleWithWebIdentity 请求的 [RoleSessionName parameter](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)。 | (不存在) |  *角色 ID*：*调用方指定的角色名称* 其中，`role-id` 是[角色的唯一 ID](reference_identifiers.md#identifiers-unique-ids)，调用方指定的角色名称由 [Name 属性](id_roles_providers_create_saml_assertions.md)设置为 https://aws.amazon.com/SAML/attributes/RoleSessionName 的 Attribute 元素指定。  | AssumedRole | 
| 担任的角色 | (不存在) |  *角色 ID*：*调用方指定的角色名称* 其中，`role-id` 是[角色的唯一 ID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids)，调用方指定的角色名称由传递给 AssumeRole 请求的 [RoleSessionName 参数](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html#API_AssumeRole_RequestParameters)指定。  | AssumedRole | 
| 分配给 Amazon EC2 实例的角色 | (不存在) |  *角色 ID*:*EC2 实例 ID* 其中 `role-id` 是[角色的唯一 ID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids)，EC2 实例 ID 是 [EC2 实例的唯一标识符](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstances.html)。  | AssumedRole | 
| 匿名调用者（仅限 Amazon SQS、Amazon SNS 和 Amazon S3） | (不存在) | anonymous | Anonymous | 

对于此表中的项目请注意以下事项：
+ *不存在* 表示值在当前请求信息中不存在，并且匹配该值的任何尝试都失败并导致语句无效。
+ *角色 ID* 是在创建时分配给每个角色的唯一标识符。可以使用 AWS CLI 命令显示角色 ID：`aws iam get-role --role-name rolename`
+ *调用者指定的名称*和*调用者指定的角色名称* 是进行调用以获取临时凭证时调用进程 (例如应用程序或服务) 传递的名称。
+ *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 移动 SDK。有关更多信息，请参阅下列内容：
+ [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 策略中指定值时支持的数据类型。策略语言并不针对每个策略元素支持所有类型；有关各个元素的信息，请参阅前面各部分。
+ 字符串
+ 数字 (整数和浮动值)
+ 布尔值
+ Null
+ Lists
+ 地图
+ 结构 (仅为嵌套映射)

以下图表将各个数据类型映射至串行化。注意所有策略必须为 UTF-8。有关 JSON 数据类型的信息，请转到 [RFC 4627](https://datatracker.ietf.org/doc/html/rfc4627)。


****  

| Type | JSON | 
| --- | --- | 
|  字符串  |  字符串  | 
|  整数  |  数字  | 
|  浮点型  |  数字  | 
|  布尔值  |  真假  | 
|  Null  |  null  | 
|  日期  |  字符串，符合 [W3C Profile of ISO 8601](http://www.w3.org/TR/NOTE-datetime)  | 
|  IpAddress  |  字符串，符合 [RFC 4632](https://datatracker.ietf.org/doc/html/rfc4632)  | 
|  列表  |  数组  | 
|  对象  |  对象  | 

# 策略评估逻辑
<a name="reference_policies_evaluation-logic"></a>

在主体尝试使用 AWS 管理控制台、AWS API 或 AWS CLI 时，该主体将向 AWS 发送*请求*。在 AWS 服务收到请求时，AWS 会完成几个步骤来确定是允许还是拒绝该请求。

1. **身份验证** - AWS 首先对发出请求的主体进行身份验证（如有必要）。有一些服务（如 Amazon S3）不需要此步骤，它们允许来自匿名用户的某些请求。

1. **[处理请求上下文](reference_policies_evaluation-logic_policy-eval-reqcontext.md)** - AWS 处理在请求中收集的信息以确定应用于请求的策略。

1. **[AWS 执行代码逻辑如何评估允许或拒绝访问的请求](reference_policies_evaluation-logic_policy-eval-denyallow.md)**：AWS 会评估所有策略类型，策略的顺序会影响策略的评估方式。随后，AWS 根据请求上下文处理策略，决定是允许还是拒绝请求。

## 评估基于身份的策略以及基于资源的策略
<a name="policy-eval-basics-id-rdp"></a>

基于身份的策略和基于资源的策略向策略所附加到的身份或资源授予权限。在 IAM 实体（用户或角色）请求访问同一账户中的资源时，AWS 评估基于身份的策略和基于资源的策略授予的所有权限。生成的权限是指两种类型的权限的联合。如果基于身份的策略和/或基于资源的策略允许此操作，则 AWS 允许执行该操作。其中任一项策略中的显式拒绝将覆盖允许。

![\[评估基于身份的策略和基于资源的策略\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/permissions_policies_effective.png)


## 评估具有权限边界的基于身份的策略
<a name="policy-eval-basics-id-bound"></a>

在 AWS 评估用户的基于身份的策略和权限边界时，生成的权限是这两种类别的交集。这意味着，当您通过现有基于身份的策略向用户添加权限边界时，您可能会减少用户可以执行的操作。或者，当您从用户删除权限边界时，您可能会增加用户可以执行的操作。其中任一项策略中的显式拒绝将覆盖允许。要查看有关如何使用权限边界评估其他策略类型的信息，请参阅[评估具有边界的有效权限](access_policies_boundaries.md#access_policies_boundaries-eval-logic)。

![\[评估基于身份的策略和权限边界\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/permissions_boundary.png)


## 评估具有 AWS Organizations SCP 或 RCP 的基于身份的策略
<a name="policy-eval-basics-id-scp"></a>

当一个用户属于组织成员账户且能够访问未配置基于资源的策略的资源，生成的权限是该用户的策略、服务控制策略（SCP）和资源控制策略（RCP）的交集。这意味着所有三种策略类型均必须允许某项操作。基于身份的策略、SCP 或 RCP 中的显式拒绝会覆盖该允许。

![\[评估基于身份的策略和 SCP 或 RCP\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/permissions_scp-idp.png)


您可以在 AWS Organizations 中了解[您的账户是否为某个组织的成员](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_details.html#orgs_view_account)。组织成员可能会受 SCP 或 RCP 的影响。要使用 AWS CLI 命令或 AWS API 操作查看该数据，您必须具有 AWS Organizations 实体的 `organizations:DescribeOrganization` 操作的权限。您必须具有额外的权限才能在 AWS Organizations 控制台中执行该操作。要了解 SCP 或 RCP 是否拒绝访问特定的请求或更改您的有效权限，请与您的 AWS Organizations 管理员联系。

# 处理请求上下文
<a name="reference_policies_evaluation-logic_policy-eval-reqcontext"></a>

在 AWS 评估和授权请求时，它会将请求信息汇编到*请求上下文*中。请求上下文包含可用于策略评估的任何信息。
+ **主体**：发送请求的用户、角色或联合用户主体。有关主体的信息包括与该主体关联的策略。
+ **操作** – 主体希望执行的一个或多个操作。
+ **资源** – 对其执行操作的一个或多个 AWS 资源对象。
+ **资源数据** – 与请求的资源相关的数据。这可能包括 DynamoDB 表名称或 Amazon EC2 实例上的标签等信息。
+ **环境数据** – 有关 IP 地址、用户代理、SSL 启用状态或当天时间的信息。

将此信息与适用的策略进行比较，以确定是允许还是拒绝该请求。您可以使用**主体**、**操作**、**资源**和**条件** (PARC) 模型组织此属性信息，以更好地了解如何评估 AWS 策略。

## 了解 PARC 模型
<a name="reqcontext_parc-model"></a>

PARC 模型基于策略语言中的四个 JSON 元素来表示请求上下文：
+ [Principal](reference_policies_elements_principal.md) – 发出请求的实体。主体代表人类用户或编程工作负载，可对身份进行验证，然后向其授予在 AWS 账户 中执行操作的权限。
+ [Action](reference_policies_elements_action.md) – 正在执行的操作。该操作通常会映射到 API 操作。
+ [Resource](reference_policies_elements_resource.md) – 正在对其执行操作的 AWS 资源。
+ [Condition](reference_policies_elements_condition.md) – 允许请求必须满足的附加约束。

下面展示了 PARC 模型如何表示请求上下文的示例：

```
Principal: AIDA123456789EXAMPLE
Action: s3:CreateBucket
Resource: arn:aws:s3:::amzn-s3-demo-bucket1
Context:
- aws:UserId=AIDA123456789EXAMPLE:BobsSession
- aws:PrincipalAccount=123456789012
- aws:PrincipalOrgId=o-example
- aws:PrincipalARN=arn:aws:iam::AIDA123456789EXAMPLE:role/HR
- aws:MultiFactorAuthPresent=true
- aws:CurrentTime=...
- aws:EpochTime=...
- aws:SourceIp=...
- aws:PrincipalTag/dept=123
- aws:PrincipalTag/project=blue
- aws:RequestTag/dept=123
```

## 请求上下文的重要性
<a name="reqcontext_importance"></a>

理解请求上下文及其与策略评估的交互方式对于以下方面至关重要：
+ 排查访问问题 
+ 设计有效且安全的策略
+ 了解策略授予的权限的全部范围
+ 预测不同情景下的策略评估结果

通过使用 PARC 模型可视化请求上下文，您可以更轻松地了解 AWS 如何做出授权决策并更有效地设计策略。

## AWS 如何使用请求上下文
<a name="reqcontext_usage"></a>

评估策略时，AWS 会将请求上下文中的信息与所有适用策略中指定的信息进行比较。这包括基于身份的策略、基于资源的策略、IAM 权限边界、组织 SCP、组织 RCP 和会话策略。

对于每种策略类型，AWS 使用请求上下文来检查以下各项：
+ 根据主体，策略是否适用于请求。
+ 是否允许对指定的资源执行请求的操作。
+ 请求上下文是否满足策略中指定的任何条件。

AWS 如何评估策略取决于适用于请求上下文的策略类型。可在单个 AWS 账户中使用这些策略类型。有关这些策略类型的更多信息，请参阅[AWS Identity and Access Management 中的策略和权限](access_policies.md)。要了解 AWS 如何评估跨账户访问策略，请参阅[跨账户策略评估逻辑](reference_policies_evaluation-logic-cross-account.md)。
+ **AWS Organizations 资源控制策略（RCP）**：AWS Organizations RCP 指定组织或组织单位（OU）中账户内的资源的最大权限。RCP 适用于成员账户中的资源，并影响主体的有效权限，包括 AWS 账户根用户，无论主体是否属于您的组织。RCP 不适用于组织管理账户中的资源和服务相关角色进行的调用。如果存在 RCP，则基于身份和基于资源的策略授予您的成员账户中的资源的权限仅在 RCP 允许操作时才有效。
+ **AWS Organizations 服务控制策略（SCP）**：AWS Organizations SCP 指定组织或组织单位（OU）中账户内的主体的最大权限。SCP 适用于成员账户中的主体，包括每个 AWS 账户根用户。如果 SCP 存在，仅当 SCP 允许该操作时，基于身份和基于资源的策略向成员账户中的主体授予的权限才有效。唯一的例外是组织管理账户中的主体和服务相关角色。
+ **基于资源的策略**：基于资源的策略为策略中指定的主体授予权限。权限定义主体可以对策略附加到的资源执行哪些操作。
+ **IAM 权限边界** – 权限边界是一项功能，它设置基于身份的策略可以授予 IAM 实体（用户或角色）的最大权限。当您设置实体的权限边界时，该实体只能执行其基于身份的策略和其权限边界同时允许的操作。某些情况下，权限边界中的隐式拒绝可能会限制由基于资源的策略所授予的权限。有关更多信息，请参阅 [AWS 执行代码逻辑如何评估允许或拒绝访问的请求](reference_policies_evaluation-logic_policy-eval-denyallow.md)。
+ **基于身份的策略** — 基于身份的策略附加到 IAM 身份（用户、用户组或角色）并向 IAM 实体（用户和角色）授予权限。如果仅基于身份的策略适用于请求，则 AWS 检查所有这些策略以找到至少一个 `Allow` 。
+ **会话策略**：会话策略是一些策略，在以编程方式为角色或联合用户会话创建临时会话时，这些策略将作为参数进行传递。要以编程方式创建角色会话，请使用 `AssumeRole*` API 操作之一。在执行该操作并传递会话策略时，生成的会话的权限是 IAM 实体的基于身份的策略与会话策略的交集。要创建联合用户会话，您需要使用 IAM 用户的访问密钥以编程方式调用 `GetFederationToken` API 操作。有关更多信息，请参阅 [会话策略](access_policies.md#policies_session)。

请记住，任一项策略中的显式拒绝将覆盖允许。

**注意**  
借助 **AWS Organizations 声明式策略**，您可在整个组织中针对给定 AWS 服务 大规模集中声明和强制执行所需的配置。声明式策略直接应用于服务级别，因此这些策略不会直接影响策略评估请求，也不会包含在请求上下文中。有关更多信息，请参阅《AWS Organizations User Guide》中的 [Declarative policies](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)。

## 使用 PARC 模型的策略评估示例
<a name="reqcontext_example"></a>

为了说明请求上下文如何与策略评估进行交互，请考虑示例策略：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:CreateBucket",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalTag/dept": "123"
        }
      }
    }
  ]
}
```

------

在此示例中，仅当请求上下文包含 `aws:PrincipalTag/dept` 值“123”且资源与 `amzn-s3-demo-bucket1` 存储桶名称匹配时，策略才会允许 `CreateBucket` 操作。下表显示了 AWS 如何使用请求上下文来评估此策略并做出授权决策。


| Policy | 请求上下文 | 评估结果 | 
| --- | --- | --- | 
| <pre>"StringEquals": {<br />    "aws:PrincipalTag/dept": "123"<br />}</pre>  |  <pre>Principal: AIDA123456789EXAMPLE<br />Action: s3:CreateBucket<br />Resource: arn:aws:s3:::amzn-s3-demo-bucket1<br />Context:  <br />    - aws:PrincipalTag/dept=123</pre>  | **匹配** | 
| <pre>"StringEquals": {<br />    "aws:PrincipalTag/dept": "123"<br />}</pre>  |  <pre>Principal: AIDA123456789EXAMPLE<br />Action: s3:DeleteBucket<br />Resource: arn:aws:s3:::amzn-s3-demo-bucket1<br />Context:  <br />    - aws:PrincipalTag/dept=123</pre>  | **不匹配** | 
| <pre>"StringEquals": {<br />    "aws:PrincipalTag/dept": "123"<br />}</pre>  |  <pre>Principal: AIDA123456789EXAMPLE<br />Action: s3:CreateBucket<br />Resource: arn:aws:s3:::amzn-s3-demo-bucket1<br />Context:  <br />    - aws:PrincipalTag/dept=321</pre>  | **不匹配** | 
| <pre>"StringEquals": {<br />    "aws:PrincipalTag/dept": "123"<br />}</pre>  |  <pre>Principal: AIDA123456789EXAMPLE<br />Action: s3:CreateBucket<br />Resource: arn:aws:s3:::amzn-s3-demo-bucket1<br />Context:</pre> 请求中没有 `aws:PrincipalTag`。  | **不匹配** | 

# AWS 执行代码逻辑如何评估允许或拒绝访问的请求
<a name="reference_policies_evaluation-logic_policy-eval-denyallow"></a>

AWS 执行代码决定是应该允许还是拒绝发送到 AWS 的请求。AWS 评估适用于请求上下文的所有策略。下面概述了 AWS 策略评估逻辑。
+ 默认情况下，除 AWS 账户根用户 外，所有请求都被隐式否定，具有完全访问权限。
+ 请求必须由遵循以下被允许的评估逻辑的策略或一组策略明确允许。
+ 显式拒绝将会覆盖显式允许。

策略评估可能会有所不同，具体视请求是在单个账户内还是跨账户请求中而定。有关如何针对单一账户中的 IAM 角色或用户作出策略评估决策的详细信息，请参阅[对单个账户内的请求进行策略评估](reference_policies_evaluation-logic_policy-eval-basics.md)。有关如何针对跨账户请求作出策略评估决策的详细信息，请参阅[跨账户策略评估逻辑](reference_policies_evaluation-logic-cross-account.md)。
+ **Deny evaluation**（拒绝评估）- 默认情况下，所有请求都被拒绝。这称为[隐式拒绝](reference_policies_evaluation-logic_AccessPolicyLanguage_Interplay.md)。AWS 执行代码评估账户中应用于请求的所有策略。其中包含 AWS Organizations SCP 和 RCP、基于资源的策略、基于身份的策略、IAM 权限边界和会话策略。在所有这些策略中，执行代码查找应用于请求的 `Deny` 语句。这称为[显式拒绝](reference_policies_evaluation-logic_AccessPolicyLanguage_Interplay.md)。如果执行代码找到一个适用的显式拒绝，则该执行代码将返回 **Deny** 的最终决定。如果没有显式拒绝，则执行代码评估会继续。
+ **AWS Organizations RCP**：执行代码会评估适用于请求的 AWS Organizations 资源控制策略（RCP）。RCP 适用于附加了 RCP 的账户的资源。如果执行代码没有在 RCP 中找到任何适用的 `Allow` 语句，则执行代码将返回 **Deny** 的最终决定。请注意，当启用 RCP 时，系统会自动创建一个名为 `RCPFullAWSAccess` 的 AWS 托管式策略，并将其附加到组织中的每个实体，包括根、每个 OU 和 AWS 账户。`RCPFullAWSAccess` 无法分离，因此始终将有一个 `Allow` 语句。如果没有 RCP，或者 RCP 允许所请求的操作，则执行代码评估继续适用。
+ **AWS Organizations SCP**：执行代码会评估适用于请求的 AWS Organizations 服务控制策略（SCP）。SCP 适用于附加 SCP 的账户的主体。如果执行代码没有在 SCP 中找到任何适用的 `Allow` 语句，则执行代码将返回 **Deny** 的最终决定。如果没有 SCP，或者 SCP 允许所请求的操作，则执行代码评估继续。
+ **基于资源的策略** — 在同一账户中，基于资源的策略会对策略评估产生不同的影响，具体取决于访问资源的主体类型以及基于资源的策略中允许的主体。根据主体的类型，`Allow` 在基于资源的策略中可能会导致最终决定 `Allow`，即使基于身份的策略、权限边界或会话策略中存在隐式拒绝。

  对于大多数资源，您只需要在基于身份的策略或基于资源的策略中明确 `Allow` 主体访问权限。[IAM 角色信任策略](access_policies-cross-account-resource-access.md#access_policies-cross-account-delegating-resource-based-policies)和 [KMS 密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)是此逻辑的例外，因为它们必须明确允许[主体](reference_policies_elements_principal.md)的访问权限。非 IAM 和 AWS KMS 的基于资源的服务策略也可能要求在同一账户中作出显式 `Allow` 声明，才能授予访问权限。有关详细信息，请参阅您使用的特定服务的文档。

  对于单个账户策略评估请求，当指定的主体是 IAM 用户、IAM 角色或会话主体时，基于资源的策略逻辑会与其他策略类型有所不同。会话主体包括 [IAM 角色会话](reference_policies_elements_principal.md#principal-role-session)或 [AWS STS 联合用户主体](reference_policies_elements_principal.md#sts-session-principals)。如果基于资源的策略直接向提出请求的 IAM 用户或会话主体授予权限，则基于身份的策略、权限边界或会话策略中的隐式拒绝不会影响最终决策。
  + **IAM 角色** — 授予 IAM 角色 ARN 权限的基于资源的策略受权限边界或会话策略中隐式拒绝的限制。可以在 Principal 元素或 `aws:PrincipalArn` 条件键中指定角色 ARN。在这两种情况下，提出请求的主体都是 **IAM 角色会话**。

    权限边界和会话策略不限制在 Principal 元素中使用带通配符 (\$1) 的 `aws:PrincipalArn` 条件键授予权限，除非基于身份的策略包含显式拒绝。有关更多信息，请参阅 [IAM 角色主体](reference_policies_elements_principal.md#principal-roles)。

    **角色示例 ARN**

    ```
    arn:aws:iam::111122223333:role/examplerole
    ```
  + **IAM 角色会话**— 在同一账户中，向 IAM 角色会话 ARN 授予权限的基于资源的策略直接向担任的角色会话授予权限。直接授予会话的权限不受基于身份的策略、权限边界或会话策略中的隐式拒绝的限制。当您担任角色并提出请求时，发出请求的主体是 IAM 角色会话 ARN，而不是角色本身的 ARN。有关更多信息，请参阅 [角色会话主体](reference_policies_elements_principal.md#principal-role-session)。

    **示例角色会话 ARN**

    ```
    arn:aws:sts::111122223333:assumed-role/examplerole/examplerolesessionname
    ```
  + **IAM 用户** – 在同一账户中，向 IAM 用户 ARN（不是联合身份用户会话）授予权限的基于资源的策略不受基于身份的策略或权限边界中隐式拒绝的限制。

    **示例 IAM 用户 ARN**

    ```
    arn:aws:iam::111122223333:user/exampleuser
    ```
  + **AWS STS 联合用户主体** – 联合用户会话是通过调用 [`GetFederationToken`](id_credentials_temp_request.md#api_getfederationtoken) 创建的会话。当联合身份用户发出请求时，发出请求的主体是联合身份用户 ARN，而不是联合身份的 IAM 用户的 ARN。在同一个账户中，将权限授予联合身份用户 ARN 的基于资源的策略直接将权限授予会话。直接授予会话的权限不受基于身份的策略、权限边界或会话策略中的隐式拒绝的限制。

    但是，如果基于资源的策略向联合身份的 IAM 用户的 ARN 授予权限，则联合身份用户在会话期间发出的请求将受权限边界或会话策略中隐式拒绝的限制。

    **示例联合用户会话 ARN**

    ```
    arn:aws:sts::111122223333:federated-user/exampleuser
    ```
+ **基于身份的策略**：执行代码会检查主体的基于身份的策略。对于 IAM 用户，这包括用户策略和来自用户所属组的策略。如果没有基于身份的策略或者基于身份的策略中没有允许请求动作的语句，那么请求被隐式否定，执行代码返回 **Deny** 的最终决定。如果任何适用的基于身份的策略中的任何语句都允许请求的动作，则代码评估继续适用。
+ **IAM 权限边界**：执行代码会检查主体使用的 IAM 实体是否具有权限边界。如果用于设置权限边界的策略不允许所请求的操作，则请求会被隐式拒绝。执行代码将返回**拒绝**最终决定。如果没有权限边界，或者权限边界允许所请求的操作，则代码评估继续适用。
+ **会话策略**：执行代码检查主体是否为会话主体。会话主体包括 IAM 角色会话或者 AWS STS 联合用户会话。如果主体不是会话主体，执行代码将返回 **Allow** 的最终决定。

  对于会话主体，执行代码检查请求中是否传递了会话策略。您可以传递会话策略，同时使用 AWS CLI 或 AWS API 为某个角色或 AWS STS 联合用户主体获取临时凭证。如果您没有传递会话策略，则会创建默认会话策略，执行代码返回 **Allow** 的最终决定。
  + 如果会话策略存在但不允许所请求的操作，则请求会被隐式拒绝。执行代码将返回**拒绝**最终决定。
  + 执行代码将检查主体是否为角色会话。如果主体是角色会话，那么请求是**已允许**。否则，请求被隐式拒绝，执行代码返回 **Deny** 的最终决定。
  + 如果会话策略在场并允许请求的动作，那么执行代码返回一个 **Allow** 的最终决策。

# 对单个账户内的请求进行策略评估
<a name="reference_policies_evaluation-logic_policy-eval-basics"></a>

## 对 IAM 角色进行策略评估
<a name="policy-eval-basics-single-account-role"></a>

以下流程图详细介绍了如何针对单一账户中的 IAM 角色作出策略评估决策。

![\[单个账户中 IAM 角色的评估流程图\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/PolicyEvaluationSingleAccountRole.png)


## 对 IAM 用户进行策略评估
<a name="policy-eval-basics-single-account-user"></a>

以下流程图详细介绍了如何针对单一账户中的 IAM 用户作出策略评估决策。

![\[单个账户中 IAM 用户的评估流程图\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/PolicyevaluationSingleAccountUser.png)


## 基于身份的策略和基于资源的策略评估示例
<a name="reference_policies_evaluation-logic_policies_evaluation_example"></a>

策略的最常见类型是基于身份的策略和基于资源的策略。当请求访问资源时，AWS 会评估策略为同一账户中**至少一个允许**所授予的所有权限。任一项策略中的显式拒绝将覆盖允许。

**重要**  
如果同一账户中基于身份的策略或基于资源的策略其中一个允许该请求，而另一个不允许，仍可允许该请求。

假定 Carlos 具有用户名 `carlossalazar`，他尝试将文件保存到 `amzn-s3-demo-bucket-carlossalazar-logs` Amazon S3 存储桶。

还假定将以下策略附加到 `carlossalazar` IAM 用户。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowS3ListRead",
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:GetAccountPublicAccessBlock",
                "s3:ListAccessPoints",
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Sid": "AllowS3Self",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar/*",
                "arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar"
            ]
        },
        {
            "Sid": "DenyS3Logs",
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::*log*"
        }
    ]
}
```

------

此策略中的 `AllowS3ListRead` 语句允许 Carlos 查看账户中的所有存储桶的列表。`AllowS3Self` 语句允许 Carlos 完全访问与其用户名同名的存储桶。`DenyS3Logs` 语句拒绝 Carlos 访问名称中包含 `log` 的任何 S3 存储桶。

此外，以下基于资源的策略（称为存储桶策略）附加到 `amzn-s3-demo-bucket-carlossalazar` 存储桶。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/carlossalazar"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar/*",
                "arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar"
            ]
        }
    ]
}
```

------

此策略指定只有 `carlossalazar` 用户可以访问 `amzn-s3-demo-bucket-carlossalazar` 存储桶。

当 Carlos 请求将文件保存到 `amzn-s3-demo-bucket-carlossalazar-logs` 存储桶时，AWS 将确定应用于请求的策略。在此示例中，仅基于身份的策略和基于资源的策略适用。这些都是权限策略。由于没有任何权限边界适用，评估逻辑将减少为以下逻辑。

![\[评估流程图\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/EffectivePermissionsShort.png)


AWS 首先检查应用于请求上下文的 `Deny` 语句。它找到一个，因为基于身份的策略显式拒绝 Carlos 访问用于日志记录的任何 S3 存储桶。拒绝 Carlos 访问。

假设他随后意识到自己的错误，尝试将文件保存到 `amzn-s3-demo-bucket-carlossalazar` 存储桶。AWS 检查 `Deny` 语句，但未找到。然后，它检查权限策略。基于身份的策略和基于资源的策略均允许请求。因此，AWS 允许请求。如果其中任何一个显式拒绝了语句，则将拒绝请求。如果其中一种策略类型允许请求，而另一种不允许，则仍允许请求。

# 跨账户策略评估逻辑
<a name="reference_policies_evaluation-logic-cross-account"></a>

您可以允许一个账户中的主体访问另一个账户中的资源。这称为 cross-account access（跨账户存取）。当您允许跨账户访问时，主体所在的账户称为*受信任* 账户。资源所在的账户是*信任* 账户。

要允许跨账户访问，请将基于资源的策略附加到您要共享的资源。您还必须向在请求中充当主体的身份附加基于身份的策略。信任账户中基于资源的策略必须指定受信任账户中有权访问资源的主体。您可以指定整个账户或其 IAM 用户、AWS STS 联合用户主体、IAM 角色或代入角色会话。您还可以将 AWS 服务指定为主体。有关更多信息，请参阅 [如何指定主体](reference_policies_elements_principal.md#Principal_specifying)。

主体的基于身份的策略必须允许对信任服务中的资源进行请求的访问。您可以通过指定资源的 ARN 来执行此操作。

在 IAM 中，您可以将基于资源的策略附加到 IAM 角色，以允许其他账户中的主体代入该角色。角色的基于资源的策略称为角色信任策略。代入该角色之后，允许的主体可以使用生成的临时凭证访问您账户中的多个资源。此访问权限在角色的基于身份的权限策略中定义。如需了解使用角色允许跨账户访问与使用其他基于资源的策略允许跨账户访问之间的不同之处，请参阅[IAM 中的跨账户资源访问](access_policies-cross-account-resource-access.md)。

**重要**  
其他服务可能会影响策略评估逻辑。例如，AWS Organizations 支持可应用于一个或多个账户中的主体和资源的[服务控制策略](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)和[资源控制策略](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)。AWS Resource Access Manager 支持[策略片段](https://docs.aws.amazon.com/ram/latest/userguide/permissions.html)，用于控制允许主体对与其共享的资源执行哪些操作。

## 确定是否允许跨账户请求
<a name="policy-eval-cross-account"></a>

对于跨账户请求，受信任账户 `AccountA` 中的请求者必须具有基于身份的策略。该策略必须允许他们向信任账户 `AccountB` 中的资源发出请求。此外，`AccountB` 中的基于资源的策略必须允许 `AccountA` 中的请求者访问资源。

当您发出跨账户请求时，AWS 会执行两个评估。AWS 评估信任账户和受信任账户中的请求。有关如何在单个账户中评估请求的更多信息，请参阅[AWS 执行代码逻辑如何评估允许或拒绝访问的请求](reference_policies_evaluation-logic_policy-eval-denyallow.md)。仅当两个评估都返回 `Allow` 决策时，才允许该请求。

![\[跨账户 评估\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/policy_cross-account-eval-simple.png)


1. 当一个账户中的主体发出请求以访问另一个账户中的资源时，这是一个跨账户请求。

1. 请求主体存在于受信任账户 (`AccountA`) 中。当 AWS 评估此账户时，它会检查基于身份的策略以及可以限制基于身份的策略的任何策略。有关更多信息，请参阅 [评估具有权限边界的基于身份的策略](reference_policies_evaluation-logic.md#policy-eval-basics-id-bound)。

1. 请求的资源存在于信任账户 (`AccountB`) 中。当 AWS 评估此账户时，它会检查附加到所请求资源的基于资源的策略，以及可以限制基于资源的策略的任何策略。有关更多信息，请参阅 [评估基于身份的策略以及基于资源的策略](reference_policies_evaluation-logic.md#policy-eval-basics-id-rdp)。

1. 仅当两个账户策略评估均允许该请求时，AWS 才允许该请求。

以下流程图详细介绍了如何针对跨账户请求作出策略评估决策。同样，仅当两个账户策略评估均允许该请求时，AWS 才会允许该请求。

![\[详细的跨账户策略评估\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/PolicyEvaluationCrossAccount.png)


## 跨账户策略评估示例
<a name="policies_evaluation_example-cross-account"></a>

以下示例演示了一个账户中基于资源的策略向另一个账户中的角色授予权限的情况。

假设 Carlos 是一名开发人员，在账户 111111111111 中具有名为 `Demo` 的 IAM 角色。他想要将文件保存到账户 222222222222 中的 `amzn-s3-demo-bucket-production-logs` Amazon S3 存储桶。

还假定将以下策略附加到 `Demo` IAM 角色。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowS3ListRead",
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "*"
        },
        {
            "Sid": "AllowS3ProductionObjectActions",
            "Effect": "Allow",
            "Action": "s3:*Object*",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket-production/*"
        },
        {
            "Sid": "DenyS3Logs",
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::*log*",
                "arn:aws:s3:::*log*/*"
            ]
        }
    ]
}
```

------

此策略中的 `AllowS3ListRead` 语句允许 Carlos 查看 Amazon S3 中所有存储桶的列表。`AllowS3ProductionObjectActions` 语句允许 Carlos 对 `amzn-s3-demo-bucket-production` 存储桶中对象的完全访问权限。

此外，以下基于资源的策略（称为存储桶策略）附加到账户 222222222222 中的 `amzn-s3-demo-bucket-production` 存储桶。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject*",
                "s3:PutObject*",
                "s3:ReplicateObject",
                "s3:RestoreObject"
            ],
            "Principal": { "AWS": "arn:aws:iam::111111111111:role/Demo" },
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket-production/*"
        }
    ]
}
```

------

此策略允许 `Demo` 角色访问 `amzn-s3-demo-bucket-production` 存储桶中的对象。该角色以创建和编辑存储桶中的对象，但不能删除。该角色无法管理存储桶本身。

当 Carlos 请求将文件保存到 `amzn-s3-demo-bucket-production-logs` 存储桶时，AWS 将确定应用于请求的策略。在这种情况下，附加到 `Demo` 角色的基于身份的策略是在账户 `111111111111` 中应用的唯一策略。在账户 `222222222222` 中，`amzn-s3-demo-bucket-production-logs` 存储桶没有附加基于资源的策略。AWS 评估账户 `111111111111` 时返回了决策 `Deny`。这是因为基于身份的策略中的 `DenyS3Logs` 语句明确拒绝访问任何日志存储桶。有关如何在单个账户中评估请求的更多信息，请参阅[AWS 执行代码逻辑如何评估允许或拒绝访问的请求](reference_policies_evaluation-logic_policy-eval-denyallow.md)。

由于在一个账户中明确拒绝了请求，因此最终决策是拒绝请求。

![\[向 amzn-s3-demo-bucket-production-logs 存储桶发出请求\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/policy_cross-account-eval-example.png)


假设随后 Carlos 意识到他的错误并尝试将文件保存到 `Production` 存储桶。AWS 首先检查账户 `111111111111` 以确定是否允许请求。仅基于身份的策略适用并允许请求。随后，AWS 检查账户 `222222222222`。仅附加到 `Production` 存储桶的基于资源的策略适用，并允许请求。由于两个账户均允许请求，因此最终决策是允许请求。

![\[对 Production 存储桶的请求\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/policy_cross-account-eval-example-correct.png)


# 显式拒绝和隐式拒绝之间的区别
<a name="reference_policies_evaluation-logic_AccessPolicyLanguage_Interplay"></a>

如果适用策略包含 `Deny` 语句，则请求会导致显式拒绝。如果应用于请求的策略包含一个 `Allow` 语句和一个 `Deny` 语句，`Deny` 语句优先于 `Allow` 语句。将显式拒绝请求。

当没有适用的 `Deny` 语句但也没有适用的 `Allow` 语句时，会发生隐式拒绝。由于原定设置下拒绝访问 IAM 主体，因此必须显式允许他们执行操作。否则，将隐式拒绝他们访问。

在设计授权战略时，您必须创建包含 `Allow` 语句的策略才能允许主体成功发出请求。但是，您可以选择显式拒绝和隐式拒绝的任意组合。

例如，您可以创建以下策略，其中包括允许的操作、隐式拒绝的操作和显式拒绝的操作。`AllowGetList` 语句**允许**对 IAM 操作的只读权限，这些操作以 `Get` 和 `List` 为前缀。IAM 中的所有其他操作，例如 `iam:CreatePolicy` 是**隐式拒绝**。`DenyReports` 语句通过拒绝对包含 `Report` 后缀（例如 `iam:GetOrganizationsAccessReport`）的操作的访问权限，**显式拒绝**对 IAM 报告的访问权限。如果有人向此主体添加另一个策略以授予他们访问 IAM 报告的权限（例如 `iam:GenerateCredentialReport`），由于这种明确拒绝，报告相关请求仍被拒绝。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowGetList",
            "Effect": "Allow",
            "Action": [
                "iam:Get*",
                "iam:List*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DenyReports",
            "Effect": "Deny",
            "Action": "iam:*Report",
            "Resource": "*"
        }
    ]
}
```

------

# IAM JSON 策略语言的语法
<a name="reference_policies_grammar"></a>

该页提供了用于在 IAM 中创建 JSON 策略的语言的正式语法。提供此语法的目的是为了便于您理解如何构造和验证策略。

有关策略示例，请参阅以下主题：
+ [AWS Identity and Access Management 中的策略和权限](access_policies.md)
+ [IAM 基于身份的策略示例](access_policies_examples.md)
+ 《*Amazon EC2 用户指南*》中的[用于 Amazon EC2 控制台的策略示例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policies-ec2-console.html)和[使用 AWS CLI、Amazon EC2 CLI 或 AWS SDK 的策略示例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ExamplePolicies_EC2.html)。
+  *Amazon Simple Storage Service User Guide*（亚马逊云科技 Simple Storage Service 用户指南）中的[存储桶策略示例](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html)和[用户策略示例](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-policies-s3.html)。

有关其他 AWS 产品中使用的策略的示例，请参阅相应服务的文档。

**Topics**
+ [策略语言和 JSON](#policies-grammar-json)
+ [此语法采用的约定](#policies-grammar-conventions)
+ [语法](#policies-grammar-bnf)
+ [策略语法说明](#policies-grammar-notes)

## 策略语言和 JSON
<a name="policies-grammar-json"></a>

策略是以 JSON 格式表示的。当您创建或编辑 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)。

在此文档中，我们不提供有效 JSON 组成部分的完整说明。而是提供一些基本的 JSON 规则：
+ 各实体间允许使用空格。
+ 值用引号括起来。对于数字值和布尔值，引号是可选的。
+ 很多元素 (例如 `action_string_list` 和 `resource_string_list`) 都可以采用 JSON 数组作为值。数组可以采用一个或多个值。如果包含多个值，则数组用方括号 (`[` 和 `]`) 括起来并用逗号分隔，如以下示例中所示：

  `"Action" : ["ec2:Describe*","ec2:List*"]`
+ 基本 JSON 数据类型 (布尔型、数字和字符串) 在 [RFC 7159](https://datatracker.ietf.org/doc/html/rfc7159) 中定义。

## 此语法采用的约定
<a name="policies-grammar-conventions"></a>

此语法采用以下约定：
+ 以下字符是 JSON 令牌，*包含* 在策略中：

  `{ } [ ] " , :`
+ 以下字符是语法中的特殊字符，*不包含* 在策略中：

  `= < > ( ) |`
+ 当一个元素允很多个值时，使用重复值、逗号分隔符和省略号 (`...`) 进行表示。示例：

  `[<action_string>, <action_string>, ...]`

  `<principal_map> = { <principal_map_entry>, <principal_map_entry>, ... }`

  允许多个值时，只包含一个值也是有效的。只有一个值时，必须省略尾部的逗号。如果元素采用数组 (使用 [ 和 ] 标记) 但只包含一个值，则括号可选。示例：

  `"Action": [<action_string>]`

  `"Action": <action_string>`
+ 元素后的问号 (`?`) 表示该元素是可选的。示例：

  <`version_block?>`

  不过，请务必参考语法列表后的说明了解有关可选元素的详细信息。
+ 元素之间的竖线 (`|`) 表示备选项。在语法中，圆括号定义备选项的范围。示例：

  `("Principal" | "NotPrincipal")` 
+ 必须为文字字符串的元素括在双引号 (`"`) 中。示例：

  `<version_block> = "Version" : ("2008-10-17" | "2012-10-17" )`

有关更多说明，请参阅语法列表后面的[策略语法说明](#policies-grammar-notes)。

## 语法
<a name="policies-grammar-bnf"></a>

下面的列表描述了策略语言语法。有关此列表中采用的约定，请参阅前面的部分。有关更多信息，请参阅后面的说明。

**注意**  
此语法描述了使用版本号 `2008-10-17 ` 和 `2012-10-17 ` 标记的策略。`Version` 策略元素与策略版本不同。`Version` 策略元素用在策略之中，用于定义策略语言的版本。另一方面，当您对 IAM 中的客户托管策略进行更改时，将创建一个策略版本。已更改的策略不会覆盖现有策略。而是由 IAM 创建新的托管策略版本。要了解 `Version` 策略元素的更多信息，请参阅[IAM JSON 策略元素：Version](reference_policies_elements_version.md)。要了解策略版本的更多信息，请参阅[IAM policy 版本控制](access_policies_managed-versioning.md)。

```
policy  = {
     <version_block?>,
     <id_block?>,
     <statement_block>
}

<version_block> = "Version" : ("2008-10-17"		 	 	  | "2012-10-17"		 	 	 )

<id_block> = "Id" : <policy_id_string>

<statement_block> = "Statement" : [ <statement>, <statement>, ... ]

<statement> = { 
    <sid_block?>,
    <principal_block?>,
    <effect_block>,
    <action_block>,
    <resource_block>,
    <condition_block?>
}

<sid_block> = "Sid" : <sid_string>

<effect_block> = "Effect" : ("Allow" | "Deny")  

<principal_block> = ("Principal" | "NotPrincipal") : ("*" | <principal_map>)

<principal_map> = { <principal_map_entry>, <principal_map_entry>, ... }

<principal_map_entry> = ("AWS" | "Federated" | "Service" | "CanonicalUser") :   
    [<principal_id_string>, <principal_id_string>, ...]

<action_block> = ("Action" | "NotAction") : 
    ("*" | <action_string> | [<action_string>, <action_string>, ...])

<resource_block> = ("Resource" | "NotResource") : 
    : ("*" | <resource_string> | [<resource_string>, <resource_string>, ...])

<condition_block> = "Condition" : { <condition_map> }
<condition_map> = { 
  <condition_type_string> : { <condition_key_string> : <condition_value_list> },
  <condition_type_string> : { <condition_key_string> : <condition_value_list> }, ...
}  
<condition_value_list> = [<condition_value>, <condition_value>, ...]
<condition_value> = (<condition_value_string> | <condition_value_string> | <condition_value_string>)
```

## 策略语法说明
<a name="policies-grammar-notes"></a>
+ 一个策略可以包含一组语句。
+ 策略的最大大小介于 2048 个字符和 10,240 个字符之间，具体取决于策略所附加到的实体。有关更多信息，请参阅 [IAM 和 AWS STS 配额](reference_iam-quotas.md)。策略大小计算不包括空格字符。
+ 单个元素不能包含同一个键的多个实例。例如，不能在同一语句中包含两次 `Effect` 块。
+ 各个块的显示顺序无限制。例如，在策略中，`version_block` 可以跟在 `id_block` 后面。同样地，`effect_block`、`principal_block`、`action_block` 在语句中也可以按任何顺序显示。
+ `id_block` 在基于资源的策略中是可选的。它一定*不能* 包含在基于身份的策略中。
+ `principal_block` 元素在基于资源的策略中（例如，在 Amazon S3 存储桶策略中）和 IAM 角色的信任策略中是必需的。它一定*不能* 包含在基于身份的策略中。
+ Amazon S3 存储桶策略中的 `principal_map` 元素可能包含 `CanonicalUser` ID。大多数基于资源的策略不支持该映射。要了解有关在存储桶策略中使用规范用户 ID 的更多信息，请参阅 *Amazon Simple Storage Service 用户指南*中的[在策略中指定主体](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-bucket-user-policy-specifying-principal-intro.html)。
+ 每个字符串值 (`policy_id_string`、`sid_string`、`principal_id_string`、`action_string`、`resource_string`、`condition_type_string`、`condition_key_string` 以及 `condition_value` 的字符串版本) 都可以有其自己的最小和最大长度限制、具体的允许值或必需的内部格式。

### 有关字符串值的说明
<a name="policies-grammar-notes-strings"></a>

这一部分提供了有关在策略的不同元素中使用的字符串值的更多信息。

**`action_string`**  
由服务命名空间、冒号和操作名称组成。操作名称可以包含通配符。示例：  

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

"Action":[
  "ec2:StartInstances",
  "ec2:StopInstances"
]

"Action":"cloudformation:*"

"Action":"*"

"Action":[
  "s3:Get*",
  "s3:List*"
]
```

**`policy_id_string`**  
提供一种方法将关于策略的信息作为整体包含在其中。某些服务 (如 Amazon SQS 和 Amazon SNS) 以预留方式使用 `Id` 元素。除非另受某个服务限制，否则 policy\$1id\$1string 可以包含空格。有些服务要求此值在 AWS 账户内唯一。  
`id_block` 可在基于资源的策略中使用，但不能在基于身份的策略中使用。
长度没有限制，但此字符串计入策略总长度，而策略总长度是有限制的。  

```
"Id":"Admin_Policy"

"Id":"cd3ad3d9-2776-4ef1-a904-4c229d1642ee"
```

**`sid_string`**  
提供一种方法来包含有关单个语句的信息。对于 IAM policy，`Sid` 值中仅允许使用基本的字母数字（A-Z、a-z、0-9）字符。支持资源策略的其他 AWS 服务对于 `Sid` 值可能有其他要求。例如，一些服务要求此值在 AWS 账户 内唯一，而一些服务允许在 `Sid` 值中使用其他字符，如空格。  

```
"Sid":"1" 

"Sid": "ThisStatementProvidesPermissionsForConsoleAccess"
```

**`principal_id_string`**  
提供使用 AWS 账户、IAM 用户、IAM 角色、联合用户或代入角色的用户的 [*Amazon 资源名称*（ARN）](reference_identifiers.md#identifiers-arns) 指定主体的方式。对于 AWS 账户，您还可以使用简单形式 `AWS:accountnumber` 而不是完整的 ARN。有关所有选项（包括 AWS 服务、担任的角色等），请参阅[如何指定主体](reference_policies_elements_principal.md#Principal_specifying)。  
请注意，您只能使用 \$1 指定“everyone/anonymous”。您不能使用它指定一部分名称或 ARN。

**`resource_string`**  
在大多数情况下，由一个 [Amazon Resource Name](reference_identifiers.md#identifiers-arns) (ARN) 组成。您可以在 ARN 的资源部分使用通配符（\$1 和 ?）。有关在 ARN 中使用通配符的更多信息，请参阅 [在路径中使用通配符](reference-arns.md#arns-paths-wildcards)。  
当您在基于身份的策略中指定不完整的 ARN（少于标准的六个字段）时，AWS 会通过在所有缺失字段中添加通配符 (\$1) 来自动完成 ARN。例如，指定 `arn:aws:sqs` 相当于 `arn:aws:sqs:*:*:*`，它让您有可以访问所有区域和账户中的所有 Amazon SQS 资源。

```
"Resource":"arn:aws:iam::123456789012:user/Bob"

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

**`condition_type_string`**  
标识所测试条件的类型，例如 `StringEquals`、`StringLike`、`NumericLessThan`、`DateGreaterThanEquals`、`Bool`、`BinaryEquals`、`IpAddress`、`ArnEquals` 等。有关条件类型的完整列表，请参阅[IAM JSON 策略元素：条件运算符](reference_policies_elements_condition_operators.md)。  

```
"Condition": {
  "NumericLessThanEquals": {
    "s3:max-keys": "10"
  }
}

"Condition": {
  "Bool": {
    "aws:SecureTransport": "true"
  }
}

"Condition": {
  "StringEquals": {
      "s3:x-amz-server-side-encryption": "AES256"
   }
}
```

**`condition_key_string`**  
标识将对其值进行测试以便确定条件是否满足的条件键。AWS 定义了一组在所有 AWS 服务（包括 `aws:PrincipalType`、`aws:SecureTransport` 和 `aws:userid`）中可用的条件键。  
有关 AWS 条件键的列表，请参阅 [AWS 全局条件上下文密钥](reference_policies_condition-keys.md)。有关服务特定的条件键，请参阅相应服务的文档，例如：  
+ *Amazon Simple Storage Service 用户指南*中的[在策略中指定条件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/amazon-s3-policy-keys.html)
+ 《*Amazon EC2 用户指南*》中的 [Amazon EC2 的 IAM 策略](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policies-for-amazon-ec2.html)。

```
"Condition":{
  "Bool": {
      "aws:SecureTransport": "true"
   }
}

"Condition": {
  "StringNotEquals": {
      "s3:x-amz-server-side-encryption": "AES256"
   }
}

"Condition": {
  "StringEquals": {
    "aws:ResourceTag/purpose": "test"
  }
}
```

**`condition_value_string`**  
标识 condition\$1key\$1string 的值，该值决定了是否满足条件。有关条件类型的有效值的完整列表，请参阅 [IAM JSON 策略元素：条件运算符](reference_policies_elements_condition_operators.md)。  

```
"Condition":{
  "ForAnyValue:StringEquals": {
		"dynamodb:Attributes": [
			"ID",
			"PostDateTime"
  	      ]
  }
}
```

# 工作职能的 AWS 托管策略
<a name="access_policies_job-functions"></a>

我们建议使用[授予最低权限](best-practices.md#grant-least-privilege)的策略，或仅授予执行任务所需的许可。授予最小权限的最安全方式是编写一个仅具有团队所需权限的自定义策略。您必须创建一个流程，以允许您的团队在必要时请求更多权限。创建仅为团队提供所需权限的 [IAM 客户管理型策略](access_policies_create-console.md)需要时间和专业知识。

要开始向您的 IAM 身份（用户、用户组和角色）添加权限，您可以使用 [AWS托管策略](access_policies_managed-vs-inline.md#aws-managed-policies)。AWS 托管策略涵盖常见使用案例，并且可在您的 AWS 账户 中使用。AWS 托管策略不会授予最低权限。您必须考虑授予您的主体超出其完成工作所需的更多权限所带来的安全风险。

您可以将 AWS 托管策略（包括任务函数）附加到任何 IAM 身份。要切换到最低权限，您可以运行 AWS Identity and Access Management and Access Analyzer 以使用 AWS 托管式策略监控主体。了解他们使用的权限后，您可以编写自定义策略或生成仅包含团队所需权限的策略。这中方法不太安全，但您能够以更灵活的方式了解您的团队如何使用 AWS。

AWS 工作职能托管策略，旨在贴合 IT 行业的常见工作职能。您可以使用这些策略，给特定工作职能的某人，授予执行预期任务所需的权限。这些策略将许多服务的权限整合到单个策略，比起分散在多个策略之间的权限，处理起来更加简单。

**使用角色来合并服务**  
某些策略使用 IAM 服务角色帮助您利用在其他 AWS 服务中发现的功能。这些策略授予对 `iam:passrole` 的访问权限，允许使用策略的用户将角色传递给 AWS 服务。此角色向 AWS 服务委派代表您执行操作的 IAM 权限。

您必须根据需求创建角色。例如，网络管理员策略允许具有策略的用户向 Amazon CloudWatch 服务传递名为 “flow-logs-vpc”的角色。CloudWatch 使用该角色记录和捕获用户创建的 VPC 的 IP 流量。

要遵循安全最佳实践，工作职能的策略包括限制可传递的有效角色名称的筛选器。这有助于避免授予不必要的权限。如果您的用户确实需要可选的服务角色，您必须按照策略中指定的命名约定创建一个角色。随后才能给角色授予权限。完成该操作后，用户方可配置服务来使用该角色，为服务授予角色提供的任何权限。

在以下部分中，每个策略的名称都是指向 AWS 管理控制台中策略详细信息页面的链接。您可以在该页面中查看策略文档并了解它所授予的权限。

## 管理员任务函数
<a name="jf_administrator"></a>

**AWS 托管策略名称：**[AdministratorAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AdministratorAccess)

**使用案例：**此用户具有完全访问权限，而且可以为 AWS; 中的每个服务和资源委派权限。

**策略更新：**AWS 维护和更新此策略。有关此策略的更改历史记录，请在 IAM 控制台中查看策略，然后选择 **Policy versions**（策略版本）选项卡。有关任务函数策略更新的更多信息，请参阅 [工作职能的 AWS 托管策略](#security-iam-awsmanpol-jobfunction-updates)。

**策略描述：**此策略为账户中的所有 AWS 服务和所有资源授予所有操作权限。有关托管式策略的更多信息，请参阅《AWS 托管策略参考指南》中的 [AdministratorAccess](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/AdministratorAccess.html)**。

**注意**  
您必须先激活 IAM 用户和角色访问权限，然后 IAM 用户或角色才能使用此策略中的权限访问 AWS 账单与成本管理 控制台。为此，请按照[授予对账单控制台的访问权限](getting-started-account-iam.md)中的说明进行操作，委派账单控制台的访问权限。

## 账单任务函数
<a name="jf_accounts-payable"></a>

**AWS 托管策略名称：**[Billing](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/job-function/Billing)

**使用案例：**此用户需要查看账单信息、设置付款和授权付款。用户可以监控整个 AWS 服务累积的各项成本。

**策略更新：**AWS 维护和更新此策略。有关此策略的更改历史记录，请在 IAM 控制台中查看策略，然后选择 **Policy versions**（策略版本）选项卡。有关任务函数策略更新的更多信息，请参阅 [工作职能的 AWS 托管策略](#security-iam-awsmanpol-jobfunction-updates)。

**策略描述：**此策略授予管理账单、成本、付款方式、预算和报告的完整权限。有关其他成本管理策略示例，请参阅《AWS 账单与成本管理 用户指南》中的[AWS Billing 策略示例](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-example-policies.html)**。有关托管式策略的更多信息，请参阅《AWS 托管式策略参考指南》中的 [Billing](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/Billing.html)**。

**注意**  
您必须先激活 IAM 用户和角色访问权限，然后 IAM 用户或角色才能使用此策略中的权限访问 AWS 账单与成本管理 控制台。为此，请按照[授予对账单控制台的访问权限](getting-started-account-iam.md)中的说明进行操作，委派账单控制台的访问权限。

## 数据库管理员任务函数
<a name="jf_database-administrator"></a>

**AWS 托管策略名称：**[DatabaseAdministrator](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/job-function/DatabaseAdministrator)

**使用案例：**此用户设置、配置和维护 AWS 云中的数据库。

**策略更新：**AWS 维护和更新此策略。有关此策略的更改历史记录，请在 IAM 控制台中查看策略，然后选择 **Policy versions**（策略版本）选项卡。有关任务函数策略更新的更多信息，请参阅 [工作职能的 AWS 托管策略](#security-iam-awsmanpol-jobfunction-updates)。

**策略说明：**此策略授予创建、配置和维护数据库的权限。它包括访问 AWS 数据库服务（例如 Amazon DynamoDB、Amazon Relational Database Service (RDS) 和 Amazon Redshift）。有关此策略支持的数据库服务的完整列表，请查看此策略。有关托管式策略的更多信息，请参阅《AWS 托管式策略参考指南》中的 [DatabaseAdministrator](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/DatabaseAdministrator.html)**。

此作业功能策略支持将角色传递给 AWS 服务的功能。该策略仅允许对下表中指定的角色执行 `iam:PassRole` 操作。有关更多信息，请参阅本主题后面的[创建角色并附加策略（控制台）](access_policies_job-functions_create-policies.md)。


| 使用案例 | 角色名称 (\$1 为通配符) | 可选择的服务角色类型 | 选择此 AWS 托管策略 | 
| --- | --- | --- | --- | 
| 允许用户监控 RDS 数据库 | [rds-monitoring-role](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.html) | Amazon RDS 角色用于增强监控 | [AmazonRDSEnhancedMonitoringRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AmazonRDSEnhancedMonitoringRole) | 
| 允许 AWS Lambda 监控您的数据库和访问外部数据库 | [rdbms-lambda-access](https://aws.amazon.com/blogs/big-data/from-sql-to-microservices-integrating-aws-lambda-with-relational-databases) | Amazon EC2 | [AWSLambda\$1FullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSLambda_FullAccess) | 
| 允许 Lambda 使用 DynamoDB 将文件上传到 Amazon S3 和 Amazon Redshift 集群 | [lambda\$1exec\$1role](https://aws.amazon.com/blogs/big-data/a-zero-administration-amazon-redshift-database-loader) | AWS Lambda | 按照 [AWS 大数据博客](https://aws.amazon.com/blogs/big-data/a-zero-administration-amazon-redshift-database-loader)中的定义，新建一个托管策略 | 
| 允许 Lambda 函数触发您的 DynamoDB 表 | [lambda-dynamodb-\$1](https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html) | AWS Lambda | [AWSLambdaDynamoDBExecutionRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSLambdaDynamoDBExecutionRole) | 
| 允许 Lambda 函数访问 VPC 中的 Amazon RDS | [lambda-vpc-execution-role](https://docs.aws.amazon.com/lambda/latest/dg/vpc-rds.html) | 使用 [AWS Lambda 开发人员指南](https://docs.aws.amazon.com/lambda/latest/dg/vpc-rds.html)中定义的信任策略创建一个角色 | [AWSLambdaVPCAccessExecutionRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole) | 
| 允许 AWS Data Pipeline 访问您的 AWS 资源 | [DataPipelineDefaultRole](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html) | 使用 [AWS Data Pipeline 开发人员指南](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html)中定义的信任策略创建一个角色 | AWS Data Pipeline 文档列出了此使用案例所需的权限。请参阅[适用于 AWS Data Pipeline 的 IAM 角色](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html) | 
| 允许您在 Amazon EC2 实例上运行的应用程序访问您的 AWS 资源 | [DataPipelineDefaultResourceRole](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html) | 使用 [AWS Data Pipeline 开发人员指南](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html)中定义的信任策略创建一个角色 | [AmazonEC2RoleforDataPipelineRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforDataPipelineRole) | 

## 数据科学家任务函数
<a name="jf_data-scientist"></a>

**AWS 托管策略名称：**[DataScientist](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/job-function/DataScientist)

**使用案例：** 此用户运行 Hadoop 作业和查询。该用户还访问并分析有关数据分析和商业智能的信息。

**策略更新：**AWS 维护和更新此策略。有关此策略的更改历史记录，请在 IAM 控制台中查看策略，然后选择 **Policy versions**（策略版本）选项卡。有关任务函数策略更新的更多信息，请参阅 [工作职能的 AWS 托管策略](#security-iam-awsmanpol-jobfunction-updates)。

**策略描述：**此策略授予在 Amazon EMR 集群上创建、管理和运行查询的权限，以及使用 Amazon QuickSight 等工具执行数据分析的权限。该策略包括访问其他数据科学家服务，例如 AWS Data Pipeline、Amazon EC2、Amazon Kinesis、Amazon Machine Learning 和 SageMaker AI。有关此策略支持的数据科学家服务的完整列表，请查看此策略。有关托管式策略的更多信息，请参阅《AWS 托管式策略参考指南》中的 [DataScientist](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/DataScientist.html)**。

此作业功能策略支持将角色传递给 AWS 服务的功能。一个语句允许将任何角色传递给 SageMaker AI。另一个语句仅允许对下表中指定的角色执行 `iam:PassRole` 操作。有关更多信息，请参阅本主题后面的[创建角色并附加策略（控制台）](access_policies_job-functions_create-policies.md)。


| 使用案例 | 角色名称 (\$1 为通配符) | 可选择的服务角色类型 | 可选择的 AWS 托管策略 | 
| --- | --- | --- | --- | 
| 允许 Amazon EC2 实例访问适合集群的服务和资源 | [EMR-EC2\$1DefaultRole](https://docs.aws.amazon.com/emr/latest/DeveloperGuide/emr-iam-roles-defaultroles.html) | Amazon EMR for EC2  | [AmazonElasticMapReduceforEC2Role](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AmazonElasticMapReduceforEC2Role) | 
| 允许 Amazon EMR 访问适合集群的 Amazon EC2 服务和资源 | [EMR\$1DefaultRole](https://docs.aws.amazon.com/emr/latest/DeveloperGuide/emr-iam-roles-defaultroles.html) | Amazon EMR | [AmazonEMRServicePolicy\$1v2](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AmazonEMRServicePolicy_v2) | 
| 允许适用于 Apache Flink 的 Kinesis 托管服务访问串流数据来源 | [kinesis-\$1](https://aws.amazon.com/blogs/big-data/a-zero-administration-amazon-redshift-database-loader) | 使用[AWS 大数据博客](https://aws.amazon.com/blogs/big-data/a-zero-administration-amazon-redshift-database-loader)中定义的信任策略创建一个角色。 | 请参阅 [AWS; 大数据博客](https://aws.amazon.com/blogs/big-data/a-zero-administration-amazon-redshift-database-loader)，其中根据您的使用情况概述了四种可能的选项。 | 
| 允许 AWS Data Pipeline 访问您的 AWS 资源 | [DataPipelineDefaultRole](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html) | 使用 [AWS Data Pipeline 开发人员指南](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html)中定义的信任策略创建一个角色 | AWS Data Pipeline 文档列出了此使用案例所需的权限。请参阅[适用于 AWS Data Pipeline 的 IAM 角色](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html) | 
| 允许您在 Amazon EC2 实例上运行的应用程序访问您的 AWS 资源 | [DataPipelineDefaultResourceRole](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html) | 使用 [AWS Data Pipeline 开发人员指南](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html)中定义的信任策略创建一个角色 | [AmazonEC2RoleforDataPipelineRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforDataPipelineRole) | 

## 高级开发人员用户任务函数
<a name="jf_developer-power-user"></a>

**AWS 托管策略名称：**[PowerUserAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/PowerUserAccess)

**使用案例：**此用户执行应用程序开发任务，并可创建和配置特定的资源和服务，它们为能够识别 AWS 的应用程序开发提供支持。

**策略更新：**AWS 维护和更新此策略。有关此策略的更改历史记录，请在 IAM 控制台中查看策略，然后选择 **Policy versions**（策略版本）选项卡。有关任务函数策略更新的更多信息，请参阅 [工作职能的 AWS 托管策略](#security-iam-awsmanpol-jobfunction-updates)。

**策略描述：**此策略的第一条语句使用 [`NotAction`](reference_policies_elements_notaction.md) 元素以允许对于所有 AWS 服务和所有资源执行所有操作（AWS Identity and Access Management、AWS Organizations 和 AWS 账户管理 除外）。第二条语句授予创建服务相关角色的 IAM 权限。这是某些服务访问其他服务（如 Amazon S3 存储桶）中的资源所必需的。该策略还授予 AWS Organizations 权限以查看有关用户所在组织的信息，包括管理账户电子邮件和企业限制。尽管此策略限制 IAM、AWS Organizations，但它允许用户执行所有 IAM Identity Center 操作（如果 IAM Identity Center 已启用）。它还授予账户管理权限以查看为账户启用或禁用了哪些 AWS 区域。

## 网络管理员任务函数
<a name="jf_network-administrator"></a>

**AWS托管策略名称：**[NetworkAdministrator](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/job-function/NetworkAdministrator)

**使用案例：**此用户分配到的任务是设置和维护 AWS 网络资源。

**策略更新：**AWS 维护和更新此策略。有关此策略的更改历史记录，请在 IAM 控制台中查看策略，然后选择 **Policy versions**（策略版本）选项卡。有关任务函数策略更新的更多信息，请参阅 [工作职能的 AWS 托管策略](#security-iam-awsmanpol-jobfunction-updates)。

**策略说明：**此策略授予在 Auto Scaling、Amazon EC2、AWS Direct Connect、Route 53、Amazon CloudFront、Elastic Load Balancing、AWS Elastic Beanstalk、Amazon SNS、CloudWatch、CloudWatch Logs、Amazon S3、IAM 以及 Amazon Virtual Private Cloud 中创建和维护网络资源的权限。有关托管式策略的更多信息，请参阅《AWS 托管式策略参考指南》中的 [NetworkAdministrator](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/NetworkAdministrator.html)**。

此工作职能需要将角色传递给 AWS 服务的能力。该策略仅为下表中列出的角色授予 `iam:GetRole` 和 `iam:PassRole` 的权限。有关更多信息，请参阅本主题后面的[创建角色并附加策略（控制台）](access_policies_job-functions_create-policies.md)。


| 使用案例 | 角色名称 (\$1 为通配符) | 可选择的服务角色类型 | 可选择的 AWS 托管策略 | 
| --- | --- | --- | --- | 
| 允许 Amazon VPC 代表用户在 CloudWatch Logs 中创建和管理日志，以监控进出您的 VPC 的 IP 流量 | [flow-logs-\$1](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-logs-iam) | 使用 [Amazon VPC 用户指南](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-logs-iam)中定义的信任策略创建一个角色 | 此使用案例没有现成的 AWS 托管策略，但是，文档列出了所需权限。参阅 [Amazon VPC 用户指南](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-logs-iam)。 | 

## 只读访问权限
<a name="awsmp_readonlyaccess"></a>

**AWS 托管策略名称：** [ReadOnlyAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/ReadOnlyAccess)

**使用案例：**此用户需要对 AWS 账户 中所有资源的只读访问权限。

**重要**  
该用户还可以读取 Amazon S3 存储桶和 Amazon DynamoDB 表等存储服务中的数据。

**策略更新：**AWS 维护和更新此策略。有关此策略的更改历史记录，请在 IAM 控制台中查看策略，然后选择 **Policy versions**（策略版本）选项卡。有关任务函数策略更新的更多信息，请参阅 [工作职能的 AWS 托管策略](#security-iam-awsmanpol-jobfunction-updates)。

**策略说明：**此策略授予列出、获取、描述和查看资源及其属性的权限。它不包括创建或删除等转换功能。此策略包含对与安全相关的 AWS 服务（例如 AWS Identity and Access Management 和 AWS 账单与成本管理）的只读访问权限。有关此策略支持的服务和操作的完整列表，请查看此策略。有关托管式策略的更多信息，请参阅*《AWS 托管式策略参考指南》*中的 [ReadOnlyAccess](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/ReadOnlyAccess.html)。如果需要不授予存储服务中数据读取权限的类似策略，请参阅 [“仅查看”用户任务函数](#jf_view-only-user)。

## MCP 服务操作完全访问权限
<a name="jf_mcp-service-actions"></a>

**AWS 托管策略名称：**[AWSMcpServiceActionsFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSMcpServiceActionsFullAccess)

**使用案例：**此用户需要使用 AWS MCP 服务器才能访问 AWS 服务。此策略不向其他 AWS 服务授予对 MCP 服务所采取操作的访问权限。

**策略更新：**AWS 维护和更新此策略。有关此策略的更改历史记录，请在 IAM 控制台中查看策略，然后选择 **Policy versions**（策略版本）选项卡。有关任务函数策略更新的更多信息，请参阅 [工作职能的 AWS 托管策略](#security-iam-awsmanpol-jobfunction-updates)。

**策略描述：**此策略授予调用任何 AWS MCP 服务操作的权限。如果您无需为每个 AWS MCP 服务指定权限，可以使用此策略。其不会向其他 AWS 服务授予 MCP 服务所执行操作的权限，这些权限必须始终单独授予，且在 MCP 服务操作权限之外授予。有关托管式策略的更多信息，请参阅《AWS Managed Policy Reference Guide》**中的 [AWSMcpServiceActionsFullAccess](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/AWSMcpServiceActionsFullAccess.html)。

## 安全审计员任务函数
<a name="jf_security-auditor"></a>

**AWS 托管策略名称：**[SecurityAudit](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/SecurityAudit)

**使用案例：** 此用户监控账户是否符合安全要求。此用户可以访问日志和事件来调查潜在的安全漏洞或潜在的恶意活动。

**策略更新：**AWS 维护和更新此策略。有关此策略的更改历史记录，请在 IAM 控制台中查看策略，然后选择 **Policy versions**（策略版本）选项卡。有关任务函数策略更新的更多信息，请参阅 [工作职能的 AWS 托管策略](#security-iam-awsmanpol-jobfunction-updates)。

**策略描述：**此策略可授予查看多项 AWS 服务的配置数据并检查其日志的权限。有关托管式策略的更多信息，请参阅《AWS 托管式策略参考指南》中的 [SecurityAudit](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/SecurityAudit.html)**。

## 支持用户任务函数
<a name="jf_support-user"></a>

**AWS 托管式策略名称：** [AWSSupportAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSSupportAccess)

**使用案例：**此用户与 AWS Support 联系，创建支持案例并查看现有案例的状态。

**策略更新：**AWS 维护和更新此策略。有关此策略的更改历史记录，请在 IAM 控制台中查看策略，然后选择 **Policy versions**（策略版本）选项卡。有关任务函数策略更新的更多信息，请参阅 [工作职能的 AWS 托管策略](#security-iam-awsmanpol-jobfunction-updates)。

**策略描述：**此策略授予创建和更新 支持 工单的权限。有关托管式策略的更多信息，请参阅*《AWS 托管式策略参考指南》*中的 [AWSSupportAccess](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/AWSSupportAccess.html)。

## 系统管理员任务函数
<a name="jf_system-administrator"></a>

**AWS 托管策略名称：**[SystemAdministrator](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/job-function/SystemAdministrator)

**使用案例：** 此用户设置和维护用于开发操作的资源。

**策略更新：**AWS 维护和更新此策略。有关此策略的更改历史记录，请在 IAM 控制台中查看策略，然后选择 **Policy versions**（策略版本）选项卡。有关任务函数策略更新的更多信息，请参阅 [工作职能的 AWS 托管策略](#security-iam-awsmanpol-jobfunction-updates)。

**策略说明：**此策略授予权限，以跨诸多 AWS 服务（包括 AWS CloudTrail、Amazon CloudWatch、AWS CodeCommit、AWS CodeDeploy、AWS Config、AWS Directory Service、Amazon EC2、AWS Identity and Access Management、AWS Key Management Service、AWS Lambda、Amazon RDS、Route 53、Amazon S3、Amazon SES、Amazon SQS、AWS Trusted Advisor 和 Amazon VPC）创建和维护资源。有关托管式策略的更多信息，请参阅《AWS 托管策略参考指南》中的 [SystemAdministrator](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/SystemAdministrator.html)**。

此工作职能需要将角色传递给 AWS 服务的能力。该策略仅为下表中列出的角色授予 `iam:GetRole` 和 `iam:PassRole` 的权限。有关更多信息，请参阅本主题后面的[创建角色并附加策略（控制台）](access_policies_job-functions_create-policies.md)。有关任务函数策略更新的更多信息，请参阅 [工作职能的 AWS 托管策略](#security-iam-awsmanpol-jobfunction-updates)。


| 使用案例 | 角色名称 (\$1 为通配符) | 可选择的服务角色类型 | 可选择的 AWS 托管策略 | 
| --- | --- | --- | --- | 
| 允许 Amazon ECS 集群中在 EC2 实例中运行的应用程序访问 Amazon ECS | [ecr-sysadmin-\$1](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/instance_IAM_role.html) | 适合 EC2 Container Service 的 Amazon EC2 角色  | [AmazonEC2ContainerServiceforEC2Role](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role) | 
| 允许用户监控数据库 | [rds-monitoring-role](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.html) | Amazon RDS 角色用于增强监控 | [AmazonRDSEnhancedMonitoringRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AmazonRDSEnhancedMonitoringRole) | 
| 允许在 EC2 实例中运行的应用程序访问 AWS 资源。 | [ec2-sysadmin-\$1](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html) | Amazon EC2 | 授予 S3 存储桶访问权限的角色的示例策略，如《[Amazon EC2 用户指南](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)》中所示；可根据需要自定义 | 
| 允许 Lambda 读取 DynamoDB Streams 并写入 CloudWatch Logs | [lambda-sysadmin-\$1](https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html) | AWS Lambda | [AWSLambdaDynamoDBExecutionRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSLambdaDynamoDBExecutionRole) | 

## “仅查看”用户任务函数
<a name="jf_view-only-user"></a>

**AWS 托管策略名称：**[ViewOnlyAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/job-function/ViewOnlyAccess)

**使用案例：**此用户可以查看账户中服务的 AWS 资源和基本元数据的列表。用户不得读取超出资源配额和列表信息的资源内容和元数据。

**策略更新：**AWS 维护和更新此策略。有关此策略的更改历史记录，请在 IAM 控制台中查看策略，然后选择 **Policy versions**（策略版本）选项卡。有关任务函数策略更新的更多信息，请参阅 [工作职能的 AWS 托管策略](#security-iam-awsmanpol-jobfunction-updates)。

**策略描述：**此策略授予针对 AWS 服务的资源的 `List*`、`Describe*`、`Get*`、`View*` 和 `Lookup*` 访问权限。要查看此策略包含针对每种服务的哪些操作，请参阅 [ViewOnlyAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/job-function/ViewOnlyAccess)。有关托管式策略的更多信息，请参阅《AWS 托管式策略参考指南》中的 [ViewOnlyAccess](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/ViewOnlyAccess.html)**。

## 工作职能的 AWS 托管策略
<a name="security-iam-awsmanpol-jobfunction-updates"></a>

这些策略均由 AWS 维护并随时保持更新，以便在 AWS 添加新服务和新功能时，包括对它们的支持。这些策略不能由客户修改。您可以复制策略并对副本进行修改，但在 AWS 推出新的服务和 API 操作时，不会自动更新该副本。

对于任务函数策略，您可以在 IAM 控制台中查看版本历史记录以及每次更新的时间和日期。为此，请使用此页上的链接查看策略详细信息。然后选择 **Policy versions**（策略版本）选项卡以查看版本。此页显示策略的最新 25 个版本。要查看策略的所有版本，请调用 [get-policy-version](https://docs.aws.amazon.com/cli/latest/reference/iam/get-policy-version.html) AWS CLI 命令或 [GetPolicyVersion](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicyVersion.html) API 操作。

**注意**  
您最多可以有五个版本的客户托管策略，但 AWS 会保留 AWS 托管策略的完整版本历史记录。

# 创建角色并附加策略（控制台）
<a name="access_policies_job-functions_create-policies"></a>

上文列出的一些策略授予了通过角色配置 AWS 服务的能力，以便这些服务能够代表您执行操作。工作职能策略或者指定您必须使用的确切角色名称，或者至少包括指定可用名称的开头部分的前缀。要创建这些角色之一，请执行以下程序中的步骤。

**创建用于 AWS 服务 的角色（IAM 控制台）**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在 IAM 控制台的导航窗格中，选择**角色**，然后选择**创建角色**。

1. 对于 **Trusted entity type**（可信实体类型），选择 **AWS 服务**。

1. 对于**服务或使用案例**，请选择服务，然后选择使用案例。用例由服务定义以包含服务要求的信任策略。

1. 选择**下一步**。

1. 对于**权限策略**，选项取决于您选择的使用案例：
   + 如果服务定义了角色的权限，则您无法选择权限策略。
   + 从一组有限的权限策略中进行选择。
   + 从所有权限策略中进行选择。
   + 不选择任何权限策略，创建角色后创建策略，然后将这些策略附加到该角色。

1. （可选）设置[权限边界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)。这是一项高级功能，可用于服务角色，但不可用于服务相关角色。

   1. 打开**设置权限边界**部分，然后选择**使用权限边界控制最大角色权限**。

      IAM 包括您的账户中的 AWS 托管式策略和客户管理型策略的列表。

   1. 选择要用于权限边界的策略。

1. 选择**下一步**。

1. 对于**角色名称**，选项取决于服务：
   + 如果服务定义角色名称，则您无法编辑角色名称。
   + 如果服务定义角色名称的前缀，您可以输入可选的后缀。
   + 如果服务未定义角色名称，您可以为该角色命名。
**重要**  
命名角色时，请注意以下事项：  
角色名称在您的 AWS 账户 中必须是唯一的，且不能因大小写而变得唯一。  
例如，不要同时创建名为 **PRODROLE** 和 **prodrole** 的角色。当角色名称在策略中使用或者作为 ARN 的一部分时，角色名称区分大小写，但是当角色名称在控制台中向客户显示时（例如，在登录期间），角色名称不区分大小写。
创建角色后，您无法编辑该角色的名称，因为其他实体可能会引用该角色。

1. （可选）对于**描述**，输入角色的描述。

1. （可选）要编辑角色的使用案例和权限，请在**步骤 1：选择可信实体**或**步骤 2：添加权限**部分中选择**编辑**。

1. （可选）为了帮助识别、组织或搜索角色，请以键值对形式添加标签。有关在 IAM 中使用标签的更多信息，请参阅《IAM 用户指南》**中的 [AWS Identity and Access Management 资源的标签](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html)。

1. 检查该角色，然后选择**创建角色**。

## 示例 1：将用户配置为数据库管理员（控制台）
<a name="jf_example_1"></a>

此示例显示将 IAM 用户 Alice 配置为 [Database Administrator](access_policies_job-functions.md#jf_database-administrator)（数据库管理员）需要执行的步骤。您需要使用此部分中的表中第一行中的信息，并允许该用户启用 Amazon RDS 监控。您将 [DatabaseAdministrator](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/job-function/DatabaseAdministrator) 策略附加给 Alice 的 IAM 用户，以便他们可以管理 Amazon 数据库服务。该策略还允许 Alice 将名为 `rds-monitoring-role` 的角色传递给 Amazon RDS 服务，从而允许该服务代表他们监控 Amazon RDS 数据库。

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 选择**策略**，在搜索框中键入 **database**，然后按 Enter。

1. 选择 **DatabaseAdministrator** 策略对应的单选按钮，再选择**操作**，然后选择**附加**。

1. 在实体列表中选择 **Alice**，然后选择**附加策略**。Alice 现在可以管理 AWS 数据库了。但是，要允许 Alice 监控这些数据库，您必须配置服务角色。

1. 在 IAM 控制台的导航窗格中，选择**角色**，然后选择**创建角色**。

1. 请选择 **AWS Service**（亚马逊云科技服务）角色类型，然后选择 **Amazon RDS**。

1. 请选择**用于增强监控的 Amazon RDS 角色**使用案例。

1. Amazon RDS 将为您的角色定义权限。选择**下一步：审核**以继续。

1. 角色名称必须是 Alice 当前拥有的 DatabaseAdministrator 策略中指定的一个。其中一个是 **rds-monitoring-role**。针对 **Role name**（角色名称）输入该信息。

1. （可选）对于**角色描述**，输入新角色的描述。

1. 在检查详细信息后，选择 **Create role**。

1. 现在，Alice 即可在 Amazon RDS 控制台的 **Monitoring**（监控）部分中启用 **RDS Enhanced Monitoring**（RDS 增强监控）。例如，他们可以在创建数据库实例、创建只读副本或修改数据库实例时执行此操作。当他们将 **Enable Enhanced Monitoring**（启用增强监控）设置为 **Yes**（是）时，他们必须输入他们在 **Monitoring Role**（监控角色）框中创建的角色名称（rds-monitoring-role）。

## 示例 2：将用户配置为网络管理员（控制台）
<a name="jf_example_2"></a>

此示例显示将 IAM 用户 Jorge 配置为 [Network Administrator](access_policies_job-functions.md#jf_network-administrator)（网络管理员）需要执行的步骤。它使用该部分的表中的信息来允许 Jorge 监控往来于 VPC 的 IP 流量。它还允许 Jorge 将该信息记录在 CloudWatch Logs 日志中。您将 [NetworkAdministrator](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/job-function/NetworkAdministrator) 策略附加给 Jorge 的 IAM 用户，以便他们可以配置 AWS 网络资源。该策略还允许 Jorge 在您创建流日志时，将名称以 `flow-logs*` 开头的角色传递给 Amazon EC2。此场景与示例 1 不同，这里没有预定义的服务角色类型，因此您必须执行几个不同的步骤。

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择**策略**，在搜索框中输入 **network**，然后按 Enter。

1. 选中 **NetworkAdministrator** 策略旁的单选按钮，然后依次选择**操作**和**附加**。

1. 在用户列表中选择 **Jorge** 旁边的复选框，然后选择**附加策略**。Jorge 现在可以管理 AWS 网络资源了。但是，为了监控 VPC 中的 IP 流量，您必须配置服务角色。

1. 由于您需要创建的服务角色没有预定义的托管策略，您必须先创建一个。在导航窗格中，选择**策略**，然后选择**创建策略**。

1. 在**策略编辑器**部分，选择 **JSON** 选项，然后复制以下 JSON 策略文档中的文本。将该文本粘贴到 **JSON** 文本框中。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Action": [
           "logs:CreateLogGroup",
           "logs:CreateLogStream",
           "logs:PutLogEvents",
           "logs:DescribeLogGroups",
           "logs:DescribeLogStreams"
         ],
         "Effect": "Allow",
         "Resource": "*"
       }
     ]
   }
   ```

------

1.  解决[策略验证](access_policies_policy-validator.md)过程中生成的任何安全警告、错误或常规警告，然后选择**下一步**。
**注意**  
您可以随时在**可视化**和 **JSON** 编辑器选项卡之间切换。不过，如果您进行更改或在**可视化**编辑器中选择**下一步**，IAM 可能会调整您的策略结构以针对可视化编辑器进行优化。有关更多信息，请参阅 [调整策略结构](troubleshoot_policies.md#troubleshoot_viseditor-restructure)。

1. 在**查看并创建**页面上，键入 **vpc-flow-logs-policy-for-service-role** 作为策略名称。查看**此策略中定义的权限**以查看您的策略授予的权限，然后选择**创建策略**以保存您的工作。

   将在托管策略列表中显示新策略，并已准备好附加该策略。

1. 在 IAM 控制台的导航窗格中，选择**角色**，然后选择**创建角色**。

1. 请选择 **AWS Service**（亚马逊云科技服务）角色类型，然后选择 **Amazon EC2**。

1. 请选择 **Amazon EC2** 使用案例。

1. 在**附加权限策略**页面上，选择您之前创建的策略：**vpc-flow-logs-policy-for-service-role**，然后选择**下一步：审核**。

1. 必须使用 Jorge 当前拥有的 NetworkAdministrator 策略所允许的角色名称。允许以 `flow-logs-` 开头的任何名称。在此示例中，对于 **Role name**（角色名称），请输入 **flow-logs-for-jorge**。

1. （可选）对于**角色描述**，输入新角色的描述。

1. 在检查详细信息后，选择 **Create role**。

1. 现在可以配置本场景需要的信任策略。在**角色**页面上，选择 **flow-logs-for-jorge** 角色（名称，而不是复选框）。在新角色的详细信息页面上，选择 **Trust relationships (信任关系)** 选项卡，然后选择 **Edit trust relationship (编辑信任关系)**。

1. 将条目替换为 `ec2.amazonaws.com`，“Service”行改为读取，如下所示：

   ```
           "Service": "vpc-flow-logs.amazonaws.com"
   ```

1. Jorge 现在可以在 Amazon EC2 控制台中为 VPC 或子网创建流日志了。当创建流日志时，请指定 **flow-logs-for-jorge** 角色。该角色拥有创建日志并向其写入数据的权限。

# AWS 全局条件上下文密钥
<a name="reference_policies_condition-keys"></a>

当[主体](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html?icmpid=docs_homepage_addtlrcs#principal)向 AWS 发出[请求](intro-structure.md#intro-structure-request)时，AWS 会将请求信息收集到[请求上下文](intro-structure.md#intro-structure-request)中。您可以使用 JSON 策略的 `Condition` 元素将请求上下文中的键与您在策略中指定的键值进行比较。请求信息由不同的来源提供，包括发出请求的主体、请求所针对的资源以及有关请求本身的元数据。

**全局条件键**可在所有 AWS 服务中使用。虽然这些条件键可以在所有策略中使用，但该键并非在每个请求上下文中都可用。例如，只有当 [AWS 服务主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)直接调用您的资源时，`aws:SourceAccount` 条件键才可用。要了解有关在请求上下文中包含全局键的情况的更多信息，请参阅每个键的**可用性**信息。

某些单独的服务创建自己的条件键，这些键在其他服务的请求上下文中可用。**跨服务条件键**是一种全局条件键，其包含与服务名称相匹配的前缀（例如 `ec2:` 或 `lambda:`），但可跨其他服务使用。

**服务特定条件键**是为与单独的 AWS 服务一起使用而定义的。例如，Amazon S3 允许您使用 `s3:VersionId` 条件键编写策略，以限制对特定版本 Amazon S3 对象的访问。此条件键是该服务所独有的，这意味着其仅适用于对 Amazon S3 服务的请求。对于服务特定的条件键，请参阅 [AWS 服务的操作、资源和条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html)，然后选择要查看其键的服务。

**注意**  
如果您使用只在某些情况下可用的条件键，则可使用 [IfExists](reference_policies_elements_condition_operators.md#Conditions_IfExists) 版本的条件运算符。如果请求上下文中缺少条件键，则策略将无法通过评估。例如，将以下条件块与 `...IfExists` 运算符结合使用以在请求来自特定 IP 范围或特定 VPC 时进行匹配。如果请求上下文中未包含这两个键或其中之一，则条件仍将返回 `true`。仅当请求上下文中包含指定的键时，才检查值。有关在其他运算符不存在键时如何评估策略的更多信息，请参阅[条件运算符](reference_policies_elements_condition_operators.md)。  

```
"Condition": {
    "IpAddressIfExists": {"aws:SourceIp" : ["xxx"] },
    "StringEqualsIfExists" : {"aws:SourceVpc" : ["yyy"]} 
}
```

**重要**  
要将条件与具有多个键值的请求上下文进行比较，必须使用 `ForAllValues` 或者 `ForAnyValue` 集合运算符。仅将集合运算符用于多值条件键。不要将集合运算符用于单值条件键。有关更多信息，请参阅 [多值上下文键的集合运算符](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)。


| 主体的属性 | 角色会话的属性 | 网络的属性 | 资源的属性 | 请求的属性 | 
| --- | --- | --- | --- | --- | 
|  `aws:PrincipalArn` `aws:PrincipalAccount` `aws:PrincipalOrgPaths` `aws:PrincipalOrgID` `aws:PrincipalTag/*tag-key*` `aws:PrincipalIsAWSService` `aws:PrincipalServiceName` `aws:PrincipalServiceNamesList` `aws:PrincipalType` `aws:userid` `aws:username`  |  `aws:AssumedRoot` `aws:FederatedProvider` `aws:TokenIssueTime` `aws:MultiFactorAuthAge` `aws:MultiFactorAuthPresent` `aws:ChatbotSourceArn` `aws:Ec2InstanceSourceVpc` `aws:Ec2InstanceSourcePrivateIPv4` `aws:SourceIdentity` `ec2:RoleDelivery` `ec2:SourceInstanceArn` `glue:RoleAssumedBy` `glue:CredentialIssuingService` `codebuild:BuildArn` `codebuild:ProjectArn` `lambda:SourceFunctionArn` `ssm:SourceInstanceArn` `identitystore:UserId`  |  `aws:SourceIp` `aws:SourceVpc` `aws:SourceVpcArn` `aws:SourceVpce` `aws:VpceAccount` `aws:VpceOrgID` `aws:VpceOrgPaths` `aws:VpcSourceIp`  |  `aws:ResourceAccount` `aws:ResourceOrgID` `aws:ResourceOrgPaths` `aws:ResourceTag/*tag-key*`  |  `aws:CalledVia` `aws:CalledViaFirst` `aws:CalledViaLast` `aws:CalledViaAWSMCP` `aws:ViaAWSService` `aws:ViaAWSMCPService` `aws:CurrentTime` `aws:EpochTime` `aws:referer` `aws:RequestedRegion` `aws:RequestTag/*tag-key*` `aws:TagKeys` `aws:SecureTransport` `aws:SourceAccount` `aws:SourceArn` `aws:SourceOrgID` `aws:SourceOrgPaths` `aws:UserAgent` `aws:IsMcpServiceAction`  | 

## 敏感条件键
<a name="condition-keys-sensitive"></a>

以下条件键被视为敏感信息。在这些条件键中使用通配符没有任何有效的使用场景，即使键值的子字符串带有通配符也是如此。这是因为通配符可以将条件键与任何值匹配，这可能会带来安全风险。
+ `aws:PrincipalAccount`
+ `aws:PrincipalOrgID`
+ `aws:ResourceAccount`
+ `aws:ResourceOrgID`
+ `aws:SourceAccount`
+ `aws:SourceOrgID`
+ `aws:SourceVpc`
+ `aws:SourceVpce`
+ `aws:VpceAccount`
+ `aws:VpceOrgID`

## 主体的属性
<a name="condition-keys-principal-properties"></a>

使用以下条件键可将有关发出请求的主体的详细信息与您在策略中指定的主体属性进行比较。有关可以发出请求的主体的列表，请参阅 [如何指定主体](reference_policies_elements_principal.md#Principal_specifying)。

### aws:PrincipalArn
<a name="condition-keys-principalarn"></a>

使用此键可将发出请求的主体的 [Amazon Resource Name (ARN)](reference_identifiers.md#identifiers-arns) 与您在策略中指定的 ARN 进行比较。对于 IAM 角色，请求上下文将返回角色的 ARN，而不是已代入角色的用户的 ARN。
+ **Availability**（可用性）- 此键包含在所有签名请求的请求上下文中。匿名请求不包括此键。您可以在此条件键中指定以下类型的主体：
  + IAM 角色
  + IAM 用户
  + AWS STS 联合用户主体
  + AWS 账户 根用户
+ **数据类型** – ARN

  AWS 建议在比较 ARN 时使用 [ARN 运算符](reference_policies_elements_condition_operators.md#Conditions_ARN)而不是[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)。
+ **值类型** - 单值
+ **示例值**下表显示了您可以在 `aws:PrincipalArn` 条件键中指定的为不同类型的主体返回的请求上下文值：
  + **IAM 角色** – 请求上下文包含条件键 `aws:PrincipalArn` 的以下值。请勿将所担任角色会话 ARN 指定为此条件键的值。有关所担任角色会话主体的更多信息，请参阅 [角色会话主体](reference_policies_elements_principal.md#principal-role-session)。

    ```
    arn:aws:iam::123456789012:role/role-name
    ```
  + **IAM 用户** – 请求上下文包含条件键 `aws:PrincipalArn` 的以下值。

    ```
    arn:aws:iam::123456789012:user/user-name
    ```
  + **AWS STS 联合用户主体** – 请求上下文包含条件键 `aws:PrincipalArn` 的以下值。

    ```
    arn:aws:sts::123456789012:federated-user/user-name
    ```
  + **AWS 账户 根用户** – 请求上下文包含条件键 `aws:PrincipalArn` 的以下值。当您将根用户 ARN 指定为 `aws:PrincipalArn` 条件键，它仅限制 AWS 账户 根用户的权限。这不同于在基于资源策略的主体元素中指定根用户 ARN，后者会将权限委托给 AWS 账户。有关在基于资源策略的主体元素中指定根用户 ARN 的更多信息，请参阅 [AWS 账户 主体](reference_policies_elements_principal.md#principal-accounts)。

    ```
    arn:aws:iam::123456789012:root
    ```

您可以将根用户 ARN 指定为 AWS Organizations 服务控制策略（SCP）条件键 `aws:PrincipalArn` 的值。SCP 是一种组织策略，用于管理组织中的权限，仅影响组织中的成员账户。SCP 会限制成员账户中的 IAM 用户和角色的权限，包括成员账户的根用户。有关 SCP 对权限影响的更多信息，请参阅*《AWS Organizations 用户指南》*中的[SCP 对权限的影响](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html#scp-effects-on-permissions)。

### aws:PrincipalAccount
<a name="condition-keys-principalaccount"></a>

使用此键可将请求主体所属的账户与您在策略中指定的账户标识符进行比较。对于匿名请求，请求上下文将返回 `anonymous`。
+ **Availability**（可用性）– 此键包含在所有请求（包括匿名请求）的请求上下文中。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型** - 单值

在以下示例中，除了拥有账号 `123456789012` 的主体外，访问会被拒绝。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyAccessFromPrincipalNotInSpecificAccount",
      "Action": "service:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:service:us-east-1:111122223333:resource"
      ],
      "Condition": {
        "StringNotEquals": {
          "aws:PrincipalAccount": [
            "123456789012"
          ]
        }
      }
    }
  ]
}
```

------

### aws:PrincipalOrgPaths
<a name="condition-keys-principalorgpaths"></a>

使用此键可将发出请求的主体的 AWS Organizations 路径与策略中的路径进行比较。该主体可以是 IAM 用户、IAM 角色、AWS STS 联合用户主体或 AWS 账户根用户。在策略中，此条件键可确保请求者是 AWS Organizations 中指定组织根或组织单位 (OU) 的账户成员。AWS Organizations 路径是 AWS Organizations 实体结构的文本表示形式。有关使用和了解路径的更多信息，请参阅[了解 AWS Organizations 实体路径](access_policies_last-accessed-view-data-orgs.md#access_policies_last-accessed-viewing-orgs-entity-path)。
+ **Availability**（可用性）- 仅在主体是企业成员时，才将此键包含在请求上下文中。匿名请求不包括此键。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)（列表）
+ **值类型**— 多值

**注意**  
组织 ID 是全局唯一的，但 OU ID 和根目录 ID 仅在组织内是唯一的。这意味着没有两个组织具有相同的组织 ID。但是，另一个组织可能具有与您的组织相同的 OU 或根目录 ID。我们建议您在指定 OU 或根目录时始终包含组织 ID。

例如，以下条件返回账户中主体的 `true`，该主体直接附加到 `ou-ab12-22222222` OU 但不在其子 OU 中。

```
"Condition" : { "ForAnyValue:StringEquals" : {
     "aws:PrincipalOrgPaths":["o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/"]
}}
```

以下条件为账户中的主体返回 `true`，该主体直接附加到 OU 或其任何子 OU。包含通配符时，您必须使用 `StringLike` 条件运算符。

```
"Condition" : { "ForAnyValue:StringLike" : {
     "aws:PrincipalOrgPaths":["o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/*"]
}}
```

以下条件为账户中的主体返回 `true`，该主体直接附加到任意子 OU，但不会直接附加至父 OU。以前的条件适用于 OU 或任何子 OU。以下条件仅适用于子 OU（以及这些子 OU 的任何子 OU）。

```
"Condition" : { "ForAnyValue:StringLike" : {
     "aws:PrincipalOrgPaths":["o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/ou-*"]
}}
```

以下条件允许访问 `o-a1b2c3d4e5` 组织中的各个主体，而无论其父 OU 如何。

```
"Condition" : { "ForAnyValue:StringLike" : {
     "aws:PrincipalOrgPaths":["o-a1b2c3d4e5/*"]
}}
```

`aws:PrincipalOrgPaths` 是一个多值条件键。多值键在请求上下文中可以有多个值。在您为 `ForAnyValue` 条件运算符使用多个值时，主体的路径必须与策略中列出的其中一个路径匹配。有关多值条件键的更多信息，请参阅[多值上下文键的集合运算符](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)。

```
    "Condition": {
        "ForAnyValue:StringLike": {
            "aws:PrincipalOrgPaths": [
                "o-a1b2c3d4e5/r-ab12/ou-ab12-33333333/*",
                "o-a1b2c3d4e5/r-ab12/ou-ab12-22222222/*"
            ]
        }
    }
```

### aws:PrincipalOrgID
<a name="condition-keys-principalorgid"></a>

使用此键可将请求主体所属的 AWS Organizations 中组织的标识符与策略中指定的标识符进行比较。
+ **Availability**（可用性）- 仅在主体是企业成员时，才将此键包含在请求上下文中。匿名请求不包括此键。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型**— 单值

此全局键提供了列出组织中的所有 AWS 账户的所有账户 ID 的替代方法。您可以使用此条件键来简化在[基于资源的策略](access_policies_identity-vs-resource.md)中指定 `Principal` 元素的过程。您可以在条件元素中指定[组织 ID](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_details.html)。当您添加和删除账户时，包含 `aws:PrincipalOrgID` 键的策略将自动包括正确的账户，并且不需要手动更新。

例如，以下 Amazon S3 存储桶策略允许 `o-xxxxxxxxxxx` 企业中的任何账户成员将对象添加到 `amzn-s3-demo-bucket` 存储桶中。

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

****  

```
 {
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Sid": "AllowPutObject",
    "Effect": "Allow",
    "Principal": "*",
    "Action": "s3:PutObject",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
    "Condition": {"StringEquals":
      {"aws:PrincipalOrgID":"o-xxxxxxxxxxx"}
    }
  }
}
```

------

**注意**  
此全局条件也适用于 AWS 企业的管理账户。此策略防止指定组织之外的所有主体访问 Amazon S3 存储桶。这包括与您的内部资源交互的任何 AWS 服务，如将日志数据发送到 Amazon S3 存储桶的 AWS CloudTrail。了解如何安全地授予 AWS 服务的访问权限，请参阅 [aws:PrincipalIsAWSService](#condition-keys-principalisawsservice)。

有关 AWS Organizations 的更多信息，请参阅《AWS Organizations 用户指南》中的 [什么是 AWS Organizations？](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)**。

### aws:PrincipalTag/*tag-key*
<a name="condition-keys-principaltag"></a>

使用此键可将附加到发出请求的主体的标签与您在策略中指定的标签进行比较。如果已为主体附加多个标签，则请求上下文会为每个附加的标签键包含一个 `aws:PrincipalTag` 键。
+ **可用性** - 仅在主体使用具有附加标签的 IAM 用户时，才将此键包含在请求上下文中。对于主体，如果使用附加了标签或[会话标签](id_session-tags.md)的 IAM 角色，则应包括它。匿名请求不包括此键。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型**— 单值

您可采用键/值对的形式向用户或角色添加自定义属性。有关 IAM 标签的更多信息，请参阅 [AWS Identity and Access Management 资源的标签](id_tags.md)。您可以将 `aws:PrincipalTag` 用于针对 AWS 主体的[访问控制](access_iam-tags.md#access_iam-tags_control-principals)。

此示例说明如何创建基于角色的策略，以允许具有 **department=hr** 标签的用户管理 IAM 用户、组或角色。要使用此策略，请将示例策略中的*斜体占位符文本*替换为您自己的信息。然后，按照[创建策略](access_policies_create.md)或[编辑策略](access_policies_manage-edit.md)中的说明操作。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:Get*",
        "iam:List*",
        "iam:Generate*"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalTag/department": "hr"
        }
      }
    }
  ]
}
```

------

### aws:PrincipalIsAWSService
<a name="condition-keys-principalisawsservice"></a>

使用此密钥可检查对您资源的调用是否直接由 AWS [服务主体](reference_policies_elements_principal.md#principal-services)提出。例如，AWS CloudTrail 使用服务主体 `cloudtrail.amazonaws.com` 将日志写入 Amazon S3 存储桶。当服务使用服务主体对资源执行直接操作时，请求上下文密钥将设置为 true。如果服务使用 IAM 主体的凭证代表主体发出请求时，上下文密钥设置为 false。如果服务使用[服务角色或服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#id_roles_terms-and-concepts)代表主体进行调用，则请求也会被设为 false。
+ **可用性** — 此密钥存在于所有使用 AWS 凭证的签名 API 请求的请求上下文中。匿名请求不包括此键。
+ **数据类型** – [布尔值](reference_policies_elements_condition_operators.md#Conditions_Boolean)
+ **值类型**— 单值

您可以使用此条件键限制对可信身份和预期网络位置的访问，同时安全地授予对 AWS 服务的访问权限。

在以下 Amazon S3 存储桶策略示例中，对存储桶的访问受到限制，除非请求源自 `vpc-111bbb22` 或者来自服务主体，例如 CloudTrail。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "ExpectedNetworkServicePrincipal",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/AWSLogs/AccountNumber/*",
      "Condition": {
        "StringNotEqualsIfExists": {
          "aws:SourceVpc": "vpc-111bbb22"
        },
        "BoolIfExists": {
          "aws:PrincipalIsAWSService": "false"
        }
      }
    }
  ]
}
```

------

在以下视频中，了解有关如何在策略中使用 `aws:PrincipalIsAWSService` 条件键的更多信息。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/gv-_H8a42G4/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/gv-_H8a42G4)


### aws:PrincipalServiceName
<a name="condition-keys-principalservicename"></a>

使用此密钥可以将策略中的[服务主体](reference_policies_elements_principal.md#principal-services)名称与正在向您的资源发出请求的服务主体进行比较。您可以使用此密钥来检查此调用是否由特定的服务主体提出。当服务主体向您的资源发出直接请求时，`aws:PrincipalServiceName` 密钥将包含服务主体的名称。例如，AWS CloudTrail 服务主体的名称是 `cloudtrail.amazonaws.com`。
+ **可用性** — 当调用由 AWS 服务主体提出时，此密钥将存在于请求中。此密钥不会在任何其他情况中出现，包括以下情况：
  + 如果服务使用[服务角色或服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#id_roles_terms-and-concepts)代表主体进行调用。
  + 如果服务使用 IAM 主体的凭证代表主体发出请求。
  + 如果调用是由 IAM 主体直接发出的。
  + 如果调用是由匿名请求者发出的。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型**— 单值

您可以使用此条件键限制对可信身份和预期网络位置的访问，同时安全地授予对 AWS 服务的访问权限。

在以下 Amazon S3 存储桶策略示例中，对存储桶的访问受到限制，除非请求源自 `vpc-111bbb22` 或者来自服务主体，例如 CloudTrail。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "ExpectedNetworkServicePrincipal",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/AWSLogs/AccountNumber/*",
      "Condition": {
        "StringNotEqualsIfExists": {
          "aws:SourceVpc": "vpc-111bbb22",
          "aws:PrincipalServiceName": "cloudtrail.amazonaws.com"
        }
      }
    }
  ]
}
```

------

### aws:PrincipalServiceNamesList
<a name="condition-keys-principalservicenameslist"></a>

此密钥提供了属于此服务的所有[服务主体](reference_policies_elements_principal.md#principal-services)名称列表。这是一个高级条件键。您可以用它来限制服务仅从特定地区访问您的资源。某些服务可能会创建区域服务主体，以指示特定区域内服务的特定实例。您可以将对资源的访问限制为服务的特定实例。当服务主体向您的资源发出直接请求时，`aws:PrincipalServiceNamesList` 会包含与服务的区域实例关联的所有服务主体名称的无序列表。
+ **可用性** — 当调用由 AWS 服务主体提出时，此密钥将存在于请求中。此密钥不会在任何其他情况中出现，包括以下情况：
  + 如果服务使用[服务角色或服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#id_roles_terms-and-concepts)代表主体进行调用。
  + 如果服务使用 IAM 主体的凭证代表主体发出请求。
  + 如果调用是由 IAM 主体直接发出的。
  + 如果调用是由匿名请求者发出的。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)（列表）
+ **值类型**— 多值

`aws:PrincipalServiceNamesList` 是一个多值条件键。多值键在请求上下文中可以有多个值。对于此键，您必须将 `ForAnyValue` 或者 `ForAllValues` 集合运算符与[字符串条件运算符](reference_policies_elements_condition_operators.md#Conditions_String)搭配使用。有关多值条件键的更多信息，请参阅[多值上下文键的集合运算符](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)。

### aws:PrincipalType
<a name="condition-keys-principaltype"></a>

使用此键可将发出请求的主体的类型与您在策略中指定的主体类型进行比较。有关更多信息，请参阅 [如何指定主体](reference_policies_elements_principal.md#Principal_specifying)。有关 `principal` 密钥值的具体示例，请参阅 [主体键值](reference_policies_variables.md#principaltable)。
+ **Availability**（可用性）– 此键包含在所有请求（包括匿名请求）的请求上下文中。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型** - 单值

### aws:userid
<a name="condition-keys-userid"></a>

使用此键可将请求者的主体标识符与您在策略中指定的 ID 进行比较。对于 IAM 用户，请求上下文值是用户 ID。对于 IAM 角色，此值的格式可能有所不同。有关如何为不同的主体显示信息的详细信息，请参阅[如何指定主体](reference_policies_elements_principal.md#Principal_specifying)。有关 `principal` 密钥值的具体示例，请参阅 [主体键值](reference_policies_variables.md#principaltable)。
+ **Availability**（可用性）– 此键包含在所有请求（包括匿名请求）的请求上下文中。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型** - 单值

### aws:username
<a name="condition-keys-username"></a>

使用此键可将请求者的用户名与您在策略中指定的用户名进行比较。有关如何为不同的主体显示信息的详细信息，请参阅[如何指定主体](reference_policies_elements_principal.md#Principal_specifying)。有关 `principal` 密钥值的具体示例，请参阅 [主体键值](reference_policies_variables.md#principaltable)。
+ **可用性** - 此键始终包含在 IAM 用户的请求上下文中。匿名请求和使用 AWS 账户根用户 或 IAM 角色发出的请求不包含此键。使用 IAM Identity Center 凭证发出的请求不会在上下文中包含此键。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型** - 单值

## 角色会话的属性
<a name="condition-keys-role-session-properties"></a>

使用以下条件键来比较生成会话时角色会话的属性。只有拥有角色会话或联合用户主体凭证的主体发出请求时，这些条件键才可用。这些条件键的值嵌入角色的会话令牌中。

[角色](reference_policies_elements_principal.md#principal-roles)是一种主体。您还可以使用 [主体的属性](#condition-keys-principal-properties) 部分中的条件键在角色发出请求时评估角色的属性。

### aws:AssumedRoot
<a name="condition-keys-assumedroot"></a>

使用此键可检查是否已使用 [AssumeRoot](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoot.html) 发出请求。`AssumeRoot` 返回特权根用户会话的短期凭证，您可以使用该凭证对组织中的成员账户执行特权操作。有关更多信息，请参阅 [集中管理成员账户的根访问权限](id_root-user.md#id_root-user-access-management)。
+ **可用性** – 仅当主体使用来自 [AssumeRoot](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoot.html) 的凭证发出请求时，此键才包含在请求上下文中。
+ **数据类型** – [布尔值](reference_policies_elements_condition_operators.md#Conditions_Boolean)
+ **值类型** - 单值

在以下示例中，当用作服务控制策略时，拒绝在 AWS Organizations 成员账户中使用根用户的长期凭证。该策略不会拒绝 `AssumeRoot` 会话采取 `AssumeRoot` 会话允许的操作。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
       {
          "Effect":"Deny",
          "Action":"*",
          "Resource": "*",
          "Condition":{
             "ArnLike":{
                "aws:PrincipalArn":[
                   "arn:aws:iam::*:root"
                ]
             },
             "Null":{
                "aws:AssumedRoot":"true"
             }
          }
       }
    ]
 }
```

------

### aws:FederatedProvider
<a name="condition-keys-federatedprovider"></a>

使用此密钥将主体的发布身份提供程序 (IdP) 与您在策略中指定的 IdP 进行比较。这意味着 IAM 角色使用 [https://docs.aws.amazon.com//STS/latest/APIReference/API_AssumeRoleWithWebIdentity](https://docs.aws.amazon.com//STS/latest/APIReference/API_AssumeRoleWithWebIdentity) AWS STS 操作代入。使用生成的角色会话的临时证书发出请求时，请求上下文将标识对原始联合身份进行身份验证的 IdP。
+ **可用性** – 此键存在于使用 OpenID Connect (OIDC) 提供程序代入的角色的角色会话中，以及当使用 OIDC 提供程序调用 `AssumeRoleWithWebIdentity` 时的角色信任策略中。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)\$1
+ **值类型** - 单值

\$1 数据类型取决于您的 IdP：
+ 如果您使用的是内置 AWS IdP，比如 [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html)，则密钥值将是一个**字符串**。密钥值可能如下所示：`cognito-identity.amazonaws.com`。
+ 如果您使用的是没有内置于 AWS 的 IdP 、比如 [https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/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) 或 [Amazon EKS](https://docs.aws.amazon.com//eks/latest/userguide/associate-service-account-role.html)，则密钥值将为 **ARN**。密钥值可能如下所示：`arn:aws:iam::111122223333:oidc-provider/oidc.eks.region.amazonaws.com/id/OIDC_Provider_ID`。

有关外部 IdP 和 `AssumeRoleWithWebIDentity` 的更多信息，请参阅 [常见场景](id_federation_common_scenarios.md)。有关更多信息，请参阅 [角色会话主体](reference_policies_elements_principal.md#principal-role-session)。

### aws:TokenIssueTime
<a name="condition-keys-tokenissuetime"></a>

使用此键可将临时安全凭证的颁发日期和时间与您在策略中指定的日期和时间进行比较。
+ **Availability**（可用性）- 仅在主体使用临时凭证发出请求时，才将此键包含在请求上下文中。使用访问密钥发出的 AWS CLI、AWS API 或 AWS 开发工具包请求中未提供此键。
+ **数据类型** – [日期](reference_policies_elements_condition_operators.md#Conditions_Date)
+ **值类型**— 单值

要了解哪些服务支持使用临时凭证，请参阅[使用 IAM 的 AWS 服务](reference_aws-services-that-work-with-iam.md)。

### aws:MultiFactorAuthAge
<a name="condition-keys-multifactorauthage"></a>

使用此键可将自使用 MFA 向请求主体授权以来的秒数与您在策略中指定的数量进行比较。有关 MFA 的更多信息，请参阅 [IAM 中的 AWS 多重身份验证](id_credentials_mfa.md)。

**重要**  
对于联合身份或使用访问密钥签署 AWS CLI、AWS API 或 AWS SDK 请求而发出的请求，此条件键不存在。要了解有关使用临时安全凭证为 API 操作添加 MFA 保护的更多信息，请参阅 [使用 MFA 保护 API 访问](id_credentials_mfa_configure-api-require.md)。  
要检查是否使用 MFA 来验证 IAM 联合身份，您可以将身份提供者的身份验证方法作为会话标签传递给 AWS。有关更多信息，请参阅 [在 AWS STS 中传递会话标签](id_session-tags.md)。要对 IAM Identity Center 身份强制执行 MFA，您可以[启用访问控制属性](https://docs.aws.amazon.com/singlesignon/latest/userguide/configure-abac.html)，以使用身份提供者的身份验证方法将 SAML 断言声明传递给 IAM Identity Center。
+ **可用性** – 仅在主体使用[临时安全凭证](id_credentials_temp.md)发出请求时，才将此键包含在请求上下文中。带 MFA 条件的策略可附加到：
  + 对于 IAM 用户或组：
  + Amazon S3 存储桶、Amazon SQS 队列或 Amazon SNS 主题等资源
  + 可由用户担任的 IAM 角色的信任策略
+ **数据类型** – [数字](reference_policies_elements_condition_operators.md#Conditions_Numeric)
+ **值类型** - 单值

### aws:MultiFactorAuthPresent
<a name="condition-keys-multifactorauthpresent"></a>

使用此键可检查是否已使用多重身份验证（MFA）来验证发出请求的[临时安全凭证](id_credentials_temp.md)。

**重要**  
对于联合身份或使用访问密钥签署 AWS CLI、AWS API 或 AWS SDK 请求而发出的请求，此条件键不存在。要了解有关使用临时安全凭证为 API 操作添加 MFA 保护的更多信息，请参阅 [使用 MFA 保护 API 访问](id_credentials_mfa_configure-api-require.md)。  
要检查是否使用 MFA 来验证 IAM 联合身份，您可以将身份提供者的身份验证方法作为会话标签传递给 AWS。有关更多信息，请参阅 [在 AWS STS 中传递会话标签](id_session-tags.md)。要对 IAM Identity Center 身份强制执行 MFA，您可以[启用访问控制属性](https://docs.aws.amazon.com/singlesignon/latest/userguide/configure-abac.html)，以使用身份提供者的身份验证方法将 SAML 断言声明传递给 IAM Identity Center。
+ **Availability**（可用性）- 仅在主体使用临时凭证发出请求时，才将此键包含在请求上下文中。带 MFA 条件的策略可附加到：
  + 对于 IAM 用户或组：
  + Amazon S3 存储桶、Amazon SQS 队列或 Amazon SNS 主题等资源
  + 可由用户担任的 IAM 角色的信任策略
+ **数据类型** – [布尔值](reference_policies_elements_condition_operators.md#Conditions_Boolean)
+ **值类型** - 单值

临时凭证用于验证具有来自 [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) 或 [GetSessionToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetSessionToken.html) 的临时令牌的 IAM 角色和 IAM 用户，以及 AWS 管理控制台 用户。

IAM 用户访问密钥是长期凭证，但在某些情况下，AWS 会代表 IAM 用户创建临时凭证以执行操作。在这些情况下，`aws:MultiFactorAuthPresent` 密钥存在于请求中，并设置为值 `false`。有两种常见情况可能会发生这种情形：
+ AWS 管理控制台中的 IAM 用户在不知情的情况下使用了临时凭证。用户使用其作为长期凭证的用户名和密码登录控制台。但在后台，控制台代表用户生成临时凭证。
+ 如果 IAM 用户对某个 AWS 服务进行调用，则该服务将重新使用该用户的凭证向其他服务发出另一个请求。例如，当调用 Athena 以访问 Amazon S3 存储桶或使用 CloudFormation 创建 Amazon EC2 实例时。对于后续请求，AWS 使用临时凭证。

要了解哪些服务支持使用临时凭证，请参阅[使用 IAM 的 AWS 服务](reference_aws-services-that-work-with-iam.md)。

在使用长期凭证（例如，用户访问密钥对）调用 API 或 CLI 命令时，不提供 `aws:MultiFactorAuthPresent` 键。因此我们建议，当您检查此键时使用 `...IfExists` 版本的条件运算符。

必须理解，以下 `Condition` 元素***不是*** 检查请求是否使用 MFA 进行身份验证的可靠方式。

```
#####   WARNING: NOT RECOMMENDED   #####
"Effect" : "Deny",
"Condition" : { "Bool" : { "aws:MultiFactorAuthPresent" : "false" } }
```

`Deny` 效果、`Bool` 元素和 `false` 值的这一组合可拒绝可以使用但未使用 MFA 进行身份验证的请求。这仅适用于支持使用 MFA 的临时凭证。此语句不会拒绝对使用长期凭证发出的请求或使用 MFA 进行身份验证的请求的访问权限。使用此示例时务必要谨慎，因为其逻辑复杂，并且未对是否实际使用 MFA 身份验证进行测试。

此外，请勿使用 `Deny` 效果、`Null` 元素和 `true` 的组合，因为该组合行为方式相同，但逻辑更加复杂。

**建议的组合**  
我们建议您使用 [`BoolIfExists`](reference_policies_elements_condition_operators.md#Conditions_IfExists) 运算符检查是否使用 MFA 对请求进行身份验证。

```
"Effect" : "Deny",
"Condition" : { "BoolIfExists" : { "aws:MultiFactorAuthPresent" : "false" } }
```

`Deny`、`BoolIfExists` 和 `false` 的组合将拒绝未使用 MFA 进行身份验证的请求。具体来说，它拒绝来自不包含 MFA 的临时凭证的请求。它还拒绝使用长期凭证发出的请求，例如使用访问密钥执行的 AWS CLI 或 AWS API 操作。`*IfExists` 运算符用于检查 `aws:MultiFactorAuthPresent` 键是否存在以及它是否可以存在（由其存在性指示）。当您要拒绝未使用 MFA 进行身份验证的任何请求时，可使用此运算符。这是更安全的，但可能会中断使用访问密钥访问 AWS CLI 或 AWS API 的任何代码或脚本。

**替代组合**  
您还可以使用 [`BoolIfExists`](reference_policies_elements_condition_operators.md#Conditions_IfExists) 运算符以允许通过 MFA 进行身份验证的请求以及使用长期凭证发出的 AWS CLI 或 AWS API 请求。

```
"Effect" : "Allow",
"Condition" : { "BoolIfExists" : { "aws:MultiFactorAuthPresent" : "true" } }
```

此条件将匹配键存在**或**键不存在的情况。`Allow`、`BoolIfExists` 和 `true` 的组合允许已使用 MFA 进行身份验证的请求或无法使用 MFA 进行身份验证的请求。这意味着，在请求者使用其长期访问密钥时，允许执行 AWS CLI、AWS API 和 AWS 开发工具包操作。该组合不允许来自临时凭证的请求，这些凭证可能包含 MFA，但未包含 MFA。

在使用 IAM 控制台可视化编辑器创建策略并选择**需要 MFA** 时，将应用该组合。该设置要求使用 MFA 进行控制台访问，但允许在没有 MFA 的情况下进行编程访问。

或者，您也可以使用 `Bool` 运算符，以便仅在使用 MFA 进行身份验证时允许编程和控制台请求。

```
"Effect" : "Allow",
"Condition" : { "Bool" : { "aws:MultiFactorAuthPresent" : "true" } }
```

`Allow`、`Bool` 和 `true` 的组合仅允许已进行 MFA 身份验证的请求。这仅适用于支持使用 MFA 的临时凭证。该语句不允许访问使用长期访问密钥发出的请求，也不允许访问在没有 MFA 的情况下使用临时凭证发出的请求。

***请勿***使用策略进行类似以下的构建，以检查 MFA 密钥是否存在：

```
#####   WARNING: USE WITH CAUTION   #####

"Effect" : "Allow",
"Condition" : { "Null" : { "aws:MultiFactorAuthPresent" : "false" } }
```

`Allow` 效果、`Null` 元素和 `false` 值的组合仅允许可以使用 MFA 进行身份验证的请求，而不考虑该请求是否已实际进行身份验证。这组合允许使用临时凭证发出的所有请求，而对长期凭证拒绝访问权限。使用此示例时务必要谨慎，因为它未对是否实际使用 MFA 身份验证进行测试。

### aws:ChatbotSourceArn
<a name="condition-keys-chatbotsourcearn"></a>

使用此键，可将主体设置的来源聊天配置 ARN 跟您在与频道配置关联的 IAM 角色策略中指定的聊天配置 ARN 进行比较。您可以根据聊天应用程序中的 Amazon Q 开发者版发起的代入角色会话对请求进行授权。
+ **可用性** – 每次代入角色会话时，此键都将包含在聊天应用程序中的 Amazon Q 开发者版服务发起的请求上下文中。键值是聊天配置 ARN，例如[从聊天频道运行 AWS CLI 命令](https://docs.aws.amazon.com/chatbot/latest/adminguide/chatbot-cli-commands.html)时。
+ **数据类型** – [ARN](reference_policies_elements_condition_operators.md#Conditions_ARN)
+ **值类型** - 单值
+ **示例值** – `arn:aws::chatbot::123456789021:chat-configuration/slack-channel/private_channel`

以下策略拒绝 Amazon S3 将所有来自 Slack 频道的请求放入指定存储桶。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ExampleS3Deny",
            "Effect": "Deny",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "ArnLike": {
                      "aws:ChatbotSourceArn": "arn:aws:chatbot::*:chat-configuration/slack-channel/*"
                }
            }
        }
    ]
}
```

------

### aws:Ec2InstanceSourceVpc
<a name="condition-keys-ec2instancesourcevpc"></a>

此键标识将 Amazon EC2 IAM 角色凭证传递到的 VPC。您可以在具有 [`aws:SourceVPC`](#condition-keys-sourcevpc) 全局键的策略中使用此键，检查从中发出调用的 VPC (`aws:SourceVPC`) 是否与将凭证传送到的 VPC (`aws:Ec2InstanceSourceVpc`) 相匹配。
+ **可用性** – 仅在请求者使用 Amazon EC2 角色凭证签署请求时，才将此键包含在请求上下文中。它可以用于 IAM policy、服务控制策略、VPC 端点策略和资源策略。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型** - 单值

此键可以与 VPC 标识符值一起使用，但在用作与 `aws:SourceVpc` 上下文键组合的变量时最有用。只有当请求者使用 VPC 端点发出请求时，才将 `aws:SourceVpc` 上下文键包含在请求上下文中。搭配使用 `aws:Ec2InstanceSourceVpc` 和 `aws:SourceVpc` 时，您能够更广泛地使用 `aws:Ec2InstanceSourceVpc`，因为它可以比较通常一起变化的值。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "RequireSameVPC",
      "Effect": "Deny",
      "Action": "*",
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
            "aws:SourceVpc": "${aws:Ec2InstanceSourceVpc}"
        },
        "Null": {
          "ec2:SourceInstanceARN": "false"
        },
        "BoolIfExists": {
          "aws:ViaAWSService": "false"
        }
      }
    }
  ]
}
```

------

在上面的示例中，如果 `aws:SourceVpc` 值不等于 `aws:Ec2InstanceSourceVpc` 值，则访问将被拒绝。通过测试 `ec2:SourceInstanceARN` 条件键是否存在，该策略声明仅限于用作 Amazon EC2 实例角色的角色。

该策略使用 `aws:ViaAWSService`，在代表您的 Amazon EC2 实例角色发出请求时允许 AWS 对请求进行授权。例如，当您从 Amazon EC2 实例向加密的 Amazon S3 存储桶发出请求时，Amazon S3 会代表您调用 AWS KMS。向 AWS KMS 发出请求时，某些键不存在。

### aws:Ec2InstanceSourcePrivateIPv4
<a name="condition-keys-ec2instancesourceprivateip4"></a>

此键标识 Amazon EC2 IAM 角色凭证传送到的主弹性网络接口的私有 IPv4 地址。您必须将此条件键与其配套键 `aws:Ec2InstanceSourceVpc` 一起使用，以确保您拥有 VPC ID 和源私有 IP 的全局唯一组合。将此键与 `aws:Ec2InstanceSourceVpc` 搭配使用可确保请求是从凭证传送到的同一私有 IP 地址发出的。
+ **可用性** – 仅在请求者使用 Amazon EC2 角色凭证签署请求时，才将此键包含在请求上下文中。它可以用于 IAM policy、服务控制策略、VPC 端点策略和资源策略。
+ **数据类型** – [IP 地址](reference_policies_elements_condition_operators.md#Conditions_IPAddress)
+ **值类型** - 单值

**重要**  
此键不应在 `Allow` 语句中单独使用。顾名思义，私有 IP 地址不是全局唯一的。每次使用 `aws:Ec2InstanceSourcePrivateIPv4` 键来指定可以从哪个 VPC 使用 Amazon EC2 实例凭证时，都应使用 `aws:Ec2InstanceSourceVpc` 键。

以下示例是一个服务控制策略 (SCP)，除非请求通过与角色凭证位于同一 VPC 中的 VPC 端点到达，否则该策略将拒绝访问所有资源。在此示例中，`aws:Ec2InstanceSourcePrivateIPv4` 根据源 IP 将凭证源限制为特定实例。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action":  "*",
            "Resource": "*",
            "Condition": {
                "StringNotEquals": {
                    "aws:Ec2InstanceSourceVpc": "${aws:SourceVpc}"
                },                
                "Null": {
                    "ec2:SourceInstanceARN": "false"
                },
                "BoolIfExists": {
                    "aws:ViaAWSService": "false"
                }
            }
        },
        {
            "Effect": "Deny",
            "Action":  "*",
            "Resource": "*",
            "Condition": {
                "StringNotEquals": {
                    "aws:Ec2InstanceSourcePrivateIPv4": "${aws:VpcSourceIp}"
                },                               
                "Null": {
                    "ec2:SourceInstanceARN": "false"
                },
                "BoolIfExists": {
                    "aws:ViaAWSService": "false"
                }
            }
        }
    ]
}
```

------

### aws:SourceIdentity
<a name="condition-keys-sourceidentity"></a>

使用此密钥可将主体设置的源身份与您在策略中指定的源身份进行比较。
+ **可用性** — 在使用任何 AWS STS 担任角色 CLI 命令或 AWS STS `AssumeRole`API 操作担任角色时设置好源身份后，此密钥将会被包含在请求中。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型**— 单值

您可以在策略中使用此密钥来允许 AWS 中的主体操作，这些主体在担任角色时设置了源身份。角色指定源身份的活动显示在 [AWS CloudTrail](cloudtrail-integration.md#cloudtrail-integration_signin-tempcreds)。这使管理员能够更轻松地确定什么角色在 AWS 中执行了操作。

与 [`sts:RoleSessionName`](reference_policies_iam-condition-keys.md#ck_rolesessionname) 不同，在设置源身份后，无法更改该值。它存在于角色执行的所有操作的请求上下文中。当您使用会话凭证担任另一个角色时，该值将保留到后续角色会话中。从一个角色代入另一个角色的过程称为[角色链](id_roles.md#iam-term-role-chaining)。

当主体使用任何 AWS STS 担任角色 CLI 命令或 AWS STS `AssumeRole` API 操作担任角色并初次设置源身份时，[`sts:SourceIdentity`](reference_policies_iam-condition-keys.md#ck_sourceidentity) 密钥将会出现在请求中。`aws:SourceIdentity`键存在于对具有源身份设置的角色会话执行的任何操作请求中。

以下账户 `111122223333` 中适用于 `CriticalRole` 的角色信任策略包含一个条件适用于 `aws:SourceIdentity` 的条件，可防止未将源身份设置为 Saanvi 或 Diego 主体担任该角色。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AssumeRoleIfSourceIdentity",
            "Effect": "Allow",
            "Principal": {"AWS": "arn:aws:iam::123456789012:role/CriticalRole"},
            "Action": [
                "sts:AssumeRole",
                "sts:SetSourceIdentity"
            ],
            "Condition": {
                "StringLike": {
                    "aws:SourceIdentity": ["Saanvi","Diego"]
                }
            }
        }
    ]
}
```

------

要了解有关使用源身份信息的更多信息，请参阅 [监控和控制使用所担任角色执行的操作](id_credentials_temp_control-access_monitor.md)。

### ec2:RoleDelivery
<a name="condition-keys-ec2-role-delivery"></a>

使用此键可将签名请求中的实例元数据服务版本与 Amazon EC2 的 IAM 角色凭证进行比较。实例元数据服务根据以下条件区分 IMDSv1 和 IMDSv2 请求：对于任何给定请求，`PUT` 或 `GET` 标头（对于 IMDSv2 是唯一的）在该请求中是否存在。
+ **可用性** – 仅在 Amazon EC2 实例创建角色会话时，才将此键包含在请求上下文中。
+ **数据类型** – [数字](reference_policies_elements_condition_operators.md#Conditions_Numeric)
+ **值类型** - 单值
+ **示例值** – 1.0, 2.0

您可以在每个实例上配置实例元数据服务（IMDS），以确保本地代码或用户必须使用 IMDSv2。在指定必须使用 IMDSv2 时，IMDSv1 不再起作用。
+ 实例元数据服务版本 1（IMDSv1）– 一种请求/响应方法 
+ 实例元数据服务版本 2 (IMDSv2)：一种面向会话的方法

有关如何配置实例以使用 IMDSv2 的信息，请参阅[配置实例元数据选项](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html)。

在以下示例中，如果请求上下文中的 ec2:RoleDelivery 值为 1.0（IMDSv1），则访问将被拒绝。此策略语句可广泛应用，因为如果请求未由 Amazon EC2 角色证书签名，则其为无效。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
               {
            "Sid": "RequireAllEc2RolesToUseV2",
            "Effect": "Deny",
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "NumericLessThan": {
                    "ec2:RoleDelivery": "2.0"
                }
            }
        }
    ]
}
```

------

有关更多信息，请参阅[使用实例元数据的示例策略](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ExamplePolicies_EC2.html#iam-example-instance-metadata)。

### ec2:SourceInstanceArn
<a name="condition-keys-ec2-source-instance-arn"></a>

使用此键可以比较生成角色会话的实例的 ARN。
+ **可用性** – 仅在 Amazon EC2 实例创建角色会话时，才将此键包含在请求上下文中。
+ **数据类型** – [ARN](reference_policies_elements_condition_operators.md#Conditions_ARN)
+ **值类型** - 单值
+ **示例值** – arn:aws::ec2:us-west-2:111111111111:instance/instance-id

对于策略示例，请参阅[允许特定实例查看其他 AWS 服务中的资源](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ExamplePolicies_EC2.html#iam-example-source-instance)。

### glue:RoleAssumedBy
<a name="condition-keys-glue-role-assumed-by"></a>

AWS Glue 服务为每个 AWS API 请求设置此条件键，其中 AWS Glue 使用服务角色代表客户发出请求（不是通过作业或开发人员端点，而是直接通过 AWS Glue 服务发出请求）。使用此键验证对 AWS 资源的调用是否来自 AWS Glue 服务。
+ **可用性** – 当 AWS Glue 代表客户使用服务角色发出请求时，此键包含在请求上下文中。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型** - 单值
+ **示例值** – 此键始终设置为 `glue.amazonaws.com`。

以下示例添加了一个允许 AWS Glue 服务从 Amazon S3 存储桶获取对象的条件。

```
{
    "Effect": "Allow",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
    "Condition": {
        "StringEquals": {
            "glue:RoleAssumedBy": "glue.amazonaws.com"
        }
    }
}
```

### glue:CredentialIssuingService
<a name="condition-keys-glue-credential-issuing"></a>

AWS Glue 服务使用来自作业或开发人员端点的服务角色为每个 AWS API 请求设置此键。使用此键验证对 AWS 资源的调用是来自 AWS Glue 作业还是开发人员端点。
+ **可用性** – 当 AWS Glue 发出来自作业或开发人员端点的请求时，此键包含在请求上下文中。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型** - 单值
+ **示例值** – 此键始终设置为 `glue.amazonaws.com`。

以下示例添加一个附加到 AWS Glue 作业使用的 IAM 角色的条件。这确保了可以基于角色会话是否用于 AWS Glue 任务运行时环境而允许/拒绝某些操作。

```
{
    "Effect": "Allow",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
    "Condition": {
        "StringEquals": {
            "glue:CredentialIssuingService": "glue.amazonaws.com"
        }
    }
}
```

### codebuild:BuildArn
<a name="condition-keys-codebuild-build-arn"></a>

此键标识将 IAM 角色凭证传递到的 CodeBuild 构建 ARN。使用此键可验证对 AWS 资源的调用是否来自特定 CodeBuild 构建。

**注意**  
事先不知道 `codebuild:BuildArn` 的完整值，因为其中包含动态生成的构建 ID。
+ **可用性** – 仅在由 CodeBuild 代入的角色发出请求时，将此键包含在请求上下文中。
+ **数据类型** – [ARN](reference_policies_elements_condition_operators.md#Conditions_ARN)
+ **值类型** - 单值
+ **示例值** – arn:aws:codebuild:us-east-1:123456789012:build/MyBuildProject:12345678-1234-1234-1234-123456789012

以下示例允许特定 CodeBuild 构建让 `s3:GetObject` 访问指定的存储桶。

```
{
    "Effect": "Allow",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
    "Condition": {
        "ArnLike": {
            "codebuild:BuildArn": "arn:aws:codebuild:us-east-1:123456789012:build/MyBuildProject:*"
        }
    }
}
```

### codebuild:ProjectArn
<a name="condition-keys-codebuild-project-arn"></a>

此键标识将 IAM 角色凭证传递到 CodeBuild 构建的 CodeBuild 项目 ARN。使用此键可验证对 AWS 资源的调用是否来自特定 CodeBuild 项目。
+ **可用性** – 仅在由 CodeBuild 代入的角色发出请求时，将此键包含在请求上下文中。
+ **数据类型** – [ARN](reference_policies_elements_condition_operators.md#Conditions_ARN)
+ **值类型** - 单值
+ **示例值** – arn:aws:codebuild:us-east-1:123456789012:project/MyBuildProject

以下示例允许来自特定 CodeBuild 项目的任何构建让 `s3:GetObject` 访问指定的存储桶。

```
{
    "Effect": "Allow",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
    "Condition": {
        "ArnEquals": {
            "codebuild:ProjectArn": "arn:aws:codebuild:us-east-1:123456789012:project/MyBuildProject"
        }
    }
}
```

### lambda:SourceFunctionArn
<a name="condition-keys-lambda-source-function-arn"></a>

使用此键标识将 IAM 角色凭证传递到的 Lambda 函数 ARN。Lambda 服务会为来自函数执行环境的每个 AWS API 请求设置此键。使用此键可验证对 AWS 资源的调用是否来自特定 Lambda 函数的代码。Lambda 还为来自执行环境外部的一些请求设置此键，例如将日志写入 CloudWatch 并将跟踪发送到 X-Ray。
+ **可用性** – 每次调用 Lambda 函数代码时，此键都将包含在请求上下文中。
+ **数据类型** – [ARN](reference_policies_elements_condition_operators.md#Conditions_ARN)
+ **值类型** - 单值
+ **示例值** – arn:aws:lambda:us-east-1:123456789012:function:TestFunction

以下示例允许一个特定的 Lambda 函数让 `s3:PutObject` 访问指定的存储桶。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ExampleSourceFunctionArn",
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "ArnEquals": {
                    "lambda:SourceFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:source_lambda"
                }
            }
        }
    ]
}
```

------

有关更多信息，请参阅《AWS Lambda 开发人员指南》**中的[使用 Lambda 执行环境凭证](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html#permissions-executionrole-source-function-arn)。

### ssm:SourceInstanceArn
<a name="condition-keys-ssm-source-instance-arn"></a>

使用此键标识将 IAM 角色凭证传递到的 AWS Systems Manager 托管实例 ARN。请求来自使用与 Amazon EC2 实例配置文件关联的 IAM 角色的托管实例时，此条件键不存在。
+ **可用性** – 每次将角色凭证传递到 AWS Systems Manager 托管实例时，此键都将包含在请求上下文中。
+ **数据类型** – [ARN](reference_policies_elements_condition_operators.md#Conditions_ARN)
+ **值类型** - 单值
+ **示例值** – arn:aws::ec2:us-west-2:111111111111:instance/instance-id

### identitystore:UserId
<a name="condition-keys-identity-store-user-id"></a>

使用此键可将签名请求中的 IAM Identy Center 员工身份与策略中指定的身份进行比较。
+ **可用性** – 当请求的调用方是 IAM Identity Center 中的用户时，将包含此键。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型** - 单值
+ **示例值** – 94482488-3041-7026-18f3-be45837cd0e4

您可以使用 AWS CLI、AWS API 或 AWS 软件开发工具包向 [GetUserId](https://docs.aws.amazon.com//singlesignon/latest/IdentityStoreAPIReference/API_GetUserId.html) API 发出请求，以在 IAM Identity Center 查找用户的用户 ID。

## 网络的属性
<a name="condition-keys-network-properties"></a>

使用以下条件键可将有关请求源自或传递网络的详细信息与您在策略中指定的网络属性进行比较。

### aws:SourceIp
<a name="condition-keys-sourceip"></a>

使用此键可将请求者的 IP 地址与您在策略中指定的 IP 地址进行比较。`aws:SourceIp` 条件键只能用于公有 IP 地址范围。
+ **可用性** – 此键将包含在请求上下文中，但请求者使用 VPC 端点发出请求时除外。
+ **数据类型** – [IP 地址](reference_policies_elements_condition_operators.md#Conditions_IPAddress)
+ **值类型**— 单值

可在策略中使用 `aws:SourceIp` 条件键以仅允许主体从指定的 IP 范围发出请求。

**注意**  
`aws:SourceIp` 同时支持 IPv4 和 IPv6 地址或 IP 地址范围。有关支持 IPv6 的 AWS 服务 列表，请参阅《Amazon VPC 用户指南》**中[支持 IPv6 的 AWS 服务](https://docs.aws.amazon.com/vpc/latest/userguide/aws-ipv6-support.html)。

例如，您可以将以下基于身份的策略附加到 IAM 角色。如果用户从指定的 IPv4 地址范围进行调用，此策略允许用户将对象放入 `amzn-s3-demo-bucket3` Amazon S3 存储桶。此策略还允许使用 [转发访问会话](access_forward_access_sessions.md) 的 AWS 服务代表您执行此操作。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "PrincipalPutObjectIfIpAddress",
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket3/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "203.0.113.0/24"
                }
            }
        }
    ]
}
```

------

如果需要限制同时支持 IPv4 和 IPv6 寻址的网络访问，可以在 IAM 策略条件中包含 IPv4 和 IPv6 地址或 IP 地址范围。如果用户从指定的 IPv4 或 IPv6 地址范围进行调用，以下基于身份的策略将允许用户将对象放入 `amzn-s3-demo-bucket3` Amazon S3 存储桶。在 IAM 策略中包含 IPv6 地址范围之前，请验证您正在使用的 AWS 服务 是否支持 IPv6。有关支持 IPv6 的 AWS 服务 列表，请参阅《Amazon VPC 用户指南》**中[支持 IPv6 的 AWS 服务](https://docs.aws.amazon.com/vpc/latest/userguide/aws-ipv6-support.html)。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "PrincipalPutObjectIfIpAddress",
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket3/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "203.0.113.0/24",
                        "2001:DB8:1234:5678::/64"
                    ]
                }
            }
        }
    ]
}
```

------

如果请求来自使用 Amazon VPC 端点的主机，则 `aws:SourceIp` 密钥不可用。您应改用特定于 VPC 的键，例如 [aws:VpcSourceIp](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-vpcsourceip)。有关使用 VPC 端点的更多信息，请参阅《AWS PrivateLink 指南》中的 [VPC 端点和 VPC 端点服务的身份和访问管理](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-iam.html)**。

**注意**  
当 AWS 服务 代表您调用其它 AWS 服务（服务到服务调用）时，会编辑某些特定于网络的授权上下文。如果您的策略将此条件键与 `Deny` 语句结合使用，则 AWS 服务 主体可能会无意中受到屏蔽。要让 AWS 服务 在保持安全要求的同时正常运行，请通过添加值为 `false` 的 `aws:PrincipalIsAWSService` 条件键将服务主体排除在 `Deny` 语句之外。

### aws:SourceVpc
<a name="condition-keys-sourcevpc"></a>

使用此键检查请求是否经过 VPC 端点附加到的 VPC。在策略中，您可以使用此键以仅允许访问特定的 VPC。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》中的 [限制对特定 VPC 的访问](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html#example-bucket-policies-restrict-access-vpc)**。
+ **可用性** – 仅在请求者使用 VPC 端点发出请求时，才将此键包含在请求上下文中。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型** - 单值

在策略中，可以使用此键来允许或限制对特定 VPC 的访问。

例如，可以将以下基于身份的策略附加到 IAM 角色，以拒绝 `PutObject` 访问 `amzn-s3-demo-bucket3` Amazon S3 存储桶，除非请求是从指定的 VPC ID 发出的，或由使用[转发访问会话（FAS）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)代表角色发出请求的 AWS 服务 发出的。与 [aws:SourceIp](#condition-keys-sourceip) 不同的是，必须使用 [aws:ViaAWSService](#condition-keys-viaawsservice) 或 [aws:CalledVia](#condition-keys-calledvia) 来允许 FAS 请求，因为初始请求的源 VPC 不会被保留。

**注意**  
该策略不允许进行任何操作。可将此策略与允许特定操作的其他策略结合使用。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "PutObjectIfNotVPCID",
      "Effect": "Deny",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket3/*",
      "Condition": {
        "StringNotEqualsIfExists": {
          "aws:SourceVpc": "vpc-1234567890abcdef0"
        },
        "Bool": {
          "aws:ViaAWSService": "false"
        }
      }
    }
  ]
}
```

------

**注意**  
如果您的目标服务支持 `aws:SourceVpcArn`，AWS 建议使用 `aws:SourceVpcArn` 而不是 `aws:SourceVpc`。有关支持的服务列表，请参阅 [aws:SourceVpcArn](#condition-keys-sourcevpcarn)。

### aws:SourceVpcArn
<a name="condition-keys-sourcevpcarn"></a>

使用此键可验证通过 VPC 端点发出请求的 VPC 的 ARN。此键返回 VPC 端点所连接 VPC 的 ARN。
+ **可用性**：通过 VPC 端点发出请求时将此键包含在所支持服务的请求上下文中。通过公共服务端点发出的请求不包括此键。以下服务支持此键：
  + AWS App Runner（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapprunner.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapprunner.html)）
  + AWS Application Discovery Service（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapplicationdiscoveryservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapplicationdiscoveryservice.html)）
  + Amazon Athena（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html)）
  + AWS Cloud Map（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudmap.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudmap.html)）
  + Amazon CloudWatch Application Insights（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchapplicationinsights.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchapplicationinsights.html)）
  + AWS CloudFormation（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html)）
  + Amazon Comprehend Medical（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncomprehendmedical.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncomprehendmedical.html)）
  + AWS Compute Optimizer（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscomputeoptimizer.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscomputeoptimizer.html)）
  + Amazon；Elastic Container Registry（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerregistry.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerregistry.html)）
  + Amazon Elastic Container Service（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerservice.html)）
  + Amazon Kinesis Analytics（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisanalytics.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisanalytics.html)）
  + Amazon Route 53（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonroute53.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonroute53.html)）
  + AWS DataSync（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdatasync.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdatasync.html)）
  + Amazon Elastic Block Store（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticblockstore.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticblockstore.html)）
  + Amazon EventBridge 调度器（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoneventbridgescheduler.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoneventbridgescheduler.html)）
  + Amazon Data Firehose（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisfirehose.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisfirehose.html)）
  + AWS HealthImaging（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthimaging.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthimaging.html)）
  + AWS HealthLake（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthlake.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthlake.html)）
  + AWS HealthOmics（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthomics.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthomics.html)）
  + AWS Identity and Access Management（`iam:PassRole` 操作除外）（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentityandaccessmanagementiam.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentityandaccessmanagementiam.html)）
  + AWS IoT FleetWise（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleetwise.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleetwise.html)）
  + AWS IoT Wireless（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotwireless.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotwireless.html)）
  + AWS Key Management Service（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html)）
  + AWS Lambda（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awslambda.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awslambda.html)）
  + AWS Payment Cryptography（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awspaymentcryptography.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awspaymentcryptography.html)）
  + Amazon Polly（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonpolly.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonpolly.html)）
  + AWS 私有证书颁发机构（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsprivatecertificateauthority.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsprivatecertificateauthority.html)）
  + AWS 回收站（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsrecyclebin.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsrecyclebin.html)）
  + Amazon Rekognition（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrekognition.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrekognition.html)）
  + 服务配额（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_servicequotas.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_servicequotas.html)）
  + Amazon Simple Storage Service（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)）
  + AWS Storage Gateway（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsstoragegateway.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsstoragegateway.html)）
  + AWS Systems Manager Incident Manager Contacts（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssystemsmanagerincidentmanagercontacts.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssystemsmanagerincidentmanagercontacts.html)）
  + Amazon Textract（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontextract.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontextract.html)）
  + Amazon Transcribe（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontranscribe.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontranscribe.html)）
  + AWS Transfer Family（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awstransferfamily.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awstransferfamily.html)）
+ **数据类型** – ARN

  AWS 建议在比较 ARN 时使用 [ARN 运算符](reference_policies_elements_condition_operators.md#Conditions_ARN)而不是[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)。
+ **值类型** - 单值
+ **示例值** – `arn:aws:ec2:us-east-1:123456789012:vpc/vpc-0e9801d129EXAMPLE`

以下是拒绝从 VPC `vpc-1a2b3c4d` 以外的任意位置访问 `amzn-s3-demo-bucket` 及其对象的存储桶策略示例。

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
     {
       "Sid": "Access-to-specific-VPC-only",
       "Principal": "*",
       "Action": "s3:*",
       "Effect": "Deny",
       "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket",
                    "arn:aws:s3:::amzn-s3-demo-bucket/*"],
       "Condition": {
         "ArnNotEquals": {
           "aws:SourceVpcArn": "arn:aws:ec2:us-east-1:*:vpc/vpc-1a2b3c4d"
         }
       }
     }
   ]
}
```

### aws:SourceVpce
<a name="condition-keys-sourcevpce"></a>

使用此键可将请求的 VPC 端点标识符与您在策略中指定的端点 ID 进行比较。
+ **可用性** – 仅在请求者使用 VPC 端点发出请求时，才将此键包含在请求上下文中。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型** - 单值

在策略中，您可以使用此键来限制对特定 VPC 端点的访问。有关更多信息，请参阅《*Amazon Simple Storage Service 用户指南*》中的[限制对特定 VPC 的访问](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html#example-bucket-policies-restrict-access-vpc)。与使用 [aws:SourceVpc](#condition-keys-sourcevpc) 类似，必须使用 [aws:ViaAWSService](#condition-keys-viaawsservice) 或 [aws:CalledVia](#condition-keys-calledvia) 来允许 AWS 服务 使用[转发访问会话（FAS）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)发出的请求。这是因为初始请求的源 VPC 端点未被保留。

### aws:VpceAccount
<a name="condition-keys-vpceaccount"></a>

此键用于将发出请求经由的 VPC 端点所属的 AWS 账户 ID 与您在策略中指定的账户 ID 进行比较。此条件键可确保请求经由特定账户拥有的 VPC 端点，从而帮助建立网络边界控制。
+ **可用性** – 通过 VPC 端点发出请求时将此键包含在请求上下文中。通过公共服务端点发出的请求不包括此键。

  以下服务支持此键：
  + AWS App Runner（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapprunner.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapprunner.html)）
  + AWS Application Discovery Service（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapplicationdiscoveryservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapplicationdiscoveryservice.html)）
  + Amazon Athena（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html)）
  + AWS Cloud Map（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudmap.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudmap.html)）
  + Amazon CloudWatch Application Insights（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchapplicationinsights.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchapplicationinsights.html)）
  + AWS CloudFormation（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html)）
  + Amazon Comprehend Medical（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncomprehendmedical.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncomprehendmedical.html)）
  + AWS Compute Optimizer（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscomputeoptimizer.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscomputeoptimizer.html)）
  + Amazon；Elastic Container Registry（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerregistry.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerregistry.html)）
  + Amazon Elastic Container Service（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerservice.html)）
  + Amazon Kinesis Analytics（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisanalytics.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisanalytics.html)）
  + Amazon Route 53（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonroute53.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonroute53.html)）
  + AWS DataSync（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdatasync.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdatasync.html)）
  + Amazon Elastic Block Store（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticblockstore.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticblockstore.html)）
  + Amazon EventBridge 调度器（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoneventbridgescheduler.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoneventbridgescheduler.html)）
  + Amazon Data Firehose（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisfirehose.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisfirehose.html)）
  + AWS HealthImaging（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthimaging.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthimaging.html)）
  + AWS HealthLake（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthlake.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthlake.html)）
  + AWS HealthOmics（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthomics.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthomics.html)）
  + AWS Identity and Access Management（`iam:PassRole` 操作除外）（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentityandaccessmanagementiam.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentityandaccessmanagementiam.html)）
  + AWS IoT FleetWise（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleetwise.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleetwise.html)）
  + AWS IoT Wireless（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotwireless.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotwireless.html)）
  + AWS Key Management Service（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html)）
  + AWS Lambda（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awslambda.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awslambda.html)）
  + AWS Payment Cryptography（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awspaymentcryptography.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awspaymentcryptography.html)）
  + Amazon Polly（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonpolly.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonpolly.html)）
  + AWS 私有证书颁发机构（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsprivatecertificateauthority.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsprivatecertificateauthority.html)）
  + AWS 回收站（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsrecyclebin.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsrecyclebin.html)）
  + Amazon Rekognition（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrekognition.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrekognition.html)）
  + 服务配额（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_servicequotas.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_servicequotas.html)）
  + Amazon Simple Storage Service（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)）
  + AWS Storage Gateway（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsstoragegateway.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsstoragegateway.html)）
  + AWS Systems Manager Incident Manager Contacts（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssystemsmanagerincidentmanagercontacts.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssystemsmanagerincidentmanagercontacts.html)）
  + Amazon Textract（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontextract.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontextract.html)）
  + Amazon Transcribe（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontranscribe.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontranscribe.html)）
  + AWS Transfer Family（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awstransferfamily.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awstransferfamily.html)）
+ **数据类型 **– [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型** - 单值
+ **示例值** – `123456789012`

可以使用此条件键来限制对资源的访问，以使请求必须经由您的账户拥有的 VPC 端点。以下 Amazon S3 存储桶策略示例允许在请求经由指定账户拥有的 VPC 端点时进行访问：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AccessToSpecificVpceAccountOnly",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/RoleName"
            },
            "Action": "s3:GetObject",
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*",
            "Condition": {
                "StringEquals": {
                    "aws:VpceAccount": "111122223333"
                }
            }
        }
    ]
}
```

------

**注意**  
此条件键目前适用于一组选定的 AWS 服务。将条件键用于不支持的服务可能会导致意想不到的授权结果。务必将条件键的范围限定为策略中支持的服务。

某些 AWS 服务在代表您行事时从其网络访问您的资源。如果使用此等服务，需要对上述策略示例进行编辑，以允许 AWS 服务从网络外部访问您的资源。有关在基于请求来源强制实施访问控制时需要考虑的访问模式的更多信息，请参阅[使用数据边界建立权限防护机制](access_policies_data-perimeters.md)。

### aws:VpceOrgID
<a name="condition-keys-vpceorgid"></a>

此键用于将发出请求经由的 VPC 端点所属的 AWS Organizations 中组织的标识符与您在策略中指定的标识符进行比较。此条件键提供了最具扩展性的网络边界控制方法，自动包括组织内账户拥有的所有 VPC 端点。
+ **可用性** - 在通过 VPC 端点发出请求且 VPC 端点的所有者账户是 AWS 组织成员时，请求上下文中将包含此键。对于通过其他网络路径发出的请求，或者当 VPC 端点的所有者账户不属于某个组织时，则不包括此键。

  以下服务支持此键：
  + AWS App Runner（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapprunner.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapprunner.html)）
  + AWS Application Discovery Service（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapplicationdiscoveryservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapplicationdiscoveryservice.html)）
  + Amazon Athena（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html)）
  + AWS B2B Data Interchange（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsb2bdatainterchange.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsb2bdatainterchange.html)）
  + AWS Cloud Map（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudmap.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudmap.html)）
  + Amazon CloudWatch Application Insights（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchapplicationinsights.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchapplicationinsights.html)）
  + AWS CloudFormation（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html)）
  + Amazon Cognito（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncognitoidentity.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncognitoidentity.html)）
  + Amazon Comprehend Medical（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncomprehendmedical.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncomprehendmedical.html)）
  + AWS Compute Optimizer（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscomputeoptimizer.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscomputeoptimizer.html)）
  + AWS Database Migration Service（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdatabasemigrationservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdatabasemigrationservice.html)）
  + AWS 目录服务数据（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdirectoryservicedata.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdirectoryservicedata.html)）
  + Amazon；Elastic Container Registry（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerregistry.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerregistry.html)）
  + Amazon Elastic Container Service（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerservice.html)）
  + Amazon Kinesis Analytics（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisanalytics.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisanalytics.html)）
  + Amazon Route 53（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonroute53.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonroute53.html)）
  + AWS DataSync（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdatasync.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdatasync.html)）
  + Amazon Elastic Block Store（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticblockstore.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticblockstore.html)）
  + Amazon EventBridge 调度器（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoneventbridgescheduler.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoneventbridgescheduler.html)）
  + Amazon Data Firehose（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisfirehose.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisfirehose.html)）
  + AWS HealthImaging（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthimaging.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthimaging.html)）
  + AWS HealthLake（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthlake.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthlake.html)）
  + AWS HealthOmics（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthomics.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthomics.html)）
  + AWS Identity and Access Management（`iam:PassRole` 操作除外）（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentityandaccessmanagementiam.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentityandaccessmanagementiam.html)）
  + AWS 身份存储（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentitystore.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentitystore.html)）
  + AWS IoT FleetWise（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleetwise.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleetwise.html)）
  + AWS IoT TwinMaker（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiottwinmaker.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiottwinmaker.html)）
  + AWS IoT Wireless（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotwireless.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotwireless.html)）
  + Amazon Keyspaces（Apache Cassandra 兼容）（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkeyspacesforapachecassandra.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkeyspacesforapachecassandra.html)）
  + AWS Key Management Service（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html)）
  + AWS Lambda（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awslambda.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awslambda.html)）
  + AWS Network Firewall（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsnetworkfirewall.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsnetworkfirewall.html)）
  + AWS Payment Cryptography（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awspaymentcryptography.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awspaymentcryptography.html)）
  + Amazon Pinpoint SMS and Voice Service（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonpinpointsmsandvoiceservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonpinpointsmsandvoiceservice.html)）
  + Amazon Polly（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonpolly.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonpolly.html)）
  + AWS 价目表（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awspricelist.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awspricelist.html)）
  + AWS 私有证书颁发机构（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsprivatecertificateauthority.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsprivatecertificateauthority.html)）
  + AWS 回收站（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsrecyclebin.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsrecyclebin.html)）
  + Amazon Rekognition（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrekognition.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrekognition.html)）
  + 服务配额（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_servicequotas.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_servicequotas.html)）
  + Amazon Simple Email Service（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonses.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonses.html)）
  + Amazon Simple Storage Service（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)）
  + Amazon Simple Queue Service（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonsqs.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonsqs.html)）
  + AWS Storage Gateway（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsstoragegateway.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsstoragegateway.html)）
  + AWS Systems Manager Incident Manager Contacts（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssystemsmanagerincidentmanagercontacts.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssystemsmanagerincidentmanagercontacts.html)）
  + Amazon Textract（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontextract.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontextract.html)）
  + Amazon Transcribe（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontranscribe.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontranscribe.html)）
  + AWS Transfer Family（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awstransferfamily.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awstransferfamily.html)）
  + Amazon WorkMail（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonworkmail.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonworkmail.html)）
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型** - 单值
+ **示例值** – `o-a1b2c3d4e5`

以下资源控制策略示例拒绝访问 Amazon S3 和 AWS Key Management Service 资源，除非请求经由指定组织拥有的 VPC 端点或代表您行事的 AWS 服务网络。某些组织可能需要进一步编辑此政策以满足其组织的需求，例如，允许第三方合作伙伴进行访问。有关在基于请求来源强制实施访问控制时需要考虑的访问模式的更多信息，请参阅[使用数据边界建立权限防护机制](access_policies_data-perimeters.md)。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "EnforceNetworkPerimeterVpceOrgID",
      "Effect": "Deny",
      "Principal": "*",
      "Action": [
        "s3:*",
        "kms:*"
      ],
      "Resource": "*",
      "Condition": {
        "BoolIfExists": {
          "aws:PrincipalIsAWSService": "false",
          "aws:ViaAWSService": "false"
        },
        "StringNotEqualsIfExists": {
            "aws:VpceOrgID": "o-abcdef0123",
            "aws:PrincipalTag/network-perimeter-exception": "true"
        }
      }
    }
  ]
}
```

------

**注意**  
此条件键目前适用于一组选定的 AWS 服务。将条件键用于不支持的服务可能会导致意想不到的授权结果。务必将条件键的范围限定为策略中支持的服务。

### aws:VpceOrgPaths
<a name="condition-keys-vpceorgpaths"></a>

此键用于将发出请求经由的 VPC 端点的 AWS Organizations 路径与您在策略中指定的路径进行比较。此条件键支持在组织单元 (OU) 级别实施网络边界控制，当您在指定的 OU 中添加新的端点时，可根据 VPC 端点的使用情况自动扩展。
+ **可用性** - 在通过 VPC 端点发出请求且 VPC 端点的所有者账户是组织成员时，请求上下文中将包含此键。对于通过其他网络路径发出的请求，或者当 VPC 端点的所有者账户不属于某个组织时，则不包括此键。

  以下服务支持此键：
  + AWS App Runner（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapprunner.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapprunner.html)）
  + AWS Application Discovery Service（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapplicationdiscoveryservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapplicationdiscoveryservice.html)）
  + Amazon Athena（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html)）
  + AWS Cloud Map（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudmap.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudmap.html)）
  + Amazon CloudWatch Application Insights（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchapplicationinsights.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchapplicationinsights.html)）
  + AWS CloudFormation（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html)）
  + Amazon Comprehend Medical（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncomprehendmedical.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncomprehendmedical.html)）
  + AWS Compute Optimizer（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscomputeoptimizer.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscomputeoptimizer.html)）
  + Amazon；Elastic Container Registry（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerregistry.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerregistry.html)）
  + Amazon Elastic Container Service（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerservice.html)）
  + Amazon Kinesis Analytics（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisanalytics.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisanalytics.html)）
  + Amazon Route 53（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonroute53.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonroute53.html)）
  + AWS DataSync（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdatasync.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdatasync.html)）
  + Amazon Elastic Block Store（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticblockstore.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticblockstore.html)）
  + Amazon EventBridge 调度器（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoneventbridgescheduler.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoneventbridgescheduler.html)）
  + Amazon Data Firehose（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisfirehose.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisfirehose.html)）
  + AWS HealthImaging（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthimaging.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthimaging.html)）
  + AWS HealthLake（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthlake.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthlake.html)）
  + AWS HealthOmics（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthomics.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthomics.html)）
  + AWS Identity and Access Management（`iam:PassRole` 操作除外）（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentityandaccessmanagementiam.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentityandaccessmanagementiam.html)）
  + AWS IoT FleetWise（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleetwise.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleetwise.html)）
  + AWS IoT Wireless（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotwireless.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotwireless.html)）
  + AWS Key Management Service（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html)）
  + AWS Lambda（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awslambda.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awslambda.html)）
  + AWS Payment Cryptography（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awspaymentcryptography.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awspaymentcryptography.html)）
  + Amazon Polly（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonpolly.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonpolly.html)）
  + AWS 私有证书颁发机构（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsprivatecertificateauthority.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsprivatecertificateauthority.html)）
  + AWS 回收站（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsrecyclebin.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsrecyclebin.html)）
  + Amazon Rekognition（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrekognition.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrekognition.html)）
  + 服务配额（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_servicequotas.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_servicequotas.html)）
  + Amazon Simple Storage Service（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)）
  + AWS Storage Gateway（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsstoragegateway.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsstoragegateway.html)）
  + AWS Systems Manager Incident Manager Contacts（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssystemsmanagerincidentmanagercontacts.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssystemsmanagerincidentmanagercontacts.html)）
  + Amazon Textract（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontextract.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontextract.html)）
  + Amazon Transcribe（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontranscribe.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontranscribe.html)）
  + AWS Transfer Family（前缀：[https://docs.aws.amazon.com/service-authorization/latest/reference/list_awstransferfamily.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awstransferfamily.html)）
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)（列表）
+ **值类型**— 多值
+ **示例值** – `o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/`

由于 `aws:VpceOrgPaths` 是一个多值条件键，您必须将 `ForAnyValue` 或者 `ForAllValues` 集合运算符与此键的[字符串条件运算符](reference_policies_elements_condition_operators.md#Conditions_String)搭配使用。以下 Amazon S3 存储桶策略示例仅允许在请求经由特定组织单元中的账户拥有的 VPC 端点时进行访问：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowAccessFromSpecificOrgPaths",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/RoleName"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*",
      "Condition": {
        "ForAnyValue:StringLike": {
          "aws:VpceOrgPaths": [
            "o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/*",
            "o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-33333333/*"
          ]
        }
      }
    }
  ]
}
```

------

**注意**  
此条件键目前适用于一组选定的 AWS 服务。将条件键用于不支持的服务可能会导致意想不到的授权结果。务必将条件键的范围限定为策略中支持的服务。

某些 AWS 服务在代表您行事时从其网络访问您的资源。如果使用此等服务，需要对上述策略示例进行编辑，以允许 AWS 服务从网络外部访问您的资源。有关在基于请求来源强制实施访问控制时需要考虑的访问模式的更多信息，请参阅[使用数据边界建立权限防护机制](access_policies_data-perimeters.md)。

### aws:VpcSourceIp
<a name="condition-keys-vpcsourceip"></a>

使用此键可将从中发出请求的 IP 地址与您在策略中指定的 IP 地址进行比较。在策略中，键仅在请求来自指定的 IP 地址并经过 VPC 端点时进行匹配。
+ **可用性** – 仅在使用 VPC 端点发出请求时，才将此键包含在请求上下文中。
+ **数据类型** – [IP 地址](reference_policies_elements_condition_operators.md#Conditions_IPAddress)
+ **值类型** - 单值

有关更多信息，请参阅《*Amazon VPC 用户指南*》中的[使用端点策略控制对 VPC 端点的访问](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html)。与使用 [aws:SourceVpc](#condition-keys-sourcevpc) 类似，必须使用 [aws:ViaAWSService](#condition-keys-viaawsservice) 或 [aws:CalledVia](#condition-keys-calledvia) 来允许 AWS 服务 使用[转发访问会话（FAS）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)发出的请求。这是因为使用 VPC 端点发出的初始请求的源 IP 不会保留在 FAS 请求中。

**注意**  
`aws:VpcSourceIp` 同时支持 IPv4 和 IPv6 地址或 IP 地址范围。有关支持 IPv6 的 AWS 服务 列表，请参阅《Amazon VPC 用户指南》**中[支持 IPv6 的 AWS 服务](https://docs.aws.amazon.com/vpc/latest/userguide/aws-ipv6-support.html)。  
`aws:VpcSourceIp` 条件键应始终与 `aws:SourceVpc` 或 `aws:SourceVpce` 条件键结合使用。否则，策略可能会允许来自使用相同或重叠的 IP CIDR 的意外 VPC 的 API 调用。之所以发生这种情况，是因为来自两个不相关的 VPC 的 IP CIDR 可能相同或重叠。相反，应在策略中使用 VPC ID 或 VPC 端点 ID，因为它们具有全局唯一的标识符。这些唯一标识符可确保不会出现意外结果。

**注意**  
当 AWS 服务 代表您调用其它 AWS 服务（服务到服务调用）时，会编辑某些特定于网络的授权上下文。如果您的策略将此条件键与 `Deny` 语句结合使用，则 AWS 服务 主体可能会无意中受到屏蔽。要让 AWS 服务 在保持安全要求的同时正常运行，请通过添加值为 `false` 的 `aws:PrincipalIsAWSService` 条件键将服务主体排除在 `Deny` 语句之外。

## 资源的属性
<a name="condition-keys-resource-properties"></a>

使用以下条件键可将有关请求目标资源的详细信息与您在策略中指定的资源属性进行比较。

### aws:ResourceAccount
<a name="condition-keys-resourceaccount"></a>

使用此键，将策略中所请求的资源所有者的 [AWS 账户 ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html) 与资源账户进行比较。然后，您可以根据拥有该资源的账户来允许或拒绝对该资源的访问。
+ **Availability**（可用性）– 对于大多数服务操作，此键始终包含在请求上下文中。以下操作不支持此键：
  + AWS Audit Manager
    + `auditmanager:UpdateAssessmentFrameworkShare`
  + Amazon Detective
    + `detective:AcceptInvitation`
  + AWS Directory Service
    + `ds:AcceptSharedDirectory`
  + Amazon Elastic Block Store – 所有操作
  + Amazon EC2
    + `ec2:AcceptTransitGatewayPeeringAttachment`
    + `ec2:AcceptVpcEndpointConnections`
    + `ec2:AcceptVpcPeeringConnection`
    + `ec2:CreateTransitGatewayPeeringAttachment`
    + `ec2:CreateVpcEndpoint`
    + `ec2:CreateVpcPeeringConnection`
  + Amazon EventBridge
    + `events:PutEvents` – EventBridge `PutEvents` 将调用其他账户中的事件总线，前提是该事件总线已在 2023 年 3 月 2 日之前被配置为跨账户 EventBridge 目标。有关更多信息，请参阅《Amazon EventBridge 用户指南》中的 [授予权限以允许来自其他 AWS 账户的事件](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-cross-account.html#eb-receiving-events-from-another-account)**。
  + Amazon GuardDuty
    + `guardduty:AcceptAdministratorInvitation`
  + Amazon Macie
    + `macie2:AcceptInvitation`
  + Amazon OpenSearch Service
    + `es:AcceptInboundConnection`
  + Amazon Route 53
    + `route53:AssociateVpcWithHostedZone`
    + `route53:CreateVPCAssociationAuthorization`
  + AWS Security Hub CSPM
    + `securityhub:AcceptAdministratorInvitation`
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型** - 单值

**注意**  
有关上述不支持的操作的其他注意事项，请参阅 [Data Perimeter Policy Examples](https://github.com/aws-samples/data-perimeter-policy-examples) 存储库。

此键等于包含请求中受评估资源的账户的 AWS 账户 ID。

对于您的账户中的大多数资源，[ARN](reference_policies_elements_condition_operators.md#Conditions_ARN) 包含该资源的所有者账户 ID。对于某些资源（如 Amazon S3 存储桶），资源 ARN 不包含该账户 ID。以下两个示例显示了在 ARN 中具有账户 ID 的资源与没有账户 ID 的 Amazon S3 ARN 之间的区别：
+ `arn:aws:iam::123456789012:role/AWSExampleRole` – 在账户 123456789012 中创建和拥有的 IAM 角色。
+ `arn:aws:s3:::amzn-s3-demo-bucket2` – 在账户 `111122223333` 中创建且拥有的 Amazon S3 存储桶，在 ARN 中不显示。

使用 AWS 控制台、API 或 CLI 查找您的所有资源和相应的 ARN。

您编写的策略根据资源所有者的账户 ID 拒绝对资源的权限。例如，如果*指定资源*不属于*指定账户*，以下基于身份的策略会拒绝访问该资源。

要使用此策略，请将示例策略中的*斜体占位符文本*替换为您的账户信息。

**重要**  
该策略不允许进行任何操作。相反，该策略会使用 `Deny` 效果，这会显式拒绝访问语句中列出而不属于已列出账户的所有资源。将此策略与允许访问特定资源的其他策略结合使用。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyInteractionWithResourcesNotInSpecificAccount",
      "Action": "service:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:service:us-east-1:111122223333:*"
      ],
      "Condition": {
        "StringNotEquals": {
          "aws:ResourceAccount": [
            "111122223333"
          ]
        }
      }
    }
  ]
}
```

------

此策略会拒绝对特定 AWS 服务所有资源的访问，除非指定 AWS 账户 拥有该资源。

**注意**  
某些 AWS 服务 需要访问托管在其他 AWS 中的 AWS 账户 所拥有的资源。在基于身份的策略中使用 `aws:ResourceAccount` 可能会影响您的身份访问这些资源的能力。

某些 AWS 服务，例如 AWS Data Exchange，依赖于对您的 AWS 账户 以外的资源的访问来进行正常操作。如果您在策略中使用元素 `aws:ResourceAccount`，请在策略中包含额外声明来为这些服务创建豁免。示例策略 [AWS：拒绝访问您账户之外的 Amazon S3 资源，AWS Data Exchange 除外。](reference_policies_examples_resource_account_data_exch.md) 演示了如何根据资源账户拒绝访问，同时定义对于服务拥有的资源的例外情况。

将此策略示例用作创建自己的自定义策略的模板。参阅服务[文档](https://docs.aws.amazon.com/index.html)以了解更多信息。

### aws:ResourceOrgPaths
<a name="condition-keys-resourceorgpaths"></a>

使用此键来比较所访问资源的 AWS Organizations 路径与策略中的路径。在策略中，此条件键可确保该资源属于 AWS Organizations 中指定组织根或组织单位（OU）的账户成员。AWS Organizations 路径是 Organizations 实体结构的文本表示形式。有关使用和了解路径的更多信息，请参阅 [了解 AWS Organizations 实体路径](access_policies_last-accessed-view-data-orgs.md#access_policies_last-accessed-viewing-orgs-entity-path) 
+ **Availability**（可用性）- 仅在拥有资源的账户是企业成员时，才将此键包含在请求上下文中。此全局条件键不支持以下操作：
  + AWS Audit Manager
    + `auditmanager:UpdateAssessmentFrameworkShare`
  + Amazon Detective
    + `detective:AcceptInvitation`
  + AWS Directory Service
    + `ds:AcceptSharedDirectory`
  + Amazon Elastic Block Store – 所有操作
  + Amazon EC2
    + `ec2:AcceptTransitGatewayPeeringAttachment`
    + `ec2:AcceptVpcEndpointConnections`
    + `ec2:AcceptVpcPeeringConnection`
    + `ec2:CreateTransitGatewayPeeringAttachment`
    + `ec2:CreateVpcEndpoint`
    + `ec2:CreateVpcPeeringConnection`
  + Amazon EventBridge
    + `events:PutEvents` – EventBridge `PutEvents` 将调用其他账户中的事件总线，前提是该事件总线已在 2023 年 3 月 2 日之前被配置为跨账户 EventBridge 目标。有关更多信息，请参阅《Amazon EventBridge 用户指南》中的 [授予权限以允许来自其他 AWS 账户的事件](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-cross-account.html#eb-receiving-events-from-another-account)**。
  + Amazon GuardDuty
    + `guardduty:AcceptAdministratorInvitation`
  + Amazon Macie
    + `macie2:AcceptInvitation`
  + Amazon OpenSearch Service
    + `es:AcceptInboundConnection`
  + Amazon Route 53
    + `route53:AssociateVpcWithHostedZone`
    + `route53:CreateVPCAssociationAuthorization`
  + AWS Security Hub CSPM
    + `securityhub:AcceptAdministratorInvitation`
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)（列表）
+ **值类型**— 多值

**注意**  
有关上述不支持的操作的其他注意事项，请参阅 [Data Perimeter Policy Examples](https://github.com/aws-samples/data-perimeter-policy-examples) 存储库。

`aws:ResourceOrgPaths` 是一个多值条件键。多值键在请求上下文中可以有多个值。对于此键，您必须将 `ForAnyValue` 或者 `ForAllValues` 集合运算符与[字符串条件运算符](reference_policies_elements_condition_operators.md#Conditions_String)搭配使用。有关多值条件键的更多信息，请参阅[多值上下文键的集合运算符](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)。

例如，对于属于组织 `o-a1b2c3d4e5` 的资源，以下条件会返回为 `True`。包含通配符时，您必须使用 [StringLike](reference_policies_elements_condition_operators.md) 条件运算符。

```
"Condition": { 
      "ForAnyValue:StringLike": {
             "aws:ResourceOrgPaths":["o-a1b2c3d4e5/*"]
   }
}
```

对于具有 OU ID `ou-ab12-11111111` 的资源，以下条件返回 `True`。它将匹配附加到 OU ou-ab12-11111111 或任何子 OU 的账户所拥有的资源。

```
"Condition": { "ForAnyValue:StringLike" : {
     "aws:ResourceOrgPaths":["o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/*"]
}}
```

对于直接附加到 OU ID `ou-ab12-22222222`（而非子 OU）的账户所拥有的资源，以下条件返回 `True`。下列示例使用 [StringEquals](reference_policies_elements_condition_operators.md) 条件运算符来指定 OU ID 的完全匹配（而非通配符匹配）要求。

```
"Condition": { "ForAnyValue:StringEquals" : {
     "aws:ResourceOrgPaths":["o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/"]
}}
```

**注意**  
某些 AWS 服务 需要访问托管在其他 AWS 中的 AWS 账户 所拥有的资源。在基于身份的策略中使用 `aws:ResourceOrgPaths` 可能会影响您的身份访问这些资源的能力。

某些 AWS 服务，例如 AWS Data Exchange，依赖于对您的 AWS 账户 以外的资源的访问来进行正常操作。如果您在策略中使用 `aws:ResourceOrgPaths` 键，请在策略中包含额外声明来为这些服务创建豁免。示例策略 [AWS：拒绝访问您账户之外的 Amazon S3 资源，AWS Data Exchange 除外。](reference_policies_examples_resource_account_data_exch.md) 演示了如何根据资源账户拒绝访问，同时定义对于服务拥有的资源的例外情况。您可以使用 `aws:ResourceOrgPaths` 键来创建类似的策略，限制对组织单元（OU）内部资源的访问，同时包括服务拥有的资源。

将此策略示例用作创建自己的自定义策略的模板。参阅服务[文档](https://docs.aws.amazon.com/index.html)以了解更多信息。

### aws:ResourceOrgID
<a name="condition-keys-resourceorgid"></a>

使用此键可将被请求资源所属的 AWS Organizations 中组织的标识符与策略中指定的标识符进行比较。
+ **Availability**（可用性）- 仅在拥有资源的账户是企业成员时，才将此键包含在请求上下文中。此全局条件键不支持以下操作：
  + AWS Audit Manager
    + `auditmanager:UpdateAssessmentFrameworkShare`
  + Amazon Detective
    + `detective:AcceptInvitation`
  + AWS Directory Service
    + `ds:AcceptSharedDirectory`
  + Amazon Elastic Block Store – 所有操作
  + Amazon EC2
    + `ec2:AcceptTransitGatewayPeeringAttachment`
    + `ec2:AcceptVpcEndpointConnections`
    + `ec2:AcceptVpcPeeringConnection`
    + `ec2:CreateTransitGatewayPeeringAttachment`
    + `ec2:CreateVpcEndpoint`
    + `ec2:CreateVpcPeeringConnection`
  + Amazon EventBridge
    + `events:PutEvents` – EventBridge `PutEvents` 将调用其他账户中的事件总线，前提是该事件总线已在 2023 年 3 月 2 日之前被配置为跨账户 EventBridge 目标。有关更多信息，请参阅《Amazon EventBridge 用户指南》中的 [授予权限以允许来自其他 AWS 账户的事件](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-cross-account.html#eb-receiving-events-from-another-account)**。
  + Amazon GuardDuty
    + `guardduty:AcceptAdministratorInvitation`
  + Amazon Macie
    + `macie2:AcceptInvitation`
  + Amazon OpenSearch Service
    + `es:AcceptInboundConnection`
  + Amazon Route 53
    + `route53:AssociateVpcWithHostedZone`
    + `route53:CreateVPCAssociationAuthorization`
  + AWS Security Hub CSPM
    + `securityhub:AcceptAdministratorInvitation`
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型** - 单值

**注意**  
有关上述不支持的操作的其他注意事项，请参阅 [Data Perimeter Policy Examples](https://github.com/aws-samples/data-perimeter-policy-examples) 存储库。

此全局键会返回给定请求的资源组织 ID。它允许您创建适用于组织中所有资源的规则，这些资源在[基于身份的策略](access_policies_identity-vs-resource.md)的 `Resource` 元素中指定。您可以在条件元素中指定[组织 ID](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_details.html)。当您添加和删除账户时，包含 `aws:ResourceOrgID` 键的策略将自动包括正确的账户，并且不必手动更新。

例如，以下策略会阻止主体将对象添加到 `policy-genius-dev` 资源，除非 Amazon S3 资源与发出请求的主体属于同一组织。

**重要**  
该策略不允许进行任何操作。相反，该策略会使用 `Deny` 效果，这会显式拒绝访问语句中列出而不属于已列出账户的所有资源。将此策略与允许访问特定资源的其他策略结合使用。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Sid": "DenyPutObjectToS3ResourcesOutsideMyOrganization",
        "Effect": "Deny",
        "Action": "s3:PutObject",
        "Resource": "arn:aws:s3:::policy-genius-dev/*",
        "Condition": {
            "StringNotEquals": {
                "aws:ResourceOrgID": "${aws:PrincipalOrgID}"
            }
        }
    }
}
```

------

**注意**  
某些 AWS 服务 需要访问托管在其他 AWS 中的 AWS 账户 所拥有的资源。在基于身份的策略中使用 `aws:ResourceOrgID` 可能会影响您的身份访问这些资源的能力。

某些 AWS 服务，例如 AWS Data Exchange，依赖于对您的 AWS 账户 以外的资源的访问来进行正常操作。如果您在策略中使用 `aws:ResourceOrgID` 键，请在策略中包含额外声明来为这些服务创建豁免。示例策略 [AWS：拒绝访问您账户之外的 Amazon S3 资源，AWS Data Exchange 除外。](reference_policies_examples_resource_account_data_exch.md) 演示了如何根据资源账户拒绝访问，同时定义对于服务拥有的资源的例外情况。您可以使用 `aws:ResourceOrgID` 键来创建类似的策略，限制对企业内部资源的访问，同时包括服务拥有的资源。

将此策略示例用作创建自己的自定义策略的模板。参阅服务[文档](https://docs.aws.amazon.com/index.html)以了解更多信息。

在以下视频中，了解有关如何在策略中使用 `aws:ResourceOrgID` 条件键的更多信息。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/cWVW0xAiWwc/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/cWVW0xAiWwc)


### aws:ResourceTag/*tag-key*
<a name="condition-keys-resourcetag"></a>

使用此键可将您在策略中指定的标签键/值对与附加到资源的键/值对进行比较。例如，您可能会要求只有在资源具有附加的标签键 `"Dept"` 和值 `"Marketing"` 时才允许访问该资源。有关更多信息，请参阅 [控制对 AWS 资源的访问](access_tags.md#access_tags_control-resources)。
+ **Availability**（可用性）– 当请求的资源已附加标签，或者是在利用附加包创建资源的请求中，键会包含在请求上下文中。只有[支持基于标签的授权](reference_aws-services-that-work-with-iam.md)的资源返回此键。每个标签键/值对均有一个上下文密钥。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型**— 单值

该上下文密钥的格式为 `"aws:ResourceTag/tag-key":"tag-value"`，其中 *tag-key* 和 *tag-value* 是标签键值对。标签键不区分大小写。这意味着，如果您在策略的条件元素中指定 `"aws:ResourceTag/TagKey1": "Value1"`，则条件将匹配名为 `TagKey1` 或 `tagkey1` 的资源标签键，但不会同时匹配两者。这些标签键/值对中的值应区分大小写。这意味着，如果您在策略的条件元素中指定 `"aws:ResourceTag/TagKey1": "Production"`，则条件将匹配名为 `Production` 的资源标签值，但不会同时匹配 `production` 或 `PRODUCTION`。

有关使用 `aws:ResourceTag` 键控制对 IAM 资源的访问的示例，请参阅 [控制对 AWS 资源的访问](access_tags.md#access_tags_control-resources)。

有关使用 `aws:ResourceTag` 键控制对其他 AWS 资源的访问的示例，请参阅 [使用标签控制对 AWS 资源的访问](access_tags.md)。

有关使用 `aws:ResourceTag` 条件键进行基于属性的访问控制 (ABAC) 的教程，请参阅 [IAM 教程：根据标签定义访问 AWS 资源的权限](tutorial_attribute-based-access-control.md)。

## 请求的属性
<a name="condition-keys-request-properties"></a>

使用以下条件键可将有关请求本身以及请求内容的详细信息与您在策略中指定的请求属性进行比较。

### aws:CalledVia
<a name="condition-keys-calledvia"></a>

使用此键可以将策略中的服务与代表 IAM 主体（用户或角色）发出请求的服务进行比较。当主体向 AWS 服务发出请求时，该服务可能会使用主体的凭证向其他服务发出后续请求。当使用前向访问会话 (FAS) 发出请求时，此键将设置为服务主体的值。`aws:CalledVia` 键包含链中代表主体发出请求的每个服务的有序列表。

有关更多信息，请参阅 [转发访问会话](access_forward_access_sessions.md)。
+ **可用性** - 当支持 `aws:CalledVia` 的服务使用 IAM 主体的凭证向其他服务发出请求时，此键会出现在请求中。如果服务使用[服务角色或服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#id_roles_terms-and-concepts)代表主体进行调用，则此键不存在。当主体直接进行调用时，此键也不存在。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)（列表）
+ **值类型**— 多值

要在策略中使用 `aws:CalledVia` 条件键，您必须提供服务主体以允许或拒绝 AWS 服务请求。例如，您可以使用 AWS CloudFormation 从 Amazon DynamoDB 表中读取和写入。然后，DynamoDB 使用 AWS Key Management Service (AWS KMS) 提供的加密操作。

要在*任何* 服务使用主体的凭证发出请求时允许或拒绝访问，请使用 `aws:ViaAWSService` 条件键。该条件键支持 AWS 服务。

`aws:CalledVia` 键是[多值键](reference_policies_condition-single-vs-multi-valued-context-keys.md)。但是，您不能在条件下强制使用此键进行排序。使用上面的示例，**User 1**（用户 1）向 CloudFormation 发出请求，然后依次调用 DynamoDB 和调用 AWS KMS。这是三个单独的请求。对 AWS KMS 的最终调用是由用户 1 *通过* CloudFormation，然后通过 DynamoDB 进行的。

![\[使用 aws:CalledVia 的示例\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/condition-key-calledvia-example-diagram.png)


在这种情况下，请求上下文中的 `aws:CalledVia` 键包括 `cloudformation.amazonaws.com` 和 `dynamodb.amazonaws.com`（按照该顺序）。如果您只关心调用是在请求链中的某个地方通过 DynamoDB 进行的，则可以在策略中使用此条件键。

例如，以下策略允许管理名为 `my-example-key` 的 AWS KMS 键，但前提为 DynamoDB 是发出请求的服务之一。`ForAnyValue:StringEquals` 条件运算符确保 DynamoDB 是发出调用的服务之一。如果主体直接调用 AWS KMS，则条件将返回 `false`，且此策略不允许请求。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "KmsActionsIfCalledViaDynamodb",
            "Effect": "Allow",
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey",
                "kms:DescribeKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/my-example-key",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:CalledVia": [
                        "dynamodb.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

如果要强制由哪个服务在链中进行第一个或最后一个调用，可以使用 `aws:CalledViaFirst` 和 `aws:CalledViaLast` 键。例如，以下策略允许管理 AWS KMS 中名为 `my-example-key` 的键。仅当链中包含多个请求时，才允许执行这些 AWS KMS 操作。第一个请求必须通过 CloudFormation 发出，而最后一个请求必须通过 DynamoDB 发出。如果其他服务在链的中间发出请求，则仍然允许该操作。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "KmsActionsIfCalledViaChain",
            "Effect": "Allow",
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey",
                "kms:DescribeKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/my-example-key",
            "Condition": {
                "StringEquals": {
                    "aws:CalledViaFirst": "cloudformation.amazonaws.com",
                    "aws:CalledViaLast": "dynamodb.amazonaws.com"
                }
            }
        }
    ]
}
```

------

当服务使用 IAM 主体的凭证调用另一个服务时，请求中会存在 `aws:CalledViaFirst` 和 `aws:CalledViaLast` 键。它们表示在请求链中进行调用的第一个和最后一个服务。例如，假定 CloudFormation 调用另一个名为 `X Service` 的服务，然后依次调用 DynamoDB，然后调用 AWS KMS。对 AWS KMS 的最终调用是由 `User 1` 依次*通过* CloudFormation、`X Service` 和 DynamoDB 进行的。首先通过 DynamoDB 进行调用，最后通过 CloudFormation 进行调用。

![\[使用 aws:CalledViaFirst 和 aws:CalledViaLast 的示例\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/condition-key-calledviafirstlast-example-diagram.png)


### aws:CalledViaFirst
<a name="condition-keys-calledviafirst"></a>

使用此键可以将策略中的服务与代表 IAM 主体（用户或角色）发出请求的***第一个服务*** 进行比较。有关更多信息，请参阅 `aws:CalledVia`。
+ **Availability**（可用性）- 当服务使用 IAM 主体的凭证向其他服务发出至少一个其他请求时，此键会出现在请求中。如果服务使用[服务角色或服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#id_roles_terms-and-concepts)代表主体进行调用，则此键不存在。当主体直接进行调用时，此键也不存在。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型** - 单值

### aws:CalledViaLast
<a name="condition-keys-calledvialast"></a>

使用此键可以将策略中的服务与代表 IAM 主体（用户或角色）发出请求的*最后一个服务*进行比较。有关更多信息，请参阅 `aws:CalledVia`。
+ **Availability**（可用性）- 当服务使用 IAM 主体的凭证向其他服务发出至少一个其他请求时，此键会出现在请求中。如果服务使用[服务角色或服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#id_roles_terms-and-concepts)代表主体进行调用，则此键不存在。当主体直接进行调用时，此键也不存在。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型** - 单值

### aws:ViaAWSService
<a name="condition-keys-viaawsservice"></a>

使用此键检查 AWS 服务 是否使用[转发访问会话（FAS）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)代表你向另一项服务发出请求。

当服务使用转发访问会话代表原始 IAM 主体发出请求时，请求上下文键会返回 `true`。当主体直接进行调用时，请求上下文密钥也会返回 `false`。
+ **Availability**（可用性）- 此键始终包含在请求上下文中。
+ **数据类型** – [布尔值](reference_policies_elements_condition_operators.md#Conditions_Boolean)
+ **值类型** - 单值

### aws:CalledViaAWSMCP
<a name="condition-keys-calledviaawasmcp"></a>

使用此键可以将策略中的服务与代表 IAM 主体（用户或角色）发出请求的 AWS MCP 服务进行比较。当主体向 AWS MCP 服务发出请求时，该服务可能会使用主体的凭证向其他服务发出后续请求。当使用 AWS MCP 服务发出请求时，此键将设置为服务主体的值。`aws:CalledViaAWSMCP` 键包含代表主体发出请求的 MCP 服务的服务主体名称。
+ **可用性** - 当 AWS MCP 服务使用 IAM 主体的凭证向 AWS 服务发出请求时，此键会出现在请求中。当主体直接进行调用时，此键也不存在。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型** - 单值

您可以根据由哪个特定 MCP 服务器发出请求，使用此条件键允许或拒绝访问。例如，当敏感的删除操作通过特定 MCP 服务器发出时，以下策略会拒绝这些操作：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "DenySensitiveActionsViaSpecificMCP",
            "Effect": "Deny",
            "Action": [
                "s3:DeleteBucket",
                "s3:DeleteObject",
                "dynamodb:DeleteTable"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:CalledViaAWSMCP": "aws-mcp.amazonaws.com"
                }
            }
        }
    ]
}
```

### aws:ViaAWSMCPService
<a name="condition-keys-viaawsmcpservice"></a>

使用此键检查 AWS MCP 服务是否使用转发访问会话（FAS）代表你向另一项 AWS 服务发出请求。当 AWS MCP 服务代表原始 IAM 主体将请求转发到 AWS 请求时，请求上下文键会返回 `true`。当主体直接进行调用时，请求上下文密钥也会返回 `false`。
+ **可用性** – 当 AWS MCP 服务器代表 IAM 主体向下游 AWS 服务发出请求时，此键包含在请求上下文中。
+ **数据类型** – [布尔值](reference_policies_elements_condition_operators.md#Conditions_Boolean)
+ **值类型** - 单值

当特定操作通过 MCP 服务器时，您可以使用此键来限制这些操作。例如，以下策略拒绝通过任何 AWS MCP 服务器发出的敏感删除操作：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "DenySensitiveActionsViaMCP",
            "Effect": "Deny",
            "Action": [
                "s3:DeleteBucket",
                "s3:DeleteObject",
                "dynamodb:DeleteTable"
            ],
            "Resource": "*",
            "Condition": {
                "Bool": {
                    "aws:ViaAWSMCPService": "true"
                }
            }
        }
    ]
}
```

### aws:CurrentTime
<a name="condition-keys-currenttime"></a>

使用此键可将请求的日期和时间与您在策略中指定的日期和时间进行比较。要查看使用此条件键的示例策略，请参阅[AWS：允许基于日期和时间进行访问](reference_policies_examples_aws-dates.md)。
+ **Availability**（可用性）- 此键始终包含在请求上下文中。
+ **数据类型** – [日期](reference_policies_elements_condition_operators.md#Conditions_Date)
+ **值类型** - 单值

### aws:EpochTime
<a name="condition-keys-epochtime"></a>

使用此键可将请求的日期和时间（以 epoch 或 Unix 时间表示）与您在策略中指定的值进行比较。此键还接受自 1970 年 1 月 1 日以来的秒数。
+ **Availability**（可用性）- 此键始终包含在请求上下文中。
+ **数据类型** – [日期](reference_policies_elements_condition_operators.md#Conditions_Date)、[数字](reference_policies_elements_condition_operators.md#Conditions_Numeric)
+ **值类型** - 单值

### aws:referer
<a name="condition-keys-referer"></a>

使用此键可将在客户端浏览器中引用请求的站点与您在策略中指定的引用站点进行比较。`aws:referer` 请求上下文值是由调用方在 HTTP 标头中提供的。当您在网页上选择链接时，`Referer` 标题将包含在 Web 浏览器请求中。`Referer` 标题包含选定链接的网页的 URL。
+ **Availability**（可用性）- 仅当通过从浏览器中的网页 URL 链接来调用对 AWS 资源的请求时，才将此键包含在请求上下文中。编程请求不包括此键，因为它不使用浏览器链接即可访问 AWS 资源。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型**— 单值

例如，您可以直接使用 URL 或使用直接 API 调用访问 Amazon S3 对象。有关更多信息，请参阅[使用 Web 浏览器直接调用 Amazon S3 API 操作](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html#example-bucket-policies-use-case-4)。当您从网页中存在的 URL 访问 Amazon S3 对象时，源网页的 URL 将在 `aws:referer` 中使用。当您通过在浏览器中键入 URL 来访问 Amazon S3 对象时，`aws:referer` 不存在。直接调用 API 时，`aws:referer` 也不存在。您可以使用策略中的 `aws:referer` 条件键以允许来自特定引用站点发出的请求，例如公司域中网页上的链接。

**警告**  
应谨慎使用此键。包含公共已知的引用站点标头值是非常危险的。未经授权方可能会使用修改的浏览器或自定义浏览器提供他们选择的任何 `aws:referer` 值。因此，`aws:referer` 不应用于阻止未经授权方直接发出 AWS 请求。提供它只是为了允许客户保护其数字内容（如存储在 Amazon S3 中的内容），以免在未经授权的第三方站点上引用。

### aws:RequestedRegion
<a name="condition-keys-requestedregion"></a>

使用此键可将已在请求中调用的 AWS 区域与您在策略中指定的区域进行比较。您可以使用此全局条件键来控制可请求的区域。要查看每个服务的 AWS 区域，请参阅《Amazon Web Services 一般参考》中的 [服务端点和限额](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)**。
+ **Availability**（可用性）- 此键始终包含在请求上下文中。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型**— 单值

一些全球服务（如 IAM）具有单个端点。因为此端点的物理位置在美国东部（弗吉尼亚北部）区域，所以 IAM 调用始终会向 us-east-1 区域发出。例如，如果您创建一个策略以在请求的区域不是 us-west-2 时拒绝访问所有服务，则 IAM 调用将始终失败。要查看如何解决此问题的示例，请参阅 [NotAction 与 Deny](reference_policies_elements_notaction.md)。

**注意**  
使用 `aws:RequestedRegion` 条件键可以控制服务的哪个端点被调用，但不控制该操作产生的影响。一些服务具有跨区域影响。  
例如，Amazon S3 具有跨区域扩展的 API 操作。  
您可以在一个区域中调用 `s3:PutBucketReplication`（受 `aws:RequestedRegion` 条件键的影响），但其他区域将会受到影响，具体取决于复制配置设置。
您可以调用 `s3:CreateBucket` 在另一个区域创建存储桶，然后使用 `s3:LocationConstraint` 条件键来控制适用区域。

您可以使用该上下文密钥将访问限制为一组给定区域中的 AWS 服务。例如，以下策略允许用户查看 AWS 管理控制台 中的所有 Amazon EC2 实例。但是，它仅允许用户更改爱尔兰 (eu-west-1)、伦敦 (eu-west-2) 或巴黎 (eu-west-3) 中的实例。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "InstanceConsoleReadOnly",
            "Effect": "Allow",
            "Action": [
                "ec2:Describe*",
                "ec2:Export*",
                "ec2:Get*",
                "ec2:Search*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "InstanceWriteRegionRestricted",
            "Effect": "Allow",
            "Action": [
                "ec2:Associate*",
                "ec2:Import*",
                "ec2:Modify*",
                "ec2:Monitor*",
                "ec2:Reset*",
                "ec2:Run*",
                "ec2:Start*",
                "ec2:Stop*",
                "ec2:Terminate*"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestedRegion": [
                        "eu-west-1",
                        "eu-west-2",
                        "eu-west-3"
                    ]
                }
            }
        }
    ]
}
```

------

### aws:RequestTag/*tag-key*
<a name="condition-keys-requesttag"></a>

使用此键可将请求中传递的标签键/值对与您在策略中指定的标签对进行比较。例如，您可以检查请求是否包含标签键 `"Dept"` 并具有 `"Accounting"` 值。有关更多信息，请参阅 [在 AWS 请求期间控制访问](access_tags.md#access_tags_control-requests)。
+ **Availability**（可用性）– 当在请求中传递标签键值对时，将此键包含在请求上下文中。在请求中传递多个标签时，每个标签键/值对均有一个上下文密钥。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型**— 单值

该上下文密钥的格式为 `"aws:RequestTag/tag-key":"tag-value"`，其中 *tag-key* 和 *tag-value* 是标签键值对。标签键不区分大小写。这意味着，如果您在策略的条件元素中指定 `"aws:RequestTag/TagKey1": "Value1"`，则条件将匹配名为 `TagKey1` 或 `tagkey1` 的请求标签键，但不会同时匹配两者。这些标签键/值对中的值应区分大小写。这意味着，如果您在策略的条件元素中指定 `"aws:RequestTag/TagKey1": "Production"`，则条件将匹配名为 `Production` 的请求标签值，但不会同时匹配 `production` 或 `PRODUCTION`。

这个例子表明，虽然该键是单值的，但如果键不同，您仍然可以在请求中使用多个键值对。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "ec2:CreateTags",
    "Resource": "arn:aws:ec2::111122223333:instance/*",
    "Condition": {
      "StringEquals": {
        "aws:RequestTag/environment": [
          "preprod",
          "production"
        ],
        "aws:RequestTag/team": [
          "engineering"
        ]
      }
    }
  }
}
```

------

### aws:TagKeys
<a name="condition-keys-tagkeys"></a>

使用此键可将请求中的标签键与您在策略中指定的键进行比较。我们建议当使用策略来通过标签控制访问时，请使用 `aws:TagKeys` 条件键来定义允许的标签键。有关示例策略和更多信息，请参阅[根据标签键控制访问](access_tags.md#access_tags_control-tag-keys)。
+ **Availability**（可用性）– 仅在操作支持将标签传递到请求中时，才将此键包含在请求上下文中。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)（列表）
+ **值类型**— 多值

该上下文密钥的格式为 `"aws:TagKeys":"tag-key"`，其中 *tag-key* 是没有值的标签键列表 (例如，`["Dept","Cost-Center"]`)。

由于可在一个请求中包含多个标签键/值对，因此，请求内容可以是[多值](reference_policies_condition-single-vs-multi-valued-context-keys.md)请求。在此情况下，您必须使用 `ForAllValues` 或 `ForAnyValue` 集合运算符。有关更多信息，请参阅 [多值上下文键的集合运算符](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)。

某些服务支持同时使用标记和资源操作，例如创建、修改或删除资源。要允许在单次调用中同时使用标记和操作，您必须创建同时包含标记操作和资源修改操作的策略。然后，您可以使用 `aws:TagKeys` 条件键强制在请求中使用特定标签键。例如，要在某人创建 Amazon EC2 快照时限制标签，您必须在策略中包含 `ec2:CreateSnapshot`创建操作***和*** `ec2:CreateTags` 标记操作。要查看此使用 `aws:TagKeys` 场景的策略，请参阅《*Amazon EC2 用户指南*》中的[创建具有标签的快照](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ExamplePolicies_EC2.html#iam-creating-snapshot-with-tags)。

### aws:SecureTransport
<a name="condition-keys-securetransport"></a>

使用此键可检查是否已使用 TLS 发送请求。请求上下文将返回 `true` 或 `false`。在策略中，只能在使用 TLS 发送请求时允许特定操作。
+ **Availability**（可用性）- 此键始终包含在请求上下文中。
+ **数据类型** – [布尔值](reference_policies_elements_condition_operators.md#Conditions_Boolean)
+ **值类型** - 单值

**注意**  
当 AWS 服务 代表您调用其它 AWS 服务（服务到服务调用）时，会编辑某些特定于网络的授权上下文。如果您的策略将此条件键与 `Deny` 语句结合使用，则 AWS 服务 主体可能会无意中受到屏蔽。要让 AWS 服务 在保持安全要求的同时正常运行，请通过添加值为 `false` 的 `aws:PrincipalIsAWSService` 条件键将服务主体排除在 `Deny` 语句之外。例如：  

```
{
  "Effect": "Deny",
  "Action": "s3:*",
  "Resource": "*",
  "Condition": {
    "Bool": {
      "aws:SecureTransport": "false",
      "aws:PrincipalIsAWSService": "false"
    }
  }
}
```
当未使用 HTTPS（`aws:SecureTransport` 为 false）时，此策略拒绝访问 Amazon S3 操作，但仅适用于非 AWS 服务主体。这可以确保条件限制适用于除 AWS 服务 主体之外的所有主体。

### aws:SourceAccount
<a name="condition-keys-sourceaccount"></a>

使用该键可将发出服务到服务请求的资源的账户 ID 与您在策略中指定的账户 ID 进行比较，但仅当请求由 AWS 服务主体发出时才有效。
+ **可用性** – 仅当 [AWS 服务主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)代表配置触发服务到服务请求的资源直接调用您的资源时，才会将该键包含在请求上下文中。发出调用的服务将原始资源的账户 ID 传递给被调用的服务。
**注意**  
此键提供了一种统一机制，用于跨 AWS 服务 执行跨服务的混淆代理控制。但是，并非所有服务集成都需要使用此全局条件键。有关缓解跨服务的混淆代理风险的服务特定机制的更多信息，请参阅您使用的 AWS 服务 的文档。  
![\[aws:SourceAccount\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/sourceAccount.png)
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型** - 单值

您可以使用此条件键，帮助确保调用服务仅能够在请求来自特定账户时访问您的资源。例如，您可以附加以下资源控制策略（RCP）来拒绝服务主体针对 Amazon S3 存储桶提出的请求，除非这些请求是由指定账户中的资源触发的。此策略仅对存在 `aws:SourceAccount` 密钥的服务主体（`"Bool": {"aws:PrincipalIsAWSService": "true"}`）（`"Null": {"aws:SourceAccount": "false"}`）进行的请求应用控制，因此不需要使用此键的服务集成和主体的调用不会受到影响。如果 `aws:SourceAccount` 键存在于请求上下文中，则 `Null` 条件将评估为 `true`，从而强制执行 `aws:SourceAccount` 键。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "RCPEnforceConfusedDeputyProtection",
      "Effect": "Deny",
      "Principal": "*",
      "Action": [
        "s3:*"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEqualsIfExists": {
          "aws:SourceAccount": "111122223333"
        },
        "Null": {
          "aws:SourceAccount": "false"
        },
        "Bool": {
          "aws:PrincipalIsAWSService": "true"
        }
      }
    }
  ]
}
```

------

在主体为 AWS 服务 主体的基于资源的策略中，使用键限制授予服务的权限。例如，当 Amazon S3 存储桶被配置为向 Amazon SNS 主题发送通知时，Amazon S3 服务将为所有已配置的事件调用 `sns:Publish` API 操作。在允许 `sns:Publish` 操作的主题策略中，将条件键的值设置为 Amazon S3 桶的账户 ID。

### aws:SourceArn
<a name="condition-keys-sourcearn"></a>

使用该键可将发出服务到服务请求的资源的 [Amazon 资源名称（ARN）](reference_identifiers.md#identifiers-arns)与您在策略中指定的 ARN 进行比较，但仅当请求由 AWS 服务主体发出时才有效。源的 ARN 包含账户 ID 时，不必将 `aws:SourceAccount` 与 `aws:SourceArn` 结合使用。

此键不适用于发出请求的主体的 ARN。请改用`aws:PrincipalArn`。
+ **可用性** – 仅当 [AWS 服务主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)代表配置触发服务到服务请求的资源直接调用您的资源时，才会将该键包含在请求上下文中。发出调用的服务将原始资源的 ARN 传递给被调用的服务。
**注意**  
此键提供了一种统一机制，用于跨 AWS 服务 执行跨服务的混淆代理控制。但是，并非所有服务集成都需要使用此全局条件键。有关缓解跨服务的混淆代理风险的服务特定机制的更多信息，请参阅您使用的 AWS 服务 的文档。  
![\[aws:SourceArn\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/sourceArn.png)
+ **数据类型** – ARN

  AWS 建议在比较 ARN 时使用 [ARN 运算符](reference_policies_elements_condition_operators.md#Conditions_ARN)而不是[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)。
+ **值类型** - 单值

您可以使用此条件键，帮助确保调用服务仅能够在请求来自特定资源时访问您的资源。使用 AWS 服务 主体为 `Principal` 的基于资源的策略时，请将此条件键的值设置为您要限制访问的资源的 ARN。例如，当 Amazon S3 存储桶被配置为向 Amazon SNS 主题发送通知时，Amazon S3 服务将为所有已配置的事件调用 `sns:Publish` API 操作。在允许 `sns:Publish` 操作的主题策略中，将条件键的值设置为 Amazon S3 桶的 ARN。有关何时在基于资源的策略中使用此条件键的建议，请参阅您正在使用的 AWS 服务 的文档。

### aws:SourceOrgID
<a name="condition-keys-sourceorgid"></a>

使用该键可将发出服务到服务请求的资源的[组织 ID](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_details.html) 与您在策略中指定的组织 ID 进行比较，但仅当请求由 AWS 服务主体发出时才有效。当您在 AWS Organizations 中向组织添加和删除账户时，包含 `aws:SourceOrgID` 键的策略将自动包含正确的账户，并且不必手动更新。
+ **可用性** – 仅当 [AWS 服务主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)代表属于组织成员的账户拥有的资源直接调用您的资源时，才会将该键包含在请求上下文中。发出调用的服务将原始资源的组织 ID 传递给被调用的服务。
**注意**  
此键提供了一种统一机制，用于跨 AWS 服务 执行跨服务的混淆代理控制。但是，并非所有服务集成都需要使用此全局条件键。有关缓解跨服务的混淆代理风险的服务特定机制的更多信息，请参阅您使用的 AWS 服务 的文档。  
![\[aws:SourceOrgID\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/sourceOrgID.png)
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型** - 单值

您可以使用此条件键，帮助确保调用服务仅能够在请求来自特定组织时访问您的资源。例如，您可以附加以下资源控制策略（RCP）来拒绝服务主体针对 Amazon S3 存储桶提出的请求，除非这些请求是由指定的 AWS 组织中的资源触发的。此策略仅对存在 `aws:SourceAccount` 密钥（`"Null": {"aws:SourceAccount": "false"}`）的服务主体（`"Bool": {"aws:PrincipalIsAWSService": "true"}`）进行的请求应用控制，因此不需要使用此键的服务集成和主体的调用不会受到影响。如果 `aws:SourceAccount` 键存在于请求上下文中，则 `Null` 条件将评估为 `true`，从而强制执行 `aws:SourceOrgID` 键。我们在 `Null` 条件运算符中使用 `aws:SourceAccount` 代替 `aws:SourceOrgID`，因此，如果请求来自不属于组织的账户，则控制仍然适用。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "RCPEnforceConfusedDeputyProtection",
      "Effect": "Deny",
      "Principal": "*",
      "Action": [
        "s3:*"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEqualsIfExists": {
          "aws:SourceOrgID": "o-xxxxxxxxxx"
        },
        "Null": {
          "aws:SourceAccount": "false"
        },
        "Bool": {
          "aws:PrincipalIsAWSService": "true"
        }
      }
    }
  ]
}
```

------

### aws:SourceOrgPaths
<a name="condition-keys-sourceorgpaths"></a>

使用该键可将发出服务到服务请求的资源的 AWS Organizations 路径与您在策略中指定的组织路径进行比较，但仅当请求由 AWS 服务主体发出时才有效。AWS Organizations 路径是 AWS Organizations 实体结构的文本表示形式。有关使用和了解路径的更多信息，请参阅[了解 AWS Organizations 实体路径](access_policies_last-accessed-view-data-orgs.md#access_policies_last-accessed-viewing-orgs-entity-path)。
+ **可用性** – 仅当 [AWS 服务主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)代表属于组织成员的账户拥有的资源直接调用您的资源时，才会将该键包含在请求上下文中。发出调用的服务将原始资源的组织路径传递给被调用的服务。
**注意**  
此键提供了一种统一机制，用于跨 AWS 服务 执行跨服务的混淆代理控制。但是，并非所有服务集成都需要使用此全局条件键。有关缓解跨服务的混淆代理风险的服务特定机制的更多信息，请参阅您使用的 AWS 服务 的文档。  
![\[aws:SourceOrgPaths\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/sourceOrgPaths.png)
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)（列表）
+ **值类型**— 多值

使用此条件键，帮助确保调用服务仅能够在请求来自 AWS Organizations 中特定组织单元（OU）时访问您的资源。

与 `aws:SourceOrgID` 类似的是，为了帮助防止对不需要使用此键的服务集成造成影响，请结合使用 `Null` 条件运算符和 `aws:SourceAccount` 条件键，这样，如果请求来自不属于组织的账户，则该控制仍然适用。

```
{
      "Condition": {
        "ForAllValues:StringNotLikeIfExists": {
            "aws:SourceOrgPaths": "o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/"
        },
        "Null": {
          "aws:SourceAccount": "false"
        },
        "Bool": {
          "aws:PrincipalIsAWSService": "true"
        }
      }
}
```

`aws:SourceOrgPaths` 是一个多值条件键。多值键在请求上下文中可以有多个值。对于此键，您必须将 `ForAnyValue` 或者 `ForAllValues` 集合运算符与[字符串条件运算符](reference_policies_elements_condition_operators.md#Conditions_String)搭配使用。有关多值条件键的更多信息，请参阅[多值上下文键的集合运算符](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)。

### aws:UserAgent
<a name="condition-keys-useragent"></a>

使用此键可将请求者的客户端应用程序与您在策略中指定的应用程序进行比较。
+ **Availability**（可用性）- 此键始终包含在请求上下文中。
+ **数据类型** – [字符串](reference_policies_elements_condition_operators.md#Conditions_String)
+ **值类型**— 单值

**警告**  
应谨慎使用此键。由于 `aws:UserAgent` 值由发起人在 HTTP 标头中提供，因此未经授权方可以修改或自定义浏览器以提供他们选择的任何 `aws:UserAgent` 值。因此，`aws:UserAgent` 不应用于阻止未经授权方直接发出 AWS 请求。您可以使用它来仅允许特定客户端应用程序，并且仅在对策略进行测试之后。

### aws:IsMcpServiceAction
<a name="condition-keys-ismcpserviceaction"></a>

使用此键可验证正在授权的操作是否是 MCP 服务操作。此键不涉及 MCP 服务对其他 AWS 服务执行的操作。
+ **可用性**：此键包含在请求上下文中，仅当 MCP 服务授权 MCP 服务操作时设置为 True。
+ **数据类型** – [布尔值](reference_policies_elements_condition_operators.md#Conditions_Boolean)
+ **值类型** - 单值

## 其他跨服务条件键
<a name="condition-keys-other"></a>

AWS STS 支持将[基于 SAML 的联合身份验证条件键](reference_policies_iam-condition-keys.md#condition-keys-saml)和跨服务条件键用于 [OIDC 联合身份验证](reference_policies_iam-condition-keys.md#condition-keys-wif)。当使用 OIDC 或 SAML 联合的用户在其他服务中执行 AWS 操作时，这些键可用。

# IAM 和 AWS STS 条件上下文密钥
<a name="reference_policies_iam-condition-keys"></a>

您可以在 JSON 策略中使用 `Condition` 元素来测试所有 AWS 请求的请求上下文中所包含键的值。这些键提供有关请求本身或请求所引用资源的信息。在允许用户请求的操作之前，您可以检查这些键是否具有指定值。这样，您就可以精细控制 JSON 策略语句何时与传入的请求匹配或不匹配。有关如何在 JSON 策略中使用 `Condition` 元素的信息，请参阅[IAM JSON 策略元素：Condition](reference_policies_elements_condition.md)。

本主题介绍了由 IAM 服务定义和提供的键（带 `iam:` 前缀）以及由 AWS Security Token Service (AWS STS) 服务定义和提供的键（带 `sts:` 前缀）。其他几个 AWS 服务也提供与该服务定义的操作和资源相关的服务特定键。有关更多信息，请参阅 [AWS 服务的操作、资源和条件键](reference_policies_actions-resources-contextkeys.html)。支持条件键的服务的文档通常包含附加信息。例如，有关可在 Amazon S3 资源的策略中使用的密钥信息，请参阅 *Amazon Simple Storage Service 用户指南*中的 [Amazon S3 策略密钥](https://docs.aws.amazon.com/AmazonS3/latest/userguide/amazon-s3-policy-keys.html#AvailableKeys-iamV2)。

**Topics**
+ [IAM 的可用键](#available-keys-for-iam)
+ [AWS OIDC 联合身份验证的可用键](#condition-keys-wif)
+ [基于 SAML 的 AWS STS 联合身份验证的可用键](#condition-keys-saml)
+ [基于 SAML 的跨服务 AWS STS 联合身份验证上下文键](#cross-condition-keys-saml)
+ [AWS STS 的可用键](#condition-keys-sts)

## IAM 的可用键
<a name="available-keys-for-iam"></a>

可以在控制对 IAM 资源的访问的策略中使用以下条件键：

**iam:AssociatedResourceArn**  
与 [ARN 运算符](reference_policies_elements_condition_operators.md#Conditions_ARN)结合使用。  
指定此角色在目标服务上关联的资源的 ARN。资源通常属于主体将角色传递到的服务。有时，资源可能属于第三个服务。例如，您可以将角色传递给他们在 Amazon EC2 实例上使用的 Amazon EC2 Auto Scaling。在这种情况下，条件将匹配 Amazon EC2 实例的 ARN。  
此条件键仅适用于策略中的 [PassRole](id_roles_use_passrole.md) 操作。无法使用它来限制任何其他操作。  
当在策略中使用 `iam:AssociatedResourceArn` 条件来限制 [PassRole](id_roles_use_passrole.md) 操作时，如果该策略旨在定义 [AddRoleToInstanceProfile](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AddRoleToInstanceProfile.html) 操作的访问权限，则需要特别考虑。在这种情况下，您无法在 EC2 实例 ARN 中指定区域或实例 ID。ARN 值必须为 `arn:aws:ec2:*:CallerAccountId:instance/*`。使用任何其他 ARN 值都可能会导致意外的评估结果。
在基于身份的策略中使用此条件键可允许实体传递角色，但前提是角色与指定资源相关联。例如，您可以允许 IAM 用户或角色将任何角色传递给 Amazon EC2 服务，以便与 AWS 账户 中的实例一起使用。不允许将 IAM 用户或角色传递给其他服务。  

```
{
    "Effect": "Allow",
    "Action": "iam:PassRole",
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "iam:PassedToService": "ec2.amazonaws.com"
        },
        "ArnLike": {
            "iam:AssociatedResourceARN": [
                "arn:aws:ec2:*:111122223333:instance/*"
            ]
        }
    }
}
```
支持 [iam:PassedToService](#ck_PassedToService) 的 AWS 服务也支持此条件键。

**iam:AWSServiceName**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
指定此角色将附加到的 AWS 服务。  
[https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html) API 操作支持此条件键。  
有关哪些服务支持使用服务相关角色的信息，请参阅 [使用 IAM 的 AWS 服务](reference_aws-services-that-work-with-iam.md) 并查找其在**服务相关角色**列中为**是**的服务。请选择**是**与查看该服务的服务关联角色文档的链接。
在此示例中，如果服务名称为 *access-analyzer.amazonaws.com*，您将允许实体使用 [https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html) API 操作创建与服务关联的角色。    
****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
       "Effect": "Allow",
       "Action": "iam:CreateServiceLinkedRole",
       "Resource": "*",
       "Condition": {
         "StringLike": {
           "iam:AWSServiceName": "access-analyzer.amazonaws.com"
         }
       }
     }]
 }
```

**iam:FIDO-certification**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
在注册 FIDO 安全密钥时，检查 MFA 设备 FIDO 认证级别。从 [FIDO Alliance Metadata Service（MDS）](https://fidoalliance.org/metadata/)获取设备认证。如果您的 FIDO 安全密钥的认证状态或级别发生变化，则除非设备取消注册，然后重新注册，以获取更新的认证信息，否则不会对其进行更新。  
L1、L1plus、L2、L2plus、L3、L3plus 的可能值  
在本例中，您注册了安全密钥，并为设备检索 FIDO 1 级 \$1 认证。    
****  

```
{
      "Version":"2012-10-17",		 	 	 
      "Statement": [{
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Create"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Activate",
                    "iam:FIDO-certification": "L1plus"
                }
            }
        }
    ]
                  
 }
```

**iam:FIDO-FIPS-140-2-certification**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
在注册 FIDO 安全密钥时，检查 MFA 设备 FIPS-140-2 验证认证级别。从 [FIDO Alliance Metadata Service（MDS）](https://fidoalliance.org/metadata/)获取设备认证。如果您的 FIDO 安全密钥的认证状态或级别发生变化，则除非设备取消注册，然后重新注册，以获取更新的认证信息，否则不会对其进行更新。  
L1、L2、L3、L4 的可能值  
在本例中，您注册了安全密钥，并为设备检索 FIPS-140-2 2 级认证。    
****  

```
{
      "Version":"2012-10-17",		 	 	 
      "Statement": [{
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Create"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Activate",
                    "iam:FIDO-FIPS-140-2-certification": "L2"
                }
            }
        }
    ]
                  
 }
```

**iam:FIDO-FIPS-140-3-certification**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
在注册 FIDO 安全密钥时，检查 MFA 设备 FIPS-140-3 验证认证级别。从 [FIDO Alliance Metadata Service（MDS）](https://fidoalliance.org/metadata/)获取设备认证。如果您的 FIDO 安全密钥的认证状态或级别发生变化，则除非设备取消注册，然后重新注册，以获取更新的认证信息，否则不会对其进行更新。  
L1、L2、L3、L4 的可能值  
在本例中，您注册了安全密钥，并为设备检索 FIPS-140-3 3 级认证。    
****  

```
{
      "Version":"2012-10-17",		 	 	 
      "Statement": [{
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Create"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Activate",
                    "iam:FIDO-FIPS-140-3-certification": "L3"
                }
            }
        }
    ]
                  
 }
```

**iam:OrganizationsPolicyId**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
检查具有指定 AWS Organizations ID 的策略是否与请求中使用的策略匹配。要查看使用此条件键的示例 IAM policy，请参阅。[IAM：查看 AWS Organizations 策略的服务上次访问信息](reference_policies_examples_iam_service-accessed-data-orgs.md)

**iam:PassedToService**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
指定可将角色传递到的服务的服务主体。此条件键仅适用于策略中的 [PassRole](id_roles_use_passrole.md) 操作。无法使用它来限制任何其他操作。  
在策略中使用此条件键时，请使用服务主体指定服务。服务主体是可在策略的 `Principal` 元素中指定的服务的名称。常见格式为：`SERVICE_NAME_URL.amazonaws.com`。  
您可以使用 `iam:PassedToService` 限制您的用户，使其只能将角色传递到特定服务。例如，用户可能会创建一个[服务角色](id_roles.md#iam-term-service-role)，该角色信任 CloudWatch 代表用户将日志数据写入到 Amazon S3 存储桶。之后，用户必须将一个权限策略和一个信任策略附加到新的服务角色。在此情况下，信任策略必须指定 `cloudwatch.amazonaws.com` 元素中的 `Principal`。要查看允许用户将角色传递给 CloudWatch 的策略，请参阅 [IAM：将 IAM 角色传递给特定 AWS 服务](reference_policies_examples_iam-passrole-service.md)。  
通过使用此条件键，您可以确保用户仅为您指定的服务创建服务角色。例如，如果具有之前的策略的用户尝试为 Amazon EC2 创建服务角色，操作将失败。失败的原因是因为用户无权将角色传递到 Amazon EC2。  
有时，您会将角色传递给一个服务，随后将角色传递给另一个服务。`iam:PassedToService` 仅包含担任角色的最终服务，而不包括传递角色的中间服务。  
某些服务不支持此条件键。

**iam:PermissionsBoundary**  
与 [ARN 运算符](reference_policies_elements_condition_operators.md#Conditions_ARN)结合使用。  
检查指定的策略附加为 IAM 主体资源上的权限边界。有关更多信息，请参阅 [IAM 实体的权限边界](access_policies_boundaries.md)

**iam:PolicyARN**  
与 [ARN 运算符](reference_policies_elements_condition_operators.md#Conditions_ARN)结合使用。  
检查涉及托管策略的请求中的托管策略的 Amazon Resource Name (ARN)。有关更多信息，请参阅 [控制对策略的访问](access_controlling.md#access_controlling-policies)。

**iam:RegisterSecurityKey**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
检查 MFA 设备支持的当前状态。  
`Create` 或 `Activate` 的可能值。  
在本例中，您注册了安全密钥，并为设备检索 FIPS-140-3 1 级认证。    
****  

```
{
      "Version":"2012-10-17",		 	 	 
      "Statement": [{
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Create"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Activate",
                    "iam:FIDO-FIPS-140-3-certification": "L1"
                }
            }
        }
    ]
                  
 }
```

**iam:ResourceTag/*key-name***  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
检查附加到身份资源（用户或角色）的标签是否与指定的键名称和键值匹配。  
IAM 和 AWS STS 同时支持 `iam:ResourceTag` IAM 条件键和 `aws:ResourceTag` 全局条件键。
您可采用键值对的形式向 IAM 资源添加自定义属性。有关 IAM 资源的标签的更多信息，请参阅 [AWS Identity and Access Management 资源的标签](id_tags.md)。您可以使用 `ResourceTag` [控制](access_tags.md#access_tags_control-resources)对 AWS 资源（包括 IAM 资源）的访问。但是，由于 IAM 不支持组的标签，因此您不能使用标签来控制对组的访问。  
此示例说明如何创建基于身份的策略以允许删除具有 **status=terminated** 标签的用户。要使用此策略，请将示例策略中的*斜体占位符文本*替换为您自己的信息。然后，按照[创建策略](access_policies_create.md)或[编辑策略](access_policies_manage-edit.md)中的说明操作。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Effect": "Allow",
        "Action": "iam:DeleteUser",
        "Resource": "*",
        "Condition": {"StringEquals": {"iam:ResourceTag/status": "terminated"}}
    }]
}
```

**iam:ServiceSpecificCredentialAgeDays**  
与[数字运算符](reference_policies_elements_condition_operators.md#Conditions_Numeric)结合使用。  
此条件键根据过期设置限制特定服务凭证的创建。通过此键，您可以控制可创建的特定服务凭证的最大期限（以天为单位）。  
有效天数范围为 1 到 36600 天（最短 1 天，最长 36600 天）。  
[https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceSpecificCredential.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceSpecificCredential.html) API 操作支持此条件键。  
在此示例中，只有在 90 天内过期时，才允许用户为 Amazon Bedrock 服务创建特定服务凭证。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:CreateServiceSpecificCredential",
            "Resource": "arn:aws:iam::111122223333:user/username",
            "Condition": {
                "StringEquals": {
                    "iam:ServiceSpecificCredentialServiceName": "bedrock.amazonaws.com"
                },
                "NumericLessThanEquals": {
                    "iam:ServiceSpecificCredentialAgeDays": "90"
                }
            }
        }
    ]
}
```

**iam:ServiceSpecificCredentialServiceName**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
指定在管理特定服务凭证时可以使用哪些 AWS 服务。通过此条件键，您可以限制在管理特定服务凭证时允许使用哪些 AWS 服务。  
以下 API 操作支持此条件键：  
+ [https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceSpecificCredential.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceSpecificCredential.html)
+ [https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteServiceSpecificCredential.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteServiceSpecificCredential.html)
+ [https://docs.aws.amazon.com/IAM/latest/APIReference/API_ResetServiceSpecificCredential.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ResetServiceSpecificCredential.html)
+ [https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateServiceSpecificCredential.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateServiceSpecificCredential.html)
以下服务支持特定服务凭证及其精确值格式：  
+ `bedrock.amazonaws.com`
+ `cassandra.amazonaws.com`
+ `codecommit.amazonaws.com`
在此示例中，允许用户仅使用 [https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceSpecificCredential.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceSpecificCredential.html) API 操作为 Amazon Bedrock 服务创建特定服务凭证。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:CreateServiceSpecificCredential",
            "Resource": "arn:aws:iam::111122223333:user/username",
            "Condition": {
                "StringEquals": {
                    "iam:ServiceSpecificCredentialServiceName": "bedrock.amazonaws.com"
                }
            }
        }
    ]
}
```

**iam:DelegationDuration**  
与[数字运算符](reference_policies_elements_condition_operators.md#Conditions_Numeric)结合使用。  
根据在委派请求中请求临时访问的持续时间筛选访问权限。  
产品提供商可以使用此条件键来控制其允许向客户发送的委派请求的最大持续时间。持续时间以秒为单位指定，其决定了客户发放交换令牌后临时凭证保持有效的时长。这有助于产品提供商根据其使用案例强制执行有关访问持续时间限制的内部策略。  
`CreateDelegationRequest` API 操作支持此条件键。  
在此示例中，仅当请求的持续时间为 7200 秒（2 小时）或更短时，才允许创建委派请求。  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:CreateDelegationRequest",
            "Resource": "*",
            "Condition": {
                "NumericLessThanEquals": {
                    "iam:DelegationDuration": "7200"
                }
            }
        }
    ]
}
```

**iam:NotificationChannel**  
与 [ARN 运算符](reference_policies_elements_condition_operators.md#Conditions_ARN)结合使用。  
根据为接收委派请求通知指定的 Amazon SNS 主题 ARN 筛选访问权限。  
产品提供商可以使用此条件键来限制哪些 SNS 主题可用于 CreateDelegationRequest API 调用中的委派请求通知。产品提供商必须指定 SNS 主题才能接收状态变更通知和交换令牌。这可确保通知仅发送到产品提供商组织内经批准的渠道。  
`CreateDelegationRequest` API 操作支持此条件键。  
在此示例中，仅当委派请求使用特定 SNS 主题进行通知时，才允许创建委派请求。  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:CreateDelegationRequest",
            "Resource": "*",
            "Condition": {
                "ArnEquals": {
                    "iam:NotificationChannel": "arn:aws:sns:us-east-1:123456789012:delegation-notifications"
                }
            }
        }
    ]
}
```

**iam:TemplateArn**  
与 [ARN 运算符](reference_policies_elements_condition_operators.md#Conditions_ARN)结合使用。  
根据用于在委派请求中定义权限的策略模板 ARN 筛选访问权限。  
产品提供商可以使用此条件键来控制哪些策略模板能够在 CreateDelegationRequest API 调用中使用。策略模板定义产品提供商在客户账户中请求的临时权限。这允许产品提供商限制在创建委派请求时可以使用哪些注册的策略模板。  
`CreateDelegationRequest` API 操作支持此条件键。  
在此示例中，仅当委派请求使用来自特定合作伙伴域的策略模板时，才允许创建委派请求。  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:CreateDelegationRequest",
            "Resource": "*",
            "Condition": {
                "ArnLike": {
                    "iam:TemplateArn": "arn:aws:iam:::delegation-template/partner_*"
                }
            }
        }
    ]
}
```

**iam:DelegationRequestOwner**  
与 [ARN 运算符](reference_policies_elements_condition_operators.md#Conditions_ARN)结合使用。  
根据拥有委派请求的 AWS 身份或主体筛选访问权限。  
客户可以使用此条件键来控制哪些人员可以根据所有权对委派请求执行操作。委派请求的所有者是发起或接收委派请求的客户账户中的 AWS 身份或主体。  
以下 API 操作支持此条件键：  
+ `GetDelegationRequest`
+ `AcceptDelegationRequest`
+ `RejectDelegationRequest`
+ `SendDelegatedToken`
+ `ListDelegationRequests`
+ `UpdateDelegationRequest`
在此示例中，仅允许用户管理其拥有的委派请求。  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:GetDelegationRequest",
                "iam:AcceptDelegationRequest",
                "iam:RejectDelegationRequest",
                "iam:SendDelegatedToken",
                "iam:UpdateDelegationRequest",
                "iam:ListDelegationRequests"
            ],
            "Resource": "*",
            "Condition": {
                "ArnEquals": {
                    "iam:DelegationRequestOwner": "${aws:PrincipalArn}"
                }
            }
        }
    ]
}
```

## AWS OIDC 联合身份验证的可用键
<a name="condition-keys-wif"></a>

您可以使用 OIDC 联合身份验证，为已通过 OpenID Connect 兼容的身份提供者（IdP）向您的 AWS 账户中的 IAM OpenID Connect（OIDC）身份提供者进行身份验证的用户提供临时安全凭证。此类提供者的示例包括 GitHub、Amazon Cognito、Login with Amazon 和 Google。可以使用您自己的 IdP 中的身份令牌和访问令牌，也可以使用授给 Amazon Elastic Kubernetes 服务工作负载的[服务账户令牌](https://docs.aws.amazon.com/eks/latest/userguide/service-accounts.html#service-account-tokens)。

您可以使用 AWS OIDC 条件上下文键编写策略，将联合主体的访问权限限制为与特定提供者、应用或用户关联的资源。这些键通常在角色的信任策略中使用。使用 OIDC 提供者的名称 (`token.actions.githubusercontent.com`) 和声明 (`:aud`) 定义条件键：`token.actions.githubusercontent.com:aud`。

某些 OIDC 联合身份验证条件键可以在角色会话中用于授权资源访问权限。如果“**在会话中可用**”列中的值为“**是**”，则可以在策略中使用这些条件键来定义其他 AWS 服务中允许用户访问的内容。当声明在会话中不可用时，OIDC 条件上下文键只能在角色信任策略中用于初始 [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) 身份验证。

选择您的 IdP，查看 IdP 中的声明如何映射到 AWS 中的 IAM 条件上下文键。有关 GitHub 和 Google 密钥的更多信息，可在**默认**选项卡下找到。

------
#### [ Default ]

默认列出了标准 OIDC 声明以及它们如何映射到 AWS 中的 AWS STS 条件上下文键。您可以使用这些键来控制对角色的访问。为此，请将 **AWS STS 条件键**与 **IdP JWT 声明**列中的值进行比较。如果选项卡选项中未列出您的 IdP，则使用此映射。

GitHub Actions 工作流和 Google 是在 OIDC JWT ID 令牌中使用默认实现的 IDP 的一些示例。


| AWS STS 条件键 | IdP JWT 声明 | 在会话中可用 | 
| --- | --- | --- | 
| amr | amr | 是 | 
| aud | azp 如果未为 `azp` 设置任何值，则 `aud` 条件键将映射到 `aud` 声明。 | 是 | 
| 电子邮件 | 电子邮件 | 否 | 
| oaud | aud | 否 | 
| sub | sub | 是 | 

有关将 OIDC 条件上下文键与 GitHub 结合使用的更多信息，请参阅 [为 GitHub OIDC 身份提供程序配置角色](id_roles_create_for-idp_oidc.md#idp_oidc_Create_GitHub)。有关 Google `aud` 和 `azp` 字段的更多信息，请参阅 [Google Identity Platform OpenID Connect](https://developers.google.com/identity/protocols/OpenIDConnect) 指南。

**amr**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。该键有多个值，这意味着您要在使用[条件集合运算符](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)的策略中对它进行测试。  
**示例**：`token.actions.githubusercontent.com:amr`  
“身份验证方法引用”包括有关用户的登录信息。该键可包含以下值：  
+ 如果用户未经过身份验证，则该键仅包含 `unauthenticated`。
+ 如果用户已通过身份验证，则该键包含值 `authenticated` 以及调用 (`accounts.google.com`) 中使用的登录提供者的名称。

**aud**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例：**  
+ `accounts.google.com:aud`
+ `token.actions.githubusercontent.com:aud`
使用 `aud` 条件键验证受众是否与您在策略中指定的内容匹配。对于同一身份提供者，可以将 aud 键与 sub 键结合使用。  
此条件键是从以下令牌字段设置的：  
+ 应用程序的 OAuth 2.0 Google 客户端 ID 的 `aud`（如果未设置 `azp` 字段）。如果设置了 `azp` 字段，则 `aud` 字段将与 `accounts.google.com:oaud` 条件键匹配。
+ `azp`（如果设置了 `azp` 字段）。对于 Web 应用程序和 Android 应用程序具有不同的 OAuth 2.0 Google 客户端 ID 但共享相同的 Google API 项目的混合应用程序，可能会出现这种情况。
在使用 `accounts.google.com:aud` 条件键编写策略时，您必须了解该应用程序是否为设置 `azp` 字段的混合应用程序。  
`azp` 字段未设置  
以下示例策略适用于未设置 `azp` 字段的非混合应用程序。在此情况下，Google ID 令牌 `aud` 字段值将与 `accounts.google.com:aud` 和 `accounts.google.com:oaud` 条件键值匹配。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {"Federated": "accounts.google.com"},
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "accounts.google.com:aud": "aud-value",
                    "accounts.google.com:oaud": "aud-value",
                    "accounts.google.com:sub": "sub-value"
                }
            }
        }
    ]
}
```
`azp` 字段已设置  
以下示例策略适用于设置 `azp` 字段的混合应用程序。在此情况下，Google ID 令牌 `aud` 字段值仅与 `accounts.google.com:oaud` 条件键值匹配。`azp` 字段值与 `accounts.google.com:aud` 条件键值匹配。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {"Federated": "accounts.google.com"},
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "accounts.google.com:aud": "azp-value",
                    "accounts.google.com:oaud": "aud-value",
                    "accounts.google.com:sub": "sub-value"
                }
            }
        }
    ]
}
```

**email**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例**：`accounts.google.com:email`  
此条件键验证用户的电子邮件地址。此声明的值可能不是此账户所独有的，并且可能会随着时间的推移而发生变化，因此您不应使用此值作为主要标识符来验证用户记录。

**oaud**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例**：`accounts.google.com:oaud`  
此键指定此 ID 令牌用于的其他受众 (`aud`)。它必须是应用程序的 OAuth 2.0 客户端 ID 之一。

**sub**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例：**  
+ `accounts.google.com:sub`
+ token.actions.githubusercontent.com:sub
使用这些键验证使用者是否与您在策略中指定的内容匹配。对于同一身份提供程序，可以将 `sub` 键与 `aud` 键结合使用。  
在以下角色信任策略中，`sub` 条件键将角色限制为名为 `demo` 的 GitHib 分支。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::111122223333:oidc-provider/token.actions.githubusercontent.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
          "token.actions.githubusercontent.com:sub": "repo:org-name/repo-name:ref:refs/heads/demo"
        }
      }
    }
  ]
}
```

------
#### [ Amazon Cognito ]

此选项卡说明了 Amazon Cognito 如何将 OIDC 声明映射到 AWS 中的 AWS STS 条件上下文键。您可以使用这些键来控制对角色的访问。为此，请将 **AWS STS 条件键**与 **IdP JWT 声明**列中的值进行比较。

对于 Amazon Cognito 使用的角色，键是使用 `cognito-identity.amazonaws.com` 和声明定义的。

有关身份池声明映射的更多信息，请参阅《*Amazon Cognito 开发人员指南*》中的[默认提供商映射](https://docs.aws.amazon.com/cognito/latest/developerguide/provider-mappings.html)。有关用户池声明映射的更多信息，请参阅《*Amazon Cognito 开发人员指南*》中的[使用 ID 令牌](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-id-token.html)。


| AWS STS 条件键 | IdP JWT 声明 | 在会话中可用 | 
| --- | --- | --- | 
| amr | amr | 是 | 
| aud | aud | 是 | 
| oaud | aud | 否 | 
| sub | sub | 是 | 

**amr**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。该键有多个值，这意味着您要在使用[条件集合运算符](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)的策略中对它进行测试。  
**示例** – `cognito-identity.amazonaws.com:amr`  
“身份验证方法引用”包括有关用户的登录信息。该键可包含以下值：  
+ 如果用户未经过身份验证，则该键仅包含 `unauthenticated`。
+ 如果用户已通过身份验证，则该键包含值 `authenticated` 以及调用 (`cognito-identity.amazonaws.com`) 中使用的登录提供者的名称。
例如，某 Amazon Cognito 角色信任策略中的以下条件测试用户是否未经身份验证：  

```
"Condition": {
  "StringEquals": 
    { "cognito-identity.amazonaws.com:aud": "us-east-2:identity-pool-id" },
  "ForAnyValue:StringLike": 
    { "cognito-identity.amazonaws.com:amr": "unauthenticated" }
}
```

**aud**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例** – `cognito-identity.amazonaws.com:aud`  
对用户进行身份验证的用户群体应用程序客户端。Amazon Cognito 在访问令牌 `client_id` 声明中呈现相同的值。

**oaud**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例** – `cognito-identity.amazonaws.com:oaud`  
对用户进行身份验证的用户群体应用程序客户端。Amazon Cognito 在访问令牌 `client_id` 声明中呈现相同的值。

**sub**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例** – `cognito-identity.amazonaws.com:sub`  
经过身份验证的用户的唯一标识符（UUID）或主题。用户名在您的用户群体中可能不是唯一的。此子声明是识别给定用户的最佳方法。对于同一身份提供程序，可以将 `sub` 键与 `aud` 键结合使用。  

```
"Condition": {
         "StringEquals": {
            "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-abcd-abcd-abcd-123456790ab",
            "cognito-identity.amazonaws.com:sub": [
               "us-east-1:12345678-1234-1234-1234-123456790ab",
               "us-east-1:98765432-1234-1234-1243-123456790ab"
            ]
         }
      }
```

------
#### [ Login with Amazon ]

此选项卡说明了 Login with Amazon 如何将 OIDC 声明映射到 AWS 中的 AWS STS 条件上下文键。您可以使用这些键来控制对角色的访问。为此，请将 **AWS STS 条件键**与 **IdP JWT 声明**列中的值进行比较。


| AWS STS 条件键 | IdP JWT 声明 | 在会话中可用 | 
| --- | --- | --- | 
|  app\$1id  |  应用程序 ID  |  是  | 
|  sub  |  用户 ID  |  是  | 
|  user\$1id  |  用户 ID  |  是  | 

**app\$1id**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例** – `www.amazon.com:app_id`  
此键指定与其他身份提供者使用的 `aud` 字段匹配的受众上下文。

**sub**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例** – `www.amazon.com:sub`  
此键验证用户 ID 是否与您在策略中指定的内容匹配。对于同一身份提供程序，可以将 `sub ` 键与 `aud` 键结合使用。

**user\$1id**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例** – `www.amazon.com:user_id`  
此键指定与其他身份提供者使用的 `aud` 字段匹配的受众上下文。对于同一身份提供者，可以将 `user_id` 键与 `id` 键结合使用。

------
#### [ Facebook ]

此选项卡说明了 Facebook 如何将 OIDC 声明映射到 AWS 中的 AWS STS 条件上下文键。您可以使用这些键来控制对角色的访问。为此，请将 **AWS STS 条件键**与 **IdP JWT 声明**列中的值进行比较。


| AWS STS 条件键 | IdP JWT 声明 | 在会话中可用 | 
| --- | --- | --- | 
| app\$1id | 应用程序 ID | 是 | 
| id | id | 是 | 

**app\$1id**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例** – `graph.facebook.com:app_id`  
此键验证受众上下文是否与其他身份提供者使用的 `aud` 字段匹配。

**id**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例** – `graph.facebook.com:id`  
此键验证应用程序（或站点）ID 是否与您在策略中指定的内容匹配。

------
#### [ GitHub ]

此选项卡说明了 GitHub Actions 如何将 OIDC 声明映射到 AWS 中的 AWS STS 条件上下文键。您可以使用这些键来控制对角色的访问。为此，请将 **AWS STS 条件键**与 **IdP JWT 声明**列中的值进行比较。


| AWS STS 条件键 | IdP JWT 声明 | 在会话中可用 | 
| --- | --- | --- | 
| 演员 | 演员 | 否 | 
| actor\$1id | actor\$1id | 否 | 
| job\$1workflow\$1ref | job\$1workflow\$1ref | 否 | 
| repository | repository | 否 | 
| repository\$1id | repository\$1id | 否 | 
| workflow | workflow | 否 | 
| ref | ref | 否 | 
| 环境 | 环境 | 否 | 
| enterprise\$1id | enterprise\$1id | 否 | 

**演员**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例** – `token.actions.githubusercontent.com:actor`  
此密钥标识启动工作流程运行的个人账户。使用此密钥限制对特定角色的访问权限

**actor\$1id**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例** – `token.actions.githubusercontent.com:actor_id`  
此密钥验证启动工作流程运行的个人账户的 ID。角色 ID 由 GitHub 生成，并且是不可变的。

**job\$1workflow\$1ref**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例** – `token.actions.githubusercontent.com:job_workflow_ref`  
对于使用可重用工作流程的作业，此密钥包含可重用工作流程的参考路径。使用此密钥限制对特定工作流程的访问权限，并确保只有经过批准的工作流程才能担任角色。

**repository**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例** – `token.actions.githubusercontent.com:repository`  
此密钥标识运行工作流程的存储库。使用此密钥限制对特定 GitHub 存储库的访问权限。

**repository\$1id**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例** – `token.actions.githubusercontent.com:repository_id`  
此密钥验证运行工作流程的存储库的 ID。存储库 ID 是不可变的，即使存储库被重命名也不会更改。

**workflow**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例** – `token.actions.githubusercontent.com:workflow`  
此密钥包含工作流程的名称。使用此密钥限制对存储库中特定工作流程的访问权限。

**ref**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例** – `token.actions.githubusercontent.com:ref`  
此密钥标识触发工作流程运行的 git ref（分支或标签）。使用此密钥根据特定分支限制访问权限，例如仅允许 `main` 或 `production` 分支。

**环境**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例** – `token.actions.githubusercontent.com:environment`  
此密钥包含作业使用的环境的名称。使用此密钥实现基于环境的访问控制，例如开发环境、暂存环境和生产环境的单独权限。  
如果您的信任策略中包含环境声明，则必须在 GitHub 工作流程中配置和提供环境。

**enterprise\$1id**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例** – `token.actions.githubusercontent.com:enterprise_id`  
此密钥验证企业的 ID，该企业包含运行工作流程的存储库。使用此密钥确保访问权限仅限于您的 GitHub Enterprise 组织内的存储库。

以下示例信任策略使用 GitHub OIDC 令牌中的自定义声明来限制对角色的访问权限。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
    {
        "Effect": "Allow",
        "Principal": {
            "Federated": "arn:aws:iam::AWS_ACCOUNT_ID:oidc-provider/token.actions.githubusercontent.com"
         },
         "Action": "sts:AssumeRoleWithWebIdentity",
         "Condition": {
            "StringLike": {
                "token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
                "token.actions.githubusercontent.com:job_workflow_ref": "octo-org/octo-automation/.github/workflows/oidc.yml@refs/heads/main",
                "token.actions.githubusercontent.com:repository": "octo-org/octo-repo",
                "token.actions.githubusercontent.com:actor": "octocat",
                "token.actions.githubusercontent.com:ref": "refs/heads/main",
                "token.actions.githubusercontent.com:enterprise_id": "345"
               }
           }
        }
    ]
}
```

------
#### [ Google ]

此选项卡说明了 Google 如何将 OIDC 声明映射到 AWS 中的 AWS STS 条件上下文键。您可以使用这些键来控制对角色的访问。为此，请将 **AWS STS 条件键**与 **IdP JWT 声明**列中的值进行比较。


| AWS STS 条件键 | IdP JWT 声明 | 在会话中可用 | 
| --- | --- | --- | 
| google/organization\$1number | google:organization\$1number | 否 | 

**google/organization\$1number**  
与[数字运算符](reference_policies_elements_condition_operators.md#Conditions_Numeric)结合使用。  
**示例** – `accounts.google.com:google/organization_number`  
此密钥验证令牌是否代表属于特定 Google Cloud 或 Google Workspace 组织的 Google 身份。使用此密钥限制对来自特定组织的用户的访问权限，确保只有您所在组织的身份才能担任该角色。

以下示例信任策略使用 `google/organization_number` 声明来限制对角色的访问权限。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
    {
        "Effect": "Allow",
        "Principal": {
            "Federated": "accounts.google.com"
         },
         "Action": "sts:AssumeRoleWithWebIdentity",
         "Condition": {
            "NumericEquals": {
                "accounts.google.com:google/organization_number": "123456"
               }
           }
        }
    ]
}
```

------
#### [ CircleCI ]

此选项卡说明了 CircleCI 如何将 OIDC 声明映射到 AWS 中的 AWS STS 条件上下文键。您可以使用这些键来控制对角色的访问。为此，请将 **AWS STS 条件键**与 **IdP JWT 声明**列中的值进行比较。


| AWS STS 条件键 | IdP JWT 声明 | 在会话中可用 | 
| --- | --- | --- | 
| oidc.circleci.com/project-id | oidc.circleci.com/project-id | 否 | 

**oidc.circleci.com/project-id**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例** – `circleci-issuer-url:oidc.circleci.com/project-id`  
此密钥标识运行作业的 CircleCI 项目。其值是一个包含 UUID 的字符串，该 UUID 唯一标识 CircleCI 项目。使用此密钥限制对特定 CircleCI 项目的访问权限。

以下示例信任策略使用 `oidc.circleci.com/project-id` 声明来限制对角色的访问权限。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::123456789012:oidc-provider/oidc.circleci.com/org/12345"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "oidc.circleci.com/org/12345:aud": "sts.amazonaws.com",
          "oidc.circleci.com/org/12345:oidc.circleci.com/project-id": "76543210-ba98-fedc-3210-edcba0987654"
        }
      }
    }
  ]
}
```

------
#### [ Oracle Cloud Infrastructure (OCI) ]

此选项卡说明了 Oracle Cloud Infrastructure 如何将 OIDC 声明映射到 AWS 中的 AWS STS 条件上下文键。您可以使用这些键来控制对角色的访问。为此，请将 **AWS STS 条件键**与 **IdP JWT 声明**列中的值进行比较。


| AWS STS 条件键 | IdP JWT 声明 | 在会话中可用 | 
| --- | --- | --- | 
| rpst\$1id | rpst\$1id | 否 | 

**rpst\$1id**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
**示例** – `oci-issuer-url:rpst_id`  
此密钥唯一标识 OCI 中的资源主体。使用此密钥限制对特定 OCI 资源主体的访问权限。rpst\$1id（资源主体会话令牌 ID）为基于 OCI 资源的身份验证提供稳定的标识符。

以下示例信任策略使用 `rpst_id` 声明来限制对角色的访问权限。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::123456789012:oidc-provider/idcs-abc123ef5678901234abcd.identity.oraclecloud.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "idcs-abc123ef5678901234abcd.identity.oraclecloud.com:aud": "sts.amazonaws.com",
          "idcs-abc123ef5678901234abcd.identity.oraclecloud.com:rpst_id": "your-rpst-id"
        }
      }
    }
  ]
}
```

------

### 有关 OIDC 联合身份验证的更多信息
<a name="condition-keys-wif-more-info"></a>


+ [Amazon Cognito 用户指南](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html)
+ [OIDC 联合身份验证](id_roles_providers_oidc.md)

## 基于 SAML 的 AWS STS 联合身份验证的可用键
<a name="condition-keys-saml"></a>

如果您通过 AWS Security Token Service (AWS STS) 使用[基于 SAML 的联合](https://docs.aws.amazon.com/STS/latest/UsingSTS/CreatingSAML.html)，则可以在策略中包含更多条件键。

### SAML 角色信任策略
<a name="condition-keys-saml_trust-policy"></a>

在角色的信任策略中，您可以包括以下键，以帮助您确定发起人是否有权担任角色。除了 `saml:doc`，所有值均源自 SAML 断言。在创建或编辑带条件的策略时，可在 IAM 控制台可视化编辑器中使用列表中的所有项目。标有 `[]` 的项目*可以* 具有指定类型列表中的值。

**saml:aud**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
SAML 断言提交到的终端节点 URL。此键的值来自断言中的 `SAML Recipient` 字段，而*不是* `Audience` 字段。

**saml:commonName[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `commonName` 属性。

**saml:cn[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `eduOrg` 属性。

**saml:doc**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这代表担任角色所用的主体。格式为 *account-ID*/*provider-friendly-name*，例如 `123456789012/SAMLProviderName`。*账户 ID* 值指拥有 [SAML 提供商](id_roles_providers_create_saml.md)的账户。

**saml:edupersonaffiliation[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `eduPerson` 属性。

**saml:edupersonassurance[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `eduPerson` 属性。

**saml:edupersonentitlement[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `eduPerson` 属性。

**saml:edupersonnickname[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `eduPerson` 属性。

**saml:edupersonorgdn**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `eduPerson` 属性。

**saml:edupersonorgunitdn[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `eduPerson` 属性。

**saml:edupersonprimaryaffiliation**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `eduPerson` 属性。

**saml:edupersonprimaryorgunitdn**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `eduPerson` 属性。

**saml:edupersonprincipalname**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `eduPerson` 属性。

**saml:edupersonscopedaffiliation[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `eduPerson` 属性。

**saml:edupersontargetedid[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `eduPerson` 属性。

**saml:eduorghomepageuri[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `eduOrg` 属性。

**saml:eduorgidentityauthnpolicyuri[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `eduOrg` 属性。

**saml:eduorglegalname[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `eduOrg` 属性。

**saml:eduorgsuperioruri[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `eduOrg` 属性。

**saml:eduorgwhitepagesuri[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `eduOrg` 属性。

**saml:givenName[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `givenName` 属性。

**saml:iss**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
发布者，以 URN 表示。

**saml:mail[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `mail` 属性。

**saml:name[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `name` 属性。

**saml:namequalifier**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
基于 SAML 提供商的友好名称的哈希值。该值是以下值按顺序的连接，以“/”字符分隔：  

1. `Issuer` 响应值 (`saml:iss`)

1. `AWS` 账户 ID

1.  IAM 中 SAML 提供商的友好名称（ARN 的最后一部分） 
账户 ID 与 SAML 提供商的易记名称的串联可作为键 `saml:doc` 供 IAM policy 使用。有关更多信息，请参阅 [唯一标识基于 SAML 的联合中的用户](id_roles_providers_saml.md#CreatingSAML-userid)。

**saml:organizationStatus[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `organizationStatus` 属性。

**saml:primaryGroupSID[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `primaryGroupSID` 属性。

**saml:sub**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是该陈述的主题，其中包含唯一标识组织中某个用户的值 (例如 `_cbb88bf52c2510eabe00c1642d4643f41430fe25e3`)。

**saml:sub\$1type**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
此键的值可以是 `persistent`、`transient` 或由 SAML 断言中使用的 `Format` 和 `Subject` 元素的完整 `NameID` URI 构成。`persistent` 值表示在不同会话之间用户的 `saml:sub` 值是相同的。如果值为 `transient`，则用户在每个会话中拥有不同的 `saml:sub` 值。有关 `NameID` 元素的 `Format` 属性的信息，请参阅[为身份验证响应配置 SAML 断言。](id_roles_providers_create_saml_assertions.md)。

**saml:surname[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `surnameuid` 属性。

**saml:uid[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `uid` 属性。

**saml:x500UniqueIdentifier[]**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是 `x500UniqueIdentifier` 属性。

有关 `eduPerson` 和 `eduOrg` 属性的一般信息，请参阅 [REFEDS Wiki 网站](https://wiki.refeds.org/display/STAN/eduPerson)。有关 `eduPerson` 属性的列表，请参阅 [eduPerson 对象类规范 (201602)](https://software.internet2.edu/eduperson/internet2-mace-dir-eduperson-201602.html)。

列表类型的条件键可以包含多个值。要在策略中创建条件以获取列表值，可以使用[集合运算符](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)（`ForAllValues`、`ForAnyValue`）。例如，要支持从属关系为“教员”或“职员”（而非“学生”）的用户，可以使用下面这样的条件：

```
"Condition": {
   "ForAllValues:StringLike": {
     "saml:edupersonaffiliation":[ "faculty", "staff"] 
   }
}
```

## 基于 SAML 的跨服务 AWS STS 联合身份验证上下文键
<a name="cross-condition-keys-saml"></a>

一些基于 SAML 的联合身份验证条件键可用于后续请求中，以授权其他服务和 `AssumeRole` 调用中的 AWS 操作。以下是条件键，当联合主体担任其他角色时，可以在角色信任策略中使用它们，也可以在其他 AWS 服务的资源策略中使用它们来授权联合主体访问资源。有关使用这些键的更多信息，请参阅[关于基于 SAML 2.0 的联合身份验证](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html#CreatingSAML-userid)。

选择条件键以查看描述。
+ [saml:namequalifier](#ck_saml-namequalifier)
+ [saml:sub](#ck_saml-sub)
+ [saml:sub_type](#ck_saml-subtype)

**注意**  
在初始外部身份提供者（IdP）身份验证响应后，没有其他基于 SAML 的联合身份验证条件键可供使用。

## AWS STS 的可用键
<a name="condition-keys-sts"></a>

您可以对使用 AWS Security Token Service (AWS STS) 操作担任的角色使用 IAM 角色信任策略中的以下条件键。

**saml:sub**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
这是该陈述的主题，其中包含唯一标识组织中某个用户的值 (例如 `_cbb88bf52c2510eabe00c1642d4643f41430fe25e3`)。

**sts:AWSServiceName**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
使用此键指定可以在其中使用持有者令牌的服务。在策略中使用此条件键时，请使用服务主体指定服务。服务主体是可在策略的 `Principal` 元素中指定的服务的名称。例如，`codeartifact.amazonaws.com` 是 AWS CodeArtifact 服务主体。  
**Availability**（可用性）- 此键存在于获取持有者令牌的请求中。您不能直接调用 AWS STS 以获取持有者令牌。当您在其他服务中执行某些操作时，服务代表您请求持有者令牌。  
某些 AWS 服务需要您有权获取 AWS STS 服务持有者令牌，然后您才能以编程方式访问它们的资源。例如，AWS CodeArtifact 要求主体使用持有者令牌来执行某些操作。`aws codeartifact get-authorization-token` 命令返回一个持有者令牌。然后，您可以使用持有者令牌来执行 AWS CodeArtifact 操作。有关持有者令牌的更多信息，请参阅 [服务持有者令牌](id_credentials_bearer.md)。  
您可以使用此条件键以允许主体获取用于特定服务的持有人令牌。

**sts:DurationSeconds**  
与[数字运算符](reference_policies_elements_condition_operators.md#Conditions_Numeric)结合使用。  
使用此键指定主体在从 [GetWebIdentityToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html) API 获取 AWS AWS STS 持有者令牌或 JSON Web 令牌时可以使用的持续时间（以秒为单位）。  
**可用性**：此键存在于从 GetWebIdentityToken API 获取持有者令牌或 JSON Web 令牌的请求中。您不能直接调用 AWS STS 以获取持有者令牌。当您在其他服务中执行某些操作时，服务代表您请求持有者令牌。此键不适用于 AWS STS assume-role 操作。  
某些 AWS 服务需要您有权获取 AWS STS 服务持有者令牌，然后您才能以编程方式访问它们的资源。例如，AWS CodeArtifact 要求主体使用持有者令牌来执行某些操作。`aws codeartifact get-authorization-token` 命令返回一个持有者令牌。然后，您可以使用持有者令牌来执行 AWS CodeArtifact 操作。有关持有者令牌的更多信息，请参阅 [服务持有者令牌](id_credentials_bearer.md)。

**sts:IdentityTokenAudience**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
使用此键指定 IAM 主体可以使用 [GetWebIdentityToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html) API 向其请求 JSON Web 令牌（JWT）的受众。IAM 策略中存在此条件键时，IAM 主体只能为策略中指定的受众请求令牌。外部服务会验证 JSON Web 令牌中的受众（“aud”）声明，以确保该令牌是为其准备的。  
**可用性**：此键存在于 GetWebIdentityToken API 的请求中，该 API 用于获取通过外部服务进行身份验证的 JSON Web 令牌（JWT）。  
在策略中使用此条件键时，请指定与目标收件人的标识符匹配的受众值（例如 https://api.example.com）。  
以下示例策略将允许主体请求指定外部服务的令牌：  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:GetWebIdentityToken",
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "sts:IdentityTokenAudience": [
                        "https://api2.example.com",
                        "https://api1.example.com"
                    ]
                }
            }
        }
    ]
}
```

**sts:SigningAlgorithm**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
使用此键指定 AWS AWS STS 用于签署 [GetWebIdentityToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html) API 生成的 JSON Web 令牌（JWT）的加密算法。在策略中使用此条件键时，请指定 ES384（带有 P-384 曲线和 SHA-384 的 ECDSA）或 RS256（带有 SHA-256 的 RSA）。  
**可用性**：此键存在于 GetWebIdentityToken API 的请求中，该 API 用于获取通过外部服务进行身份验证的 JSON Web 令牌（JWT）。  
您可以使用此条件键强制要求 IAM 主体使用与您的安全要求或与您集成的外部服务兼容的签名算法来请求令牌。ES384 提供最佳安全性和性能，而 RS256 则提供与不支持 ECDSA 的系统更广泛的兼容性。  
以下示例策略要求主体使用 ES384 签名算法：  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:GetWebIdentityToken",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "sts:SigningAlgorithm": "ES384"
                }
            }
        }
    ]
}
```

**sts:ExternalId**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
使用此键可要求主体在代入 IAM 角色时提供特定标识符。  
**可用性** - 如果主体在使用 AWS CLI 或 AWS API 代入角色时提供外部 ID，则请求中存在此键。  
在其他账户中担任角色时可能需要的唯一标识符。如果角色所属的账户的管理员为您提供了外部 ID，请在 `ExternalId` 参数中提供该值。该值可以是任意字符串，如密码或账号。外部 ID 的主要功能是解决并防止混淆代理人问题。有关外部 ID 和混淆代理人问题的更多信息，请参阅[访问第三方拥有的 AWS 账户](id_roles_common-scenarios_third-party.md)。  
`ExternalId` 值的长度必须最少为 2 个字符，最多为 1224 个字符。该值必须是字母数字，没有空格。它还可以包含以下符号：加号 (\$1)、等号 (=)、逗号 (,)、句点 (.)、@ 符号、冒号 (:)、正斜杠 (/) 和连字符 (-)。

**sts:RequestContext/*context-key***  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
使用该键可将在请求中传递的可信令牌颁发者签名上下文断言中嵌入的会话上下文键值对与角色信任策略中指定的上下文键值进行比较。  
**可用性** – 如果在使用 AWS STS [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) API 操作代入了角色，则在 `ProvidedContexts` 请求参数中提供上下文断言时，该请求中存在该键。  
此上下文键的格式为 `"sts:RequestContext/context-key":"context-value"`，其中 `context-key` 和 `context-value` 是上下文键值对。在请求中传递的已签名上下文断言中嵌入多个上下文键时，每个键值对都有一个上下文键。您必须在角色信任策略中授予 `sts:SetContext` 操作的权限，才能允许主体在生成的会话令牌中设置上下文键。要详细了解可与此键一起使用的支持的 IAM Identity Center 上下文键，请参阅*AWS IAM Identity Center用户指南*中的 [IAM Identity Center 的 AWS STS 条件键](https://docs.aws.amazon.com/singlesignon/latest/userguide/condition-context-keys-sts-idc.html)。  
您可以在角色信任策略中使用该键，以在用户代入角色时根据用户或其属性实施精细的访问控制。代入该角色后，活动将在 AWS CloudTrail 日志的 `AdditionalEventData` 属性中显示，其中包含由上下文提供程序在代入角色请求中设置的会话上下文键值对。这样，当不同的主体使用角色时，管理员可以更轻松地区分角色会话。键值对由指定的上下文提供程序设置，而不是由 AWS CloudTrail 或 AWS STS 设置。这使上下文提供程序可以控制 CloudTrail 日志和会话信息中包含哪些上下文。

**sts:RequestContextProviders**  
与 [ARN 运算符](reference_policies_elements_condition_operators.md#Conditions_ARN)结合使用。  
使用该键可将请求中的上下文提供程序 ARN 与角色信任策略中指定的上下文提供程序 ARN 进行比较。  
**可用性** – 如果在使用 AWS STS [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) API 操作代入了角色，则在 `ProvidedContexts` 请求参数中提供上下文断言时，该请求中存在该键。  
以下示例条件检查请求中传递的上下文提供程序 ARN 是否与角色信任策略条件中指定的 ARN 匹配。我们建议您使用 `ForAllValues` 添加一个空检查，以防止缺少上下文键或具有空值的上下文键的计算结果为 true。有关更多信息，请参阅 [用于检查条件键是否存在的条件运算符](reference_policies_elements_condition_operators.md#Conditions_Null)。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Action": "sts:SetContext",
    "Effect": "Allow",
    "Resource": "*",
    "Condition": {
      "ForAllValues:ArnEquals": {
        "sts:RequestContextProviders": [
          "arn:aws:iam::aws:contextProvider/IdentityCenter"
        ]
      },
      "Null": {
        "sts:RequestContextProviders": "false"
      }
    }
  }
}
```

**sts:RoleSessionName**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
使用此键可将主体在代入角色时指定的会话名称与策略中指定的值进行比较。  
**可用性** - 当主体使用 AWS 管理控制台 管理控制台、assume-role CLI 命令或 AWS STS `AssumeRole` API 操作代入角色时，则请求中存在此键。  
您可以在角色信任策略中使用此键，以要求您的用户在代入角色时提供特定的会话名称。例如，您可以要求 IAM 用户指定自己的用户名作为其会话名称。在 IAM 用户代入角色后，活动将与匹配用户名的会话名称一起显示在 [AWS CloudTrail 日志](cloudtrail-integration.md#cloudtrail-integration_signin-tempcreds)中。这样，当不同的主体使用角色时，管理员可以更轻松地区分角色会话。  
以下角色信任策略要求账户 `111122223333` 中的 IAM 用户在代入角色时提供其 IAM 用户名作为会话名称。使用条件键中的 `aws:username` [条件变量](reference_policies_variables.md)来强制执行此要求。此策略允许 IAM 用户代入策略附加到的角色。此策略禁止任何使用临时凭证的人员代入角色，因为 `username` 变量仅适用于 IAM 用户。  
您可以使用任何可用的单值条件密钥作为[变量](reference_policies_variables.md)。您不能使用多值条件键作为变量。  
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "RoleTrustPolicyRequireUsernameForSessionName",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Principal": {"AWS": "arn:aws:iam::111122223333:root"},
            "Condition": {
                "StringLike": {"sts:RoleSessionName": "prefix-${aws:username}"}
            }
        }
    ]
}
```
当管理员查看操作的 AWS CloudTrail 日志时，他们可以将会话名称与其账户中的用户名进行比较。在以下示例中，名为 `matjac` 的用户使用名为 `MateoRole` 的角色执行操作。之后，管理员会联系具有名为 `matjac` 用户的 Mateo Jackson。  

```
    "assumedRoleUser": {
        "assumedRoleId": "AROACQRSTUVWRAOEXAMPLE:matjac",
        "arn": "arn:aws:sts::111122223333:assumed-role/MateoRole/matjac"
    }
```
如果您允许[使用角色进行跨账户访问](id_roles_common-scenarios_aws-accounts.md)，则一个账户中的用户可以代入另一个账户中的角色。CloudTrail 中列出的代入角色的 ARN 包括*角色所在*的账户。它不包括已代入角色的用户的账户。用户仅在账户中是唯一的。因此，我们建议您使用此方法以仅在 CloudTrail 日志中查看您管理的账户中的用户所代入的角色。您的用户可以在多个账户中使用相同的用户名。

**sts:SourceIdentity**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
使用此键可将主体在代入角色时指定的源身份与策略中指定的值进行比较。  
**可用性** — 如果主体提供源身份，同时担任使用任何 AWS STS 担任角色 CLI 命令或 AWS STS `AssumeRole` API 操作时，此密钥将会出现在请求中。  
您可以在角色信任策略中使用此键，以要求您的用户在代入角色时设置特定的源身份。例如，您可以要求您的工作人员或联合身份为源身份指定值。您可以将身份提供程序 (IdP) 配置为使用与用户关联的属性之一（例如用户名或电子邮件）作为源身份。然后，IdP 会将源身份作为其发送的断言或声明中的一个属性传递给 AWS。源身份属性的值标识担任角色的用户或应用程序。  
在用户担任角色后，活动将在使用已设置源身份值的 [AWS CloudTrail 日志](cloudtrail-integration.md#cloudtrail-integration_signin-tempcreds)中出现。这使管理员能够更轻松地确定什么角色在 AWS 中执行了操作。您必须授予 `sts:SetSourceIdentity` 操作相应权限以允许身份设置源身份。  
与 [`sts:RoleSessionName`](#ck_rolesessionname) 不同，在设置源身份后，无法更改该值。它将存在于源身份对角色执行的所有操作的请求上下文中。当您使用会话凭证担任另一个角色时，该值将保留到后续角色会话中。从一个角色代入另一个角色的过程称为[角色链](id_roles.md#iam-term-role-chaining)。  
您可以使用 [`aws:SourceIdentity`](reference_policies_condition-keys.md#condition-keys-sourceidentity) 全局条件键根据后续请求中源身份的值进一步控制对 AWS 资源的访问权限。  
以下角色信任策略允许 IAM 用户 `AdminUser` 在账户中担任角色 `111122223333`。它还会向 `AdminUser` 授予权限来设置源身份，只要源身份设置为 `DiegoRamirez` 即可。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowAdminUserAssumeRole",
            "Effect": "Allow",
            "Principal": {"AWS": " arn:aws:iam::111122223333:user/AdminUser"},
            "Action": [
                "sts:AssumeRole",
                "sts:SetSourceIdentity"
            ],
            "Condition": {
                "StringEquals": {"sts:SourceIdentity": "DiegoRamirez"}
            }
        }
    ]
}
```
要了解有关使用源身份信息的更多信息，请参阅 [监控和控制使用所担任角色执行的操作](id_credentials_temp_control-access_monitor.md)。

**sts:TaskPolicyArn**  
与 [ARN 运算符](reference_policies_elements_condition_operators.md#Conditions_ARN)结合使用。  
使用该键可将 [sts:AssumeRoot](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoot.html) 请求中的策略 ARN 与在策略中指定的策略 ARN 进行比较。  
**可用性**：当您使用 [sts:AssumeRoot](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoot.html) 发出请求时，此键会出现在请求中。  
管理员可以在 IAM 策略中使用此条件键，限制管理账户或委托管理员账户中的特定角色或用户使用根凭证执行某些操作。有关更多信息，请参阅 [在 AWS Organizations 成员账户上执行特权任务](id_root-user-privileged-task.md)。

**sts:TransitiveTagKeys**  
与[字符串运算符](reference_policies_elements_condition_operators.md#Conditions_String)结合使用。  
使用此键将请求中的可传递会话标签键，与在策略中指定的键进行比较。  
**Availability**（可用性）- 使用临时安全凭证发出请求时，请求中存在此密钥。这些凭证包括使用任何 assume-role 操作或 `GetFederationToken` 操作创建的凭证。  
当您使用临时安全凭证发出请求时，[请求上下文](reference_policies_elements_condition.md#AccessPolicyLanguage_RequestContext)包含 `aws:PrincipalTag` 上下文密钥。此键包括[会话标签](id_session-tags.md)、[可传递会话标签](id_session-tags.md#id_session-tags_role-chaining)和角色标签的列表。可传递会话标签是当您使用会话凭证代入另一个角色时，持续传递到所有后续会话中的标记。从一个角色代入另一个角色的过程称为[角色链](id_roles.md#iam-term-role-chaining)。  
您可以在策略中使用此条件键，以便要求在代入角色或联合身份用户身份时，要求将特定会话标签设置为可传递标签。

# AWS 服务的操作、资源和条件键
<a name="reference_policies_actions-resources-contextkeys"></a>

每个AWS服务可以定义操作、资源和条件上下文密钥以在 IAM policy 中使用。有关 AWS 服务及其操作、资源和条件上下文密钥的列表，请参阅*服务授权参考*中的[操作、资源和条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html)。