AWS 全局条件上下文键 - AWS Identity and Access Management
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS 全局条件上下文键

委托人向 AWS 发出请求时,AWS 会将请求信息收集到请求上下文中。您可以使用 JSON 策略的 Condition 元素将请求上下文中的键与您在策略中指定的键值进行比较。要了解有关在请求上下文中包含全局键的情况的更多信息,请参阅每个全局条件键的可用性信息。有关如何在 JSON 策略中使用 Condition 元素的信息,请参阅IAM JSON 策略元素: Condition

注意

如果您使用只在某些情况下可用的条件键,则可使用 IfExists 版本的条件运算符。如果请求上下文中缺少条件键,则策略将无法通过评估。例如,将以下条件块与 ...IfExists 运算符结合使用以在请求来自特定 IP 范围或特定 VPC 时进行匹配。如果请求上下文中未包含这两个键或其中之一,则条件仍将返回 true。仅当请求上下文中包含指定的键时,才检查值。

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

全局条件键是带有 aws: 前缀的条件键。AWS 服务既可支持全局条件键,也可提供包含服务前缀的服务特定键。例如,IAM 条件键包含 iam: 前缀。有关更多信息,请参阅AWS 服务的操作、资源和条件键并选择要查看其键的服务。

aws:CalledVia

字符串运算符结合使用。

使用此键可以将策略中的服务与代表 IAM 委托人(用户或角色)发出请求的服务进行比较。当委托人向 AWS 服务发出请求时,该服务可能会使用委托人的凭证向其他服务发出后续请求。aws:CalledVia 键包含链中代表委托人发出请求的每个服务的有序列表。

例如,您可以使用 AWS CloudFormation 从 Amazon DynamoDB 表中读取和写入。DynamoDB 然后使用 AWS Key Management Service (AWS KMS) 提供的加密。

  • 可用性 – 当支持 aws:CalledVia 的服务使用 IAM 委托人的凭证向其他服务发出请求时,此键会出现在请求中。如果服务使用服务角色服务相关角色代表委托人进行调用,则此键不存在。当委托人直接进行调用时,此键也不存在。

要在策略中使用 aws:CalledVia 条件键,您必须提供服务委托人以允许或拒绝 AWS 服务请求。AWS 支持将以下服务用于 aws:CalledVia

CalledVia 服务
AWS 服务 服务委托人
Amazon Athena athena.amazonaws.com.cn
AWS CloudFormation cloudformation.amazonaws.com.cn
Amazon DynamoDB dynamodb.amazonaws.com.cn
AWS Key Management Service (AWS KMS) kms.amazonaws.com.cn

要在任何 服务使用委托人的凭证发出请求时允许或拒绝访问,请使用 aws:ViaAWSService 条件键。该条件键支持所有 AWS 服务。

aws:CalledVia 键是多值键。但是,您不能在条件下强制使用此键进行排序。使用上面的示例,User 1 (用户 1) 向 AWS CloudFormation 发出请求,然后依次调用 DynamoDB 和调用 AWS KMS。这是三个单独的请求。对 AWS KMS 的最终调用是由用户 1 通过 AWS CloudFormation,然后通过 DynamoDB 进行的。


        使用 aws:CalledVia 的示例

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

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

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

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

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

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


        使用 aws:CalledViaFirst 和 aws:CalledViaLast 的示例

aws:CalledViaFirst

字符串运算符结合使用。

使用此键可以将策略中的服务与代表 IAM 委托人(用户或角色)发出请求的第一个服务 进行比较。有关更多信息,请参阅 aws:CalledVia

  • 可用性 – 当服务使用 IAM 委托人的凭证向其他服务发出至少一个其他请求时,此键会出现在请求中。如果服务使用服务角色服务相关角色代表委托人进行调用,则此键不存在。当委托人直接进行调用时,此键也不存在。

aws:CalledViaLast

字符串运算符结合使用。

使用此键可以将策略中的服务与代表 IAM 委托人(用户或角色)发出请求的最后一个服务 进行比较。有关更多信息,请参阅 aws:CalledVia

  • 可用性 – 当服务使用 IAM 委托人的凭证向其他服务发出至少一个其他请求时,此键会出现在请求中。如果服务使用服务角色服务相关角色代表委托人进行调用,则此键不存在。当委托人直接进行调用时,此键也不存在。

aws:CurrentTime

日期运算符结合使用。

使用此键可将请求的日期和时间与您在策略中指定的日期和时间进行比较。要查看使用此条件键的示例策略,请参阅AWS:允许在特定日期内访问

  • 可用性 – 此键始终包含在请求上下文中。

aws:EpochTime

日期运算符数字运算符结合使用。

使用此键可将请求的日期和时间(以纪元或 Unix 时间表示)与您在策略中指定的值进行比较。此键还接受自 1970 年 1 月 1 日以来的秒数。

  • 可用性 – 此键始终包含在请求上下文中。

aws:MultiFactorAuthAge

数字运算符结合使用。

使用此键可将自使用 MFA 向请求委托人授权以来的秒数与您在策略中指定的数量进行比较。有关 MFA 的更多信息,请参阅 在 AWS 中使用 Multi-Factor Authentication (MFA)

  • 可用性 – 仅在使用 MFA 对进行调用的委托人进行身份验证后,才将此键包含在请求上下文中。如果未使用 MFA,则此键不存在。

aws:MultiFactorAuthPresent

布尔值运算符结合使用。

使用此键可检查是否已使用多重验证 (MFA) 来验证发出请求的临时安全凭证。

  • 可用性 – 仅在委托人使用临时凭证发出请求时,才将此键包含在请求上下文中。此键在 AWS CLI、AWS API 或使用长期凭证发出的 AWS 开发工具包请求中不存在。

临时凭证用于对 IAM 角色、联合身份用户、具有 sts:GetSessionToken 中的临时令牌的 IAM 用户和 AWS 管理控制台的用户进行身份验证。IAM 用户访问密钥是长期凭证,但在某些情况下,AWS 会代表 IAM 用户创建临时凭证来执行操作。在这些情况下,aws:MultiFactorAuthPresent 密钥存在于请求中,并设置为值 false。有两种常见情况可能会发生这种情形:

  • AWS 管理控制台中的 IAM 用户在不知情的情况下使用了临时凭证。用户使用其作为长期凭证的用户名和密码登录控制台。但在后台,控制台代表用户生成临时凭证。

  • 如果 IAM 用户对某个 AWS 服务进行调用,则该服务将重新使用该用户的凭证向其他服务发出另一个请求。例如,当调用 Athena 以访问 Amazon S3 存储桶或使用 AWS CloudFormation 创建 Amazon EC2 实例时。对于后续请求,AWS 使用临时凭证。

要了解哪些服务支持使用临时凭证,请参阅使用 IAM 的 AWS 服务

在使用长期凭证(例如,用户访问密钥对)调用 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 运算符检查是否使用 MFA 对请求进行身份验证。

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

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

替代组合

您还可以使用 BoolIfExists 运算符以允许通过 MFA 进行身份验证的请求以及使用长期凭证发出的 AWS CLI 或 AWS API 请求。

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

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

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

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

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

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

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

##### WARNING: USE WITH CAUTION ##### "Effect" : "Allow", "Condition" : { "Null" : { "aws:MultiFactorAuthPresent" : "false" } }

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

aws:PrincipalAccount

字符串运算符结合使用。

使用此键可将请求委托人所属的账户与您在策略中指定的账户标识符进行比较。

  • 可用性 – 此键始终包含在请求上下文中。

aws:PrincipalArn

使用 ARN 运算符字符串运算符

使用此键可将发出请求的委托人的 Amazon 资源名称 (ARN) 与您在策略中指定的 ARN 进行比较。对于 IAM 角色,请求上下文将返回角色的 ARN,而不是已代入角色的用户的 ARN。要了解可在此条件键中指定哪些类型的委托人,请参阅指定委托人

  • 可用性 – 此键始终包含在请求上下文中。

aws:PrincipalOrgID

字符串运算符结合使用。

使用此键可将请求委托人所属的 AWS Organizations 中组织的标识符与策略中指定的标识符进行比较。

  • 可用性 – 仅在委托人是组织成员时,才将此键包含在请求上下文中。

此全局键提供了列出组织中的所有 AWS 账户的所有账户 ID 的替代方法。您可以使用此条件键来简化在基于资源的策略中指定 Principal 元素的过程。您可以在条件元素中指定组织 ID。当您添加和删除账户时,包含 aws:PrincipalOrgID 键的策略将自动包括正确的账户,并且不需要手动更新。

例如,以下 Amazon S3 存储桶策略允许 o-xxxxxxxxxxx 组织中的任何账户成员将对象添加到 policy-ninja-dev 存储桶中。

{ "Version": "2012-10-17", "Statement": { "Sid": "AllowPutObject", "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::policy-ninja-dev/*", "Condition": {"StringEquals": {"aws:PrincipalOrgID":["o-xxxxxxxxxxx"]} } } }
注意

此全局条件也适用于 AWS 组织的主账户。

有关 AWS Organizations 的更多信息,请参阅 AWS Organizations 用户指南 中的什么是 AWS Organizations?

aws:PrincipalOrgPaths

字符串运算符结合使用。

使用此键可将发出请求的委托人的 AWS Organizations 路径与策略中的路径进行比较。该委托人可以是 IAM 用户、IAM 角色、联合身份用户或 AWS 账户根用户。在策略中,此条件键可确保请求者是 AWS Organizations 中指定组织根或组织单位 (OU) 的账户成员。AWS Organizations 路径是 组织 实体结构的文本表示形式。有关使用和了解路径的更多信息,请参阅了解 AWS Organizations 实体路径

  • 可用性 – 仅在委托人是组织成员时,才将此键包含在请求上下文中。

注意

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

例如,以下条件返回账户中委托人的 true,该委托人直接附加到 ou-jkl0-awsddddd OU 但不在其子 OU 中。

"Condition" : { "ForAnyValue:StringEquals" : { "aws:PrincipalOrgPaths":["o-a1b2c3d4e5/r-f6g7h8i9j0example/ou-ghi0-awsccccc/ou-jkl0-awsddddd/"] }}

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

"Condition" : { "ForAnyValue:StringLike" : { "aws:PrincipalOrgPaths":["o-a1b2c3d4e5/r-f6g7h8i9j0example/ou-ghi0-awsccccc/ou-jkl0-awsddddd*"] }}

以下条件为账户中的委托人返回 true,该委托人直接附加到 OU 或其任何子 OU。

"Condition" : { "ForAnyValue:StringLike" : { "aws:PrincipalOrgPaths":["o-a1b2c3d4e5/r-f6g7h8i9j0example/ou-ghi0-awsccccc/ou-jkl0-awsddddd/*"] }}

以下条件允许访问 o-a1b2c3d4e5 组织中的各个委托人,而无论其父 OU 如何。

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

aws:PrincipalOrgPaths 是一个多值条件键。多值键包含一个值或列表格式的多个值。结果是逻辑 OR。在您为 ForAnyValue 条件运算符使用多个值时,委托人的路径必须与策略中列出的其中一个路径匹配。对于包含单个键的多个值的策略,必须将条件括在方括号内,例如数组 ("Key":["Value1", "Value2"])。在单值情况下您也应包含这些括号。有关多值条件键的更多信息,请参阅创建具有多个键或值的条件

"Condition": { "ForAnyValue:StringLike": { "aws:PrincipalOrgPaths": [ "o-a1b2c3d4e5/r-f6g7h8i9j0example/ou-def0-awsbbbbb/*", "o-a1b2c3d4e5/r-f6g7h8i9j0example/ou-jkl0-awsddddd/*" ] } }

aws:PrincipalTag

字符串运算符结合使用。

使用此键可将附加到发出请求的委托人的标签与您在策略中指定的标签进行比较。如果已为委托人附加多个标签,则请求上下文会为每个附加的标签键包含一个 aws:PrincipalTag 键。

  • 可用性 – 仅在委托人使用具有附加标签的 IAM 用户时,才将此键包含在请求上下文中。对于委托人,如果使用附加了标签或会话标签的 IAM 角色,则应包括它。

您可采用键/值对的形式向用户或角色添加自定义属性。有关 IAM 标签的更多信息,请参阅标记 IAM 用户和角色。您可以将 aws:PrincipalTag 用于针对 AWS 委托人的访问控制

此示例显示您可以如何创建策略 允许具有 tagManager=true 标签的用户管理 IAM 用户、组或角色。要使用此策略,请将示例策略中的斜体占位符文本替换为您自己的信息。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:*", "Resource": "*", "Condition": {"StringEquals": {"aws:PrincipalTag/tagManager": "true"}} } ] }

aws:PrincipalType

字符串运算符结合使用。

使用此键可将发出请求的委托人的类型与您在策略中指定的委托人类型进行比较。有关信息如何显示在不同委托人的请求上下文中的详细信息,请参阅指定委托人

  • 可用性 – 此键始终包含在请求上下文中。

aws:Referer

字符串运算符结合使用。

使用此键可将在客户端浏览器中引用请求的站点与您在策略中指定的引用站点进行比较。aws:referer 请求上下文值是由调用方在 HTTP 标头中提供的。

  • 可用性 – 仅在浏览器中使用 URL 调用请求后,才将此键包含在请求上下文中。

例如,您可以使用 Web 浏览器直接调用 Amazon S3 API 操作。这意味着,您可以通过 Web 浏览器直接查看 S3 对象,例如图像和文档。aws:referer 条件允许您根据引用站点标头的值来限制对 HTTP 或 HTTPS 请求中的特定值的访问。

警告

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

aws:RequestedRegion

字符串运算符结合使用。

使用此键可将已在请求中调用的 AWS 区域与您在策略中指定的区域进行比较。您可以使用此全局条件键来控制可请求的区域。要查看每个服务的 AWS 区域,请参阅 Amazon Web Services 一般参考 中的服务终端节点和配额

  • 可用性 – 此键始终包含在请求上下文中。

一些全球服务(如 IAM)具有单个终端节点。由于该终端节点实际位于 美国东部(弗吉尼亚北部) 区域中,因此,始终对 us-east-1 区域进行 IAM 调用。例如,如果您创建一个策略以在请求的区域不是 us-west-2 时拒绝访问所有服务,则 IAM 调用将始终失败。要查看如何解决此问题的示例,请参阅 NotAction 与 Deny

注意

使用 aws:RequestedRegion 条件键可以控制服务的哪个终端节点被调用,但不控制该操作产生的影响。一些服务具有跨区域影响。例如,Amazon S3 具有控制跨区域复制的 API 操作。您可以在一个区域中调用 s3:PutBucketReplication(受 aws:RequestedRegion 条件键的影响),但其他区域将会受到影响,具体取决于复制配置设置。

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

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

字符串运算符结合使用。

使用此键可将请求中传递的标签键/值对与您在策略中指定的标签对进行比较。例如,您可以检查请求是否包含标签键 "Dept" 并具有 "Accounting" 值。有关更多信息,请参阅 在 AWS 请求期间控制访问

  • 可用性y – 仅在请求中传递标签时,才将此键包含在请求上下文中。在请求中传递多个标签时,每个标签键/值对均有一个上下文键。

该上下文键的格式为 "aws:RequestTag/tag-key":"tag-value",其中 tag-keytag-value 是标签键值对。

由于可在一个请求中包含多个标签键/值对,因此,请求内容可以是多值请求。在此情况下,您应考虑使用 ForAllValuesForAnyValue 集合运算符。有关更多信息,请参阅 使用多个键和值

aws:ResourceTag/tag-key

字符串运算符结合使用。

使用此键可将您在策略中指定的标签键/值对与附加到资源的键/值对进行比较。例如,您可能会要求只有在资源具有附加的标签键 "Dept" 和值 "Marketing" 时才允许访问该资源。有关更多信息,请参阅 控制对 AWS 资源的访问

  • 可用性y – 仅在请求的资源已附加标签时,才将此键包含在请求上下文中。只有支持基于标签的授权的资源返回此键。每个标签键/值对均有一个上下文键。

该上下文键的格式为 "aws:ResourceTag/tag-key":"tag-value",其中 tag-keytag-value 是标签键值对。

aws:SecureTransport

布尔值运算符结合使用。

使用此键可检查是否已使用 SSL 发送请求。请求上下文将返回 truefalse。在策略中,只能在使用 SSL 发送请求时允许特定操作。

  • 可用性 – 此键始终包含在请求上下文中。

aws:SourceAccount

字符串运算符结合使用。

使用此键可将发出服务到服务请求的资源的账户 ID 与您在策略中指定的账户 ID 进行比较。

  • 可用性 – 仅在访问资源触发一项 AWS 服务以代表资源拥有者调用另一项服务时,将此键包含在请求上下文中。发出调用的服务必须将源的资源 ARN 传递给被调用的服务。此 ARN 包括源账户 ID。

您可以使用此条件键来检查 Amazon S3 未被用作混淆代理人。例如,当 Amazon S3 存储桶更新触发 Amazon SNS 主题发布时,Amazon S3 服务将调用 sns:Publish API 操作。该存储桶被视为 SNS 请求的源,并且键的值是来自存储桶的 ARN 的账户 ID。

aws:SourceArn

使用 ARN 运算符字符串运算符

使用此键可将发出服务到服务请求的资源的 Amazon 资源名称 (ARN) 与您在策略中指定的 ARN 进行比较。

此键不适用于发出请求的委托人的 ARN。请改用 aws:PrincipalArn。源的 ARN 包含账户 ID,因此不必将 aws:SourceAccountaws:SourceArn 结合使用。

  • 可用性 – 仅在访问资源触发一项 AWS 服务以代表资源拥有者调用另一项服务时,将此键包含在请求上下文中。调用服务必须将原始资源的 ARN 传递给被调用的服务。

您可以使用此条件键来检查 Amazon S3 未被用作混淆代理人。例如,当 Amazon S3 存储桶更新触发 Amazon SNS 主题帖子时,Amazon S3 服务将调用 sns:Publish API 操作。该存储桶被视为 SNS 请求的源,并且键的值是存储桶的 ARN。

aws:SourceIp

IP 地址运算符结合使用。

使用此键可将请求者的 IP 地址与您在策略中指定的 IP 地址进行比较。

  • 可用性 – 此键将包含在请求上下文中,但请求者使用 VPC 终端节点发出请求时除外。

可在策略中使用 aws:SourceIp 条件键以仅允许委托人从指定的 IP 范围发出请求。但是,如果 AWS 服务代表委托人进行调用,则此策略拒绝访问。在这种情况下,您可以将 aws:SourceIpaws:ViaAWSService 键结合使用,以确保源 IP 限制仅适用于委托人直接发出的请求。

例如,您可以将以下策略附加到一个 IAM 用户。如果用户从指定的 IP 地址进行调用,则此策略允许用户将对象直接放入 my-service-bucket Amazon S3 存储桶中。但是,如果用户发出另一个请求而导致服务调用 Amazon S3,则 IP 地址限制不适用。只有当请求不是由服务发出时,PrincipalPutObjectIfIpAddress 语句才会限制 IP 地址。如果请求是由服务发出的,则 ServicePutObject 语句允许执行此操作而没有 IP 地址限制。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "PrincipalPutObjectIfIpAddress", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-service-bucket/*", "Condition": { "Bool": {"aws:ViaAWSService": "false"}, "IpAddress": {"aws:SourceIp": "123.45.167.89"} } }, { "Sid": "ServicePutObject", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-service-bucket/*", "Condition": { "Bool": {"aws:ViaAWSService": "true"} } } ] }

如果请求来自使用 Amazon VPC 终端节点的主机,则 aws:SourceIp 密钥不可用。您应改用特定于 VPC 的键,例如 aws:VpcSourceIp。有关使用 VPC 终端节点的更多信息,请参阅 Amazon VPC 用户指南 中的 VPC 终端节点 - 控制终端节点的使用

aws:SourceVpc

字符串运算符结合使用。

使用此键可检查请求是否来自您在策略中指定的 VPC。在策略中,您可以使用此键以仅允许访问特定的 VPC。有关更多信息,请参阅 Amazon Simple Storage Service 开发人员指南 中的限制对特定 VPC 的访问

  • 可用性 – 仅在请求者使用 VPC 终端节点发出请求时,才将此键包含在请求上下文中。

aws:SourceVpce

字符串运算符结合使用。

使用此键可将请求的 VPC 终端节点标识符与您在策略中指定的终端节点 ID 进行比较。在策略中,您可以使用此键来限制对特定 VPC 的访问。有关更多信息,请参阅 Amazon Simple Storage Service 开发人员指南 中的限制对特定 VPC 终端节点的访问

  • 可用性 – 仅在请求者使用 VPC 终端节点发出请求时,才将此键包含在请求上下文中。

aws:TagKeys

字符串运算符结合使用。

使用此键可将请求中的标签键与您在策略中指定的键进行比较。作为使用策略来通过标签控制访问的最佳实践,请使用 aws:TagKeys 条件键来定义允许的标签键。有关示例策略和更多信息,请参阅根据标签键控制访问

  • 可用性 – 仅在操作支持将标签附加到资源时,才将此键包含在请求上下文中。

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

由于可在一个请求中包含多个标签键/值对,因此,请求内容可以是多值请求。在此情况下,您应考虑使用 ForAllValuesForAnyValue 集合运算符。有关更多信息,请参阅 使用多个键和值

某些服务支持同时使用标记和资源操作,例如创建、修改或删除资源。要允许在单次调用中同时使用标记和操作,您必须创建同时包含标记操作和资源修改操作的策略。然后,您可以使用 aws:TagKeys 条件键强制在请求中使用特定标签键。例如,要在某人创建 Amazon EC2 快照时限制标签,您必须在策略中包含 ec2:CreateSnapshot 创建操作ec2:CreateTags 标记操作。要查看此场景的使用 aws:TagKeys 的策略,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的使用标签创建快照

aws:TokenIssueTime

日期运算符结合使用。

使用此键可将临时安全凭证的颁发日期和时间与您在策略中指定的日期和时间进行比较。

  • 可用性 – 仅在委托人使用临时凭证发出请求时,才将此键包含在请求上下文中。使用访问密钥发出的 AWS CLI、AWS API 或 AWS 开发工具包请求中未提供此键。

要了解哪些服务支持使用临时凭证,请参阅使用 IAM 的 AWS 服务

aws:UserAgent

字符串运算符结合使用。

使用此键可将请求者的客户端应用程序与您在策略中指定的应用程序进行比较。

  • 可用性 – 此键始终包含在请求上下文中。

警告

应谨慎使用此键。由于 aws:UserAgent 值由发起人在 HTTP 标头中提供,因此未经授权方可以修改或自定义浏览器以提供他们选择的任何 aws:UserAgent 值。因此,aws:UserAgent 不应用于阻止未经授权方直接发出 AWS 请求。您可以使用它来仅允许特定客户端应用程序,并且仅在对策略进行测试之后。

aws:userid

字符串运算符结合使用。

使用此键可将请求者的委托人标识符与您在策略中指定的 ID 进行比较。对于 IAM 用户,请求上下文值是用户 ID。对于 IAM 角色,此值的格式可能有所不同。有关如何为不同的委托人显示信息的详细信息,请参阅指定委托人

  • 可用性 – 此键包含在所有签名请求的请求上下文中。匿名请求不包括此键。

aws:username

字符串运算符结合使用。

使用此键可将请求者的用户名与您在策略中指定的用户名进行比较。有关如何为不同的委托人显示信息的详细信息,请参阅指定委托人

  • 可用性 – 此键始终包含在 IAM 用户的请求上下文中。匿名请求或使用 AWS 账户根用户 或 IAM 角色发出的请求不包含此键。

aws:ViaAWSService

布尔值运算符结合使用。

使用此键检查 AWS 服务是否代表您向其他服务发出请求。

当服务使用 IAM 委托人的凭证代表委托人发出请求时,请求上下文键返回 true。如果服务使用服务角色服务相关角色代表委托人进行调用,则上下文键返回 false。当委托人直接进行调用时,请求上下文键也会返回 false

  • 可用性 – 对于大多数服务,此键始终包含在请求上下文中。

以下服务目前不支持 aws:ViaAWSService

  • Amazon EC2

  • AWS Glue

  • AWS Lake Formation

  • AWS OpsWorks

您可以根据请求是否由服务发出,使用此条件键允许或拒绝访问。有关示例策略,请参阅AWS:基于源 IP 拒绝对 AWS 的访问

aws:VpcSourceIp

IP 地址运算符结合使用。

使用此键可将从中发出请求的 IP 地址与您在策略中指定的 IP 地址进行比较。在策略中,键仅在请求来自指定的 IP 地址并经过 VPC 终端节点时进行匹配。

  • 可用性 – 仅在使用 VPC 终端节点发出请求时,才将此键包含在请求上下文中。

有关更多信息,请参阅 Amazon VPC 用户指南 中的使用 VPC 终端节点控制对服务的访问