AWS 全局条件上下文密钥 - AWS Identity and Access Management

AWS 全局条件上下文密钥

主体向 AWS 发出请求时,AWS 会将请求信息收集到请求上下文中。您可以使用 JSON 策略的 Condition 元素将请求上下文中的键与您在策略中指定的键值进行比较。请求信息由不同的来源提供,包括发出请求的主体、请求所针对的资源以及有关请求本身的元数据。

全局条件键可在所有 AWS 服务中使用。虽然这些条件键可以在所有策略中使用,但该键并非在每个请求上下文中都可用。例如,只有当 AWS 服务主体直接调用您的资源时,aws:SourceAccount 条件键才可用。要了解有关在请求上下文中包含全局键的情况的更多信息,请参阅每个键的可用性信息。

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

服务特定条件键是为与单独的 AWS 服务一起使用而定义的。例如,Amazon S3 允许您使用 s3:VersionId 条件键编写策略,以限制对特定版本 Amazon S3 对象的访问。此条件键是该服务所独有的,这意味着其仅适用于对 Amazon S3 服务的请求。对于服务特定的条件键,请参阅 AWS 服务的操作、资源和条件键,然后选择要查看其键的服务。

注意

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

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

要将条件与具有多个键值的请求上下文进行比较,必须使用 ForAllValues 或者 ForAnyValue 集合运算符。仅将集合运算符用于多值条件键。不要将集合运算符用于单值条件键。有关更多信息,请参阅 多值上下文键

敏感条件键

以下条件键被视为敏感键,因为它们的值是由机器生成的。在这些条件键中使用通配符没有任何有效的使用场景,即使键值的子字符串带有通配符也是如此。这是因为通配符可以将条件键与任何值匹配,这可能会带来安全风险。

主体的属性

使用以下条件键可将有关发出请求的主体的详细信息与您在策略中指定的主体属性进行比较。有关可以发出请求的主体的列表,请参阅 如何指定主体

aws:PrincipalArn

使用此键可将发出请求的主体的 Amazon Resource Name (ARN) 与您在策略中指定的 ARN 进行比较。对于 IAM 角色,请求上下文将返回角色的 ARN,而不是已代入角色的用户的 ARN。

  • Availability(可用性)- 此键包含在所有签名请求的请求上下文中。匿名请求不包括此键。您可以在此条件键中指定以下类型的主体:

    • IAM 角色

    • IAM 用户

    • AWS STS 联合用户会话

    • AWS 账户 根用户

  • 数据类型 – ARN、字符串

    AWS 建议在比较 ARN 时使用 ARN 运算符而不是字符串运算符

  • 值类型 — 单值

  • 示例值下表显示了您可以在 aws:PrincipalArn 条件键中指定的为不同类型的主体返回的请求上下文值:

    • IAM 角色 – 请求上下文包含条件键 aws:PrincipalArn 的以下值。请勿将所担任角色会话 ARN 指定为此条件键的值。有关所担任角色会话主体的更多信息,请参阅 角色会话主体

      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 账户 主体

      arn:aws:iam::123456789012:root

您可以将根用户 ARN 指定为 AWS Organizations 服务控制策略(SCP)条件键 aws:PrincipalArn 的值。SCP 是一种组织策略,用于管理组织中的权限,仅影响组织中的成员账户。SCP 会限制成员账户中的 IAM 用户和角色的权限,包括成员账户的根用户。有关 SCP 对权限影响的更多信息,请参阅《Organizations 用户指南》中的 SCP 对权限的影响

aws:PrincipalAccount

使用此键可将请求主体所属的账户与您在策略中指定的账户标识符进行比较。对于匿名请求,请求上下文将返回 anonymous

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

  • 数据类型字符串

  • 值类型 — 单值

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

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

aws:PrincipalOrgPaths

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

  • Availability(可用性)- 仅在主体是企业成员时,才将此键包含在请求上下文中。匿名请求不包括此键。

  • 数据类型字符串(列表)

  • 值类型— 多值

注意

组织 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 条件运算符使用多个值时,主体的路径必须与策略中列出的其中一个路径匹配。有关多值条件键的更多信息,请参阅多值上下文键

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

aws:PrincipalOrgID

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

  • Availability(可用性)- 仅在主体是企业成员时,才将此键包含在请求上下文中。匿名请求不包括此键。

  • 数据类型字符串

  • 值类型— 单值

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

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

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

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

aws:PrincipalTag/tag-key

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

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

  • 数据类型字符串

  • 值类型— 单值

您可采用键/值对的形式向用户或角色添加自定义属性。有关 IAM 标签的更多信息,请参阅 AWS Identity and Access Management 资源的标签。您可以将 aws:PrincipalTag 用于针对 AWS 主体的访问控制

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

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

aws:PrincipalIsAWSService

使用此密钥可检查对您资源的调用是否直接由 AWS 服务主体提出。例如,AWS CloudTrail 使用服务主体 cloudtrail.amazonaws.com 将日志写入 Amazon S3 存储桶。当服务使用服务主体对资源执行直接操作时,请求上下文密钥将设置为 true。如果服务使用 IAM 主体的凭证代表主体发出请求时,上下文密钥设置为 false。如果服务使用服务角色或服务相关角色代表主体进行调用,则请求也会被设为 false。

  • 可用性 — 此密钥存在于所有使用 AWS 凭证的签名 API 请求的请求上下文中。匿名请求不包括此键。

  • 数据类型布尔值

  • 值类型— 单值

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

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

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

使用此密钥可以将策略中的服务主体名称与正在向您的资源发出请求的服务主体进行比较。您可以使用此密钥来检查此调用是否由特定的服务主体提出。当服务主体向您的资源发出直接请求时,aws:PrincipalServiceName 密钥将包含服务主体的名称。例如,AWS CloudTrail 服务主体的名称是 cloudtrail.amazonaws.com

  • 可用性 — 当调用由 AWS 服务主体提出时,此密钥将存在于请求中。此密钥不会在任何其他情况中出现,包括以下情况:

    • 如果服务使用服务角色或服务相关角色代表主体进行调用。

    • 如果服务使用 IAM 主体的凭证代表主体发出请求。

    • 如果调用是由 IAM 主体直接发出的。

    • 如果调用是由匿名请求者发出的。

  • 数据类型字符串

  • 值类型— 单值

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

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

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

此密钥提供了属于此服务的所有服务主体名称列表。这是一个高级条件键。您可以用它来限制服务仅从特定地区访问您的资源。某些服务可能会创建区域服务主体,以指示特定区域内服务的特定实例。您可以将对资源的访问限制为服务的特定实例。当服务主体向您的资源发出直接请求时,aws:PrincipalServiceNamesList 会包含与服务的区域实例关联的所有服务主体名称的无序列表。

  • 可用性 — 当调用由 AWS 服务主体提出时,此密钥将存在于请求中。此密钥不会在任何其他情况中出现,包括以下情况:

    • 如果服务使用服务角色或服务相关角色代表主体进行调用。

    • 如果服务使用 IAM 主体的凭证代表主体发出请求。

    • 如果调用是由 IAM 主体直接发出的。

    • 如果调用是由匿名请求者发出的。

  • 数据类型字符串(列表)

  • 值类型— 多值

aws:PrincipalServiceNamesList 是一个多值条件键。多值键在请求上下文中可以有多个值。对于此键,您必须将 ForAnyValue 或者 ForAllValues 集合运算符与字符串条件运算符搭配使用。有关多值条件键的更多信息,请参阅多值上下文键

aws:PrincipalType

使用此键可将发出请求的主体的类型与您在策略中指定的主体类型进行比较。有关更多信息,请参阅 如何指定主体。有关 principal 密钥值的具体示例,请参阅 主体键值

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

  • 数据类型字符串

  • 值类型 — 单值

aws:userid

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

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

  • 数据类型字符串

  • 值类型— 单值

aws:username

使用此键可将请求者的用户名与您在策略中指定的用户名进行比较。有关如何为不同的主体显示信息的详细信息,请参阅如何指定主体。有关 principal 密钥值的具体示例,请参阅 主体键值

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

  • 数据类型字符串

  • 值类型 — 单值

角色会话的属性

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

角色是一种主体。您还可以使用 主体的属性 部分中的条件键在角色发出请求时评估角色的属性。

aws:FederatedProvider

使用此密钥将主体的发布身份提供程序 (IdP) 与您在策略中指定的 IdP 进行比较。这意味着 IAM 角色使用 AssumeRoleWithWebIdentity AWS STS 操作代入。使用生成的角色会话的临时证书发出请求时,请求上下文将标识对原始联合身份进行身份验证的 IdP。

  • 可用性 — 当主体是角色会话主体并且该会话是使用 AssumeRoleWithWebIdentity 发出的时候,此密钥就存在。

  • 数据类型字符串

  • 值类型— 单值

例如,如果用户已通过 Amazon Cognito 进行身份验证,则请求上下文将包含值 cognito-identity.amazonaws.com。同样,如果已通过 Login with Amazon 对用户进行身份验证,则请求上下文将包含值 www.amazon.com

您可以使用任何可用的单值条件密钥作为变量。以下示例基于资源的策略使用 aws:FederatedProvider 密钥作为资源的 ARN 中的策略变量。此策略允许使用 IdP 进行身份验证的任何主体,使用特定于发布身份提供程序的路径从 Amazon S3 存储桶获取对象。

aws:TokenIssueTime

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

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

  • 数据类型日期

  • 值类型— 单值

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

aws:MultiFactorAuthAge

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

重要

对于联合身份或使用访问密钥签署 AWS CLI、AWS API 或 AWS SDK 请求而发出的请求,此条件键不存在。要了解有关使用临时安全凭证为 API 操作添加 MFA 保护的更多信息,请参阅 使用 MFA 保护 API 访问

要检查是否使用 MFA 来验证 IAM 联合身份,您可以将身份提供者的身份验证方法作为会话标签传递给 AWS。有关详细信息,请参阅在 AWS STS 中传递会话标签。要对 IAM Identity Center 身份强制执行 MFA,您可以启用访问控制属性,以使用身份提供者的身份验证方法将 SAML 断言声明传递给 IAM Identity Center。

  • 可用性 – 仅在主体使用临时安全凭证发出请求时,才将此键包含在请求上下文中。带 MFA 条件的策略可附加到:

    • 对于 IAM 用户或组:

    • Amazon S3 存储桶、Amazon SQS 队列或 Amazon SNS 主题等资源

    • 可由用户担任的 IAM 角色的信任策略

  • 数据类型数字

  • 值类型— 单值

aws:MultiFactorAuthPresent

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

重要

对于联合身份或使用访问密钥签署 AWS CLI、AWS API 或 AWS SDK 请求而发出的请求,此条件键不存在。要了解有关使用临时安全凭证为 API 操作添加 MFA 保护的更多信息,请参阅 使用 MFA 保护 API 访问

要检查是否使用 MFA 来验证 IAM 联合身份,您可以将身份提供者的身份验证方法作为会话标签传递给 AWS。有关详细信息,请参阅在 AWS STS 中传递会话标签。要对 IAM Identity Center 身份强制执行 MFA,您可以启用访问控制属性,以使用身份提供者的身份验证方法将 SAML 断言声明传递给 IAM Identity Center。

  • Availability(可用性)- 仅在主体使用临时凭证发出请求时,才将此键包含在请求上下文中。带 MFA 条件的策略可附加到:

    • 对于 IAM 用户或组:

    • Amazon S3 存储桶、Amazon SQS 队列或 Amazon SNS 主题等资源

    • 可由用户担任的 IAM 角色的信任策略

  • 数据类型布尔值

  • 值类型 — 单值

临时凭证用于验证具有来自 AssumeRoleGetSessionToken 的临时令牌的 IAM 角色和 IAM 用户,以及 AWS Management Console 用户。

IAM 用户访问密钥是长期凭证,但在某些情况下,AWS 会代表 IAM 用户创建临时凭证以执行操作。在这些情况下,aws:MultiFactorAuthPresent 密钥存在于请求中,并设置为值 false。有两种常见情况可能会发生这种情形:

  • AWS Management Console中的 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:ChatbotSourceArn

使用此键,可将主体设置的来源聊天配置 ARN 跟您在与频道配置关联的 IAM 角色策略中指定的聊天配置 ARN 进行比较。您可以根据 AWS Chatbot 发起的代入角色会话对请求进行授权。

  • 可用性 – 每次代入角色会话时,此键都将包含在 AWS Chatbot 服务发起的请求上下文中。键值是聊天配置 ARN,例如从聊天频道运行 AWS CLI 命令时。

  • 数据类型ARN

  • 值类型 — 单值

  • 示例值arn:aws::chatbot::123456789021:chat-configuration/slack-channel/private_channel

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

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

aws:Ec2InstanceSourceVpc

此键标识将 Amazon EC2 IAM 角色凭证传递到的 VPC。您可以在具有 aws:SourceVPC 全局键的策略中使用此键,检查从中发出调用的 VPC (aws:SourceVPC) 是否与将凭证传送到的 VPC (aws:Ec2InstanceSourceVpc) 相匹配。

  • 可用性 – 仅在请求者使用 Amazon EC2 角色凭证签署请求时,才将此键包含在请求上下文中。它可以用于 IAM policy、服务控制策略、VPC 端点策略和资源策略。

  • 数据类型字符串

  • 值类型 — 单值

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

注意

此条件键在 EC2 Classic 中不可用。

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

此键标识 Amazon EC2 IAM 角色凭证传送到的主弹性网络接口的私有 IPv4 地址。您必须将此条件键与其配套键 aws:Ec2InstanceSourceVpc 一起使用,以确保您拥有 VPC ID 和源私有 IP 的全局唯一组合。将此键与 aws:Ec2InstanceSourceVpc 搭配使用可确保请求是从凭证传送到的同一私有 IP 地址发出的。

  • 可用性 – 仅在请求者使用 Amazon EC2 角色凭证签署请求时,才将此键包含在请求上下文中。它可以用于 IAM policy、服务控制策略、VPC 端点策略和资源策略。

  • 数据类型IP 地址

  • 值类型 — 单值

重要

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

注意

此条件键在 EC2 Classic 中不可用。

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

使用此密钥可将主体设置的源身份与您在策略中指定的源身份进行比较。

  • 可用性 — 在使用任何 AWS STS 担任角色 CLI 命令或 AWS STS AssumeRoleAPI 操作担任角色时设置好源身份后,此密钥将会被包含在请求中。

  • 数据类型字符串

  • 值类型— 单值

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

sts:RoleSessionName 不同,在设置源身份后,无法更改该值。它存在于角色执行的所有操作的请求上下文中。当您使用会话凭证担任另一个角色时,该值将保留到后续角色会话中。从一个角色代入另一个角色的过程称为角色链

当主体使用任何 AWS STS 担任角色 CLI 命令或 AWS STS AssumeRole API 操作担任角色并初次设置源身份时,sts:SourceIdentity 密钥将会出现在请求中。aws:SourceIdentity键存在于对具有源身份设置的角色会话执行的任何操作请求中。

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

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

要了解有关使用源身份信息的更多信息,请参阅 监控和控制使用所担任角色执行的操作

ec2:RoleDelivery

使用此键可将签名请求中的实例元数据服务版本与 Amazon EC2 的 IAM 角色凭证进行比较。实例元数据服务根据以下条件区分 IMDSv1 和 IMDSv2 请求:对于任何给定请求,PUTGET 标头(对于 IMDSv2 是唯一的)在该请求中是否存在。

  • 可用性 – 仅在 Amazon EC2 实例创建角色会话时,才将此键包含在请求上下文中。

  • 数据类型数字

  • 值类型 — 单值

  • 示例值 – 1.0, 2.0

您可以在每个实例上配置实例元数据服务(IMDS),以确保本地代码或用户必须使用 IMDSv2。在指定必须使用 IMDSv2 时,IMDSv1 不再起作用。

  • 实例元数据服务版本 1(IMDSv1)– 一种请求/响应方法

  • 实例元数据服务版本 2 (IMDSv2) – 一种面向会话的方法

有关如何配置实例以使用 IMDSv2 的信息,请参阅配置实例元数据选项

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

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

有关更多信息,请参阅使用实例元数据的示例策略

ec2:SourceInstanceArn

使用此键可以比较生成角色会话的实例的 ARN。

  • 可用性 – 仅在 Amazon EC2 实例创建角色会话时,才将此键包含在请求上下文中。

  • 数据类型ARN

  • 值类型 — 单值

  • 示例值 – arn:aws::ec2:us-west-2:111111111111:instance/instance-id

对于策略示例,请参阅允许特定实例查看其他 AWS 服务中的资源

glue:RoleAssumedBy

AWS Glue 服务为每个 AWS API 请求设置此条件键,其中 AWS Glue 使用服务角色代表客户发出请求(不是通过作业或开发人员端点,而是直接通过 AWS Glue 服务发出请求)。使用此键验证对 AWS 资源的调用是否来自 AWS Glue 服务。

  • 可用性 – 当 AWS Glue 代表客户使用服务角色发出请求时,此键包含在请求上下文中。

  • 数据类型字符串

  • 值类型 — 单值

  • 示例值 – 此键始终设置为 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

AWS Glue 服务使用来自作业或开发人员端点的服务角色为每个 AWS API 请求设置此键。使用此键验证对 AWS 资源的调用是来自 AWS Glue 作业还是开发人员端点。

  • 可用性 – 当 AWS Glue 发出来自作业或开发人员端点的请求时,此键包含在请求上下文中。

  • 数据类型字符串

  • 值类型 — 单值

  • 示例值 – 此键始终设置为 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" } } }

lambda:SourceFunctionArn

使用此键标识将 IAM 角色凭证传递到的 Lambda 函数 ARN。Lambda 服务会为来自函数执行环境的每个 AWS API 请求设置此键。使用此键可验证对 AWS 资源的调用是否来自特定 Lambda 函数的代码。Lambda 还为来自执行环境外部的一些请求设置此键,例如将日志写入 CloudWatch 并将跟踪发送到 X-Ray。

  • 可用性 – 每次调用 Lambda 函数代码时,此键都将包含在请求上下文中。

  • 数据类型ARN

  • 值类型 — 单值

  • 示例值 – arn:aws::lambda:us-east-1:123456789012:function:TestFunction

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

{ "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 执行环境凭证

ssm:SourceInstanceArn

使用此键标识将 IAM 角色凭证传递到的 AWS Systems Manager 托管实例 ARN。请求来自使用与 Amazon EC2 实例配置文件关联的 IAM 角色的托管实例时,此条件键不存在。

  • 可用性 – 每次将角色凭证传递到 AWS Systems Manager 托管实例时,此键都将包含在请求上下文中。

  • 数据类型ARN

  • 值类型 — 单值

  • 示例值 – arn:aws::ec2:us-west-2:111111111111:instance/instance-id

identitystore:UserId

使用此键可将签名请求中的 IAM Identy Center 员工身份与策略中指定的身份进行比较。

  • 可用性 – 当请求的调用方是 IAM Identity Center 中的用户时,将包含此键。

  • 数据类型字符串

  • 值类型 — 单值

  • 示例值 – 94482488-3041-7026-18f3-be45837cd0e4

您可以使用 AWS CLI、AWS API 或 AWS 软件开发工具包向 GetUserId API 发出请求,以在 IAM Identity Center 查找用户的用户 ID。

网络的属性

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

aws:SourceIp

使用此键可将请求者的 IP 地址与您在策略中指定的 IP 地址进行比较。aws:SourceIp 条件键只能用于公有 IP 地址范围。

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

  • 数据类型IP 地址

  • 值类型— 单值

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

注意

aws:SourceIp 同时支持 IPv4 和 IPv6 地址或 IP 地址范围。有关支持 IPv6 的 AWS 服务 列表,请参阅《Amazon VPC 用户指南》支持 IPv6 的 AWS 服务

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

{ "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 policy 条件中包含 IPv4 和 IPv6 地址或 IP 地址范围。如果用户从指定的 IPv4 或 IPv6 地址范围进行调用,以下基于身份的策略将允许用户将对象放入 amzn-s3-demo-bucket3 Amazon S3 存储桶。在 IAM policy 中包含 IPv6 地址范围之前,请验证您正在使用的 AWS 服务 是否支持 IPv6。有关支持 IPv6 的 AWS 服务 列表,请参阅《Amazon VPC 用户指南》支持 IPv6 的 AWS 服务

{ "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。有关使用 VPC 端点的更多信息,请参阅《AWS PrivateLink 指南》中的 VPC 端点和 VPC 端点服务的身份和访问管理

aws:SourceVpc

使用此键检查请求是否经过 VPC 端点附加到的 VPC。在策略中,您可以使用此键以仅允许访问特定的 VPC。有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的 限制对特定 VPC 的访问

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

  • 数据类型字符串

  • 值类型 — 单值

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

例如,可以将以下基于身份的策略附加到 IAM 角色,以拒绝 PutObject 访问 amzn-s3-demo-bucket3 Amazon S3 存储桶,除非请求是从指定的 VPC ID 发出的,或由使用转发访问会话(FAS)代表角色发出请求的 AWS 服务 发出的。与 aws:SourceIp 不同的是,必须使用 aws:ViaAWSServiceaws:CalledVia 来允许 FAS 请求,因为初始请求的源 VPC 不会被保留。

注意

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

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

有关如何在基于资源的策略中应用此键的示例,请参阅《Amazon Simple Storage Service 用户指南》中的限制对特定 VPC 的访问

aws:SourceVpce

使用此键可将请求的 VPC 端点标识符与您在策略中指定的端点 ID 进行比较。

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

  • 数据类型字符串

  • 值类型 — 单值

在策略中,您可以使用此键来限制对特定 VPC 端点的访问。有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的限制对特定 VPC 的访问。与使用 aws:SourceVpc 类似,必须使用 aws:ViaAWSServiceaws:CalledVia 来允许 AWS 服务 使用转发访问会话(FAS)发出的请求。这是因为初始请求的源 VPC 端点未被保留。

aws:VpcSourceIp

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

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

  • 数据类型IP 地址

  • 值类型 — 单值

有关更多信息,请参阅《Amazon VPC 用户指南》中的使用端点策略控制对 VPC 端点的访问。与使用 aws:SourceVpc 类似,必须使用 aws:ViaAWSServiceaws:CalledVia 来允许 AWS 服务 使用转发访问会话(FAS)发出的请求。这是因为使用 VPC 端点发出的初始请求的源 IP 不会保留在 FAS 请求中。

注意

aws:VpcSourceIp 同时支持 IPv4 和 IPv6 地址或 IP 地址范围。有关支持 IPv6 的 AWS 服务 列表,请参阅《Amazon VPC 用户指南》支持 IPv6 的 AWS 服务

aws:VpcSourceIp 条件键应始终与 aws:SourceVpcaws:SourceVpce 条件键结合使用。否则,策略可能会允许来自使用相同或重叠的 IP CIDR 的意外 VPC 的 API 调用。之所以发生这种情况,是因为来自两个不相关的 VPC 的 IP CIDR 可能相同或重叠。相反,应在策略中使用 VPC ID 或 VPC 端点 ID,因为它们具有全局唯一的标识符。这些唯一标识符可确保不会出现意外结果。

资源的属性

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

aws:ResourceAccount

使用此键,将策略中所请求的资源所有者的 AWS 账户 ID 与资源账户进行比较。然后,您可以根据拥有该资源的账户来允许或拒绝对该资源的访问。

  • Availability(可用性)– 对于大多数服务操作,此键始终包含在请求上下文中。以下操作不支持此键:

    • AWS Audit Manager

      • auditmanager:UpdateAssessmentFrameworkShare

    • Amazon Detective

      • detective:AcceptInvitation

    • Amazon Elastic Block Store – 所有操作

    • Amazon EC2

      • ec2:AcceptTransitGatewayPeeringAttachment

      • ec2:AcceptVpcEndpointConnections

      • ec2:AcceptVpcPeeringConnection

      • ec2:CopyImage

      • ec2:CopySnapshot

      • ec2:CreateTransitGatewayPeeringAttachment

      • ec2:CreateVolume

      • ec2:CreateVpcEndpoint

      • ec2:CreateVpcPeeringConnection

      • ec2:DeleteTransitGatewayPeeringAttachment

      • ec2:DeleteVpcPeeringConnection

      • ec2:RejectTransitGatewayPeeringAttachment

      • ec2:RejectVpcEndpointConnections

      • ec2:RejectVpcPeeringConnection

    • Amazon EventBridge

      • events:PutEvents – EventBridge PutEvents 将调用其他账户中的事件总线,前提是该事件总线已在 2023 年 3 月 2 日之前被配置为跨账户 EventBridge 目标。有关更多信息,请参阅《Amazon EventBridge 用户指南》中的 授予权限以允许来自其他 AWS 账户的事件

    • Amazon GuardDuty

      • guardduty:AcceptAdministratorInvitation

    • Amazon Macie

      • macie2:AcceptInvitation

    • Amazon OpenSearch Service

      • es:AcceptInboundConnection

    • Amazon Route 53

      • route53:AssociateVpcWithHostedZone

      • route53:CreateVPCAssociationAuthorization

      • route53:DeleteVPCAssociationAuthorization

      • route53:DisassociateVPCFromHostedZone

      • route53:ListHostedZonesByVPC

    • AWS Security Hub

      • securityhub:AcceptAdministratorInvitation

  • 数据类型字符串

  • 值类型 — 单值

注意

有关上述不支持的操作的其他注意事项,请参阅 Data Perimeter Policy Examples 存储库。

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

对于您的账户中的大多数资源,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 效果,这会显式拒绝访问语句中列出而不属于已列出账户的所有资源。将此策略与允许访问特定资源的其他策略结合使用。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyInteractionWithResourcesNotInSpecificAccount", "Action": "service:*", "Effect": "Deny", "Resource": [ "arn:aws:service:region:account:*" ], "Condition": { "StringNotEquals": { "aws:ResourceAccount": [ "account" ] } } } ] }

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

注意

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

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

将此策略示例用作创建自己的自定义策略的模板。参阅服务文档以了解更多信息。

aws:ResourceOrgPaths

使用此键来比较所访问资源的 AWS Organizations 路径与策略中的路径。在策略中,此条件键可确保该资源属于 AWS Organizations 中指定组织根或组织单位(OU)的账户成员。AWS Organizations 路径是 Organizations 实体结构的文本表示形式。有关使用和了解路径的更多信息,请参阅 了解 AWS Organizations 实体路径

  • Availability(可用性)- 仅在拥有资源的账户是企业成员时,才将此键包含在请求上下文中。此全局条件键不支持以下操作:

    • AWS Audit Manager

      • auditmanager:UpdateAssessmentFrameworkShare

    • Amazon Detective

      • detective:AcceptInvitation

    • Amazon Elastic Block Store – 所有操作

    • Amazon EC2

      • ec2:AcceptTransitGatewayPeeringAttachment

      • ec2:AcceptVpcEndpointConnections

      • ec2:AcceptVpcPeeringConnection

      • ec2:CopyImage

      • ec2:CopySnapshot

      • ec2:CreateTransitGatewayPeeringAttachment

      • ec2:CreateVolume

      • ec2:CreateVpcEndpoint

      • ec2:CreateVpcPeeringConnection

      • ec2:DeleteTransitGatewayPeeringAttachment

      • ec2:DeleteVpcPeeringConnection

      • ec2:RejectTransitGatewayPeeringAttachment

      • ec2:RejectVpcEndpointConnections

      • ec2:RejectVpcPeeringConnection

    • Amazon EventBridge

      • events:PutEvents – EventBridge PutEvents 将调用其他账户中的事件总线,前提是该事件总线已在 2023 年 3 月 2 日之前被配置为跨账户 EventBridge 目标。有关更多信息,请参阅《Amazon EventBridge 用户指南》中的 授予权限以允许来自其他 AWS 账户的事件

    • Amazon GuardDuty

      • guardduty:AcceptAdministratorInvitation

    • Amazon Macie

      • macie2:AcceptInvitation

    • Amazon OpenSearch Service

      • es:AcceptInboundConnection

    • Amazon Route 53

      • route53:AssociateVpcWithHostedZone

      • route53:CreateVPCAssociationAuthorization

      • route53:DeleteVPCAssociationAuthorization

      • route53:DisassociateVPCFromHostedZone

      • route53:ListHostedZonesByVPC

    • AWS Security Hub

      • securityhub:AcceptAdministratorInvitation

  • 数据类型字符串(列表)

  • 值类型— 多值

注意

有关上述不支持的操作的其他注意事项,请参阅 Data Perimeter Policy Examples 存储库。

aws:ResourceOrgPaths 是一个多值条件键。多值键在请求上下文中可以有多个值。对于此键,您必须将 ForAnyValue 或者 ForAllValues 集合运算符与字符串条件运算符搭配使用。有关多值条件键的更多信息,请参阅多值上下文键

例如,对于属于组织 o-a1b2c3d4e5 的资源,以下条件会返回为 True。包含通配符时,您必须使用 StringLike 条件运算符。

"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 条件运算符来指定 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 除外。 演示了如何根据资源账户拒绝访问,同时定义对于服务拥有的资源的例外情况。您可以使用 aws:ResourceOrgPaths 键来创建类似的策略,限制对企业部门(OU)内部资源的访问,同时包括服务拥有的资源。

将此策略示例用作创建自己的自定义策略的模板。参阅服务文档以了解更多信息。

aws:ResourceOrgID

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

  • Availability(可用性)- 仅在拥有资源的账户是企业成员时,才将此键包含在请求上下文中。此全局条件键不支持以下操作:

    • AWS Audit Manager

      • auditmanager:UpdateAssessmentFrameworkShare

    • Amazon Detective

      • detective:AcceptInvitation

    • Amazon Elastic Block Store – 所有操作

    • Amazon EC2

      • ec2:AcceptTransitGatewayPeeringAttachment

      • ec2:AcceptVpcEndpointConnections

      • ec2:AcceptVpcPeeringConnection

      • ec2:CopyImage

      • ec2:CopySnapshot

      • ec2:CreateTransitGatewayPeeringAttachment

      • ec2:CreateVolume

      • ec2:CreateVpcEndpoint

      • ec2:CreateVpcPeeringConnection

      • ec2:DeleteTransitGatewayPeeringAttachment

      • ec2:DeleteVpcPeeringConnection

      • ec2:RejectTransitGatewayPeeringAttachment

      • ec2:RejectVpcEndpointConnections

      • ec2:RejectVpcPeeringConnection

    • Amazon EventBridge

      • events:PutEvents – EventBridge PutEvents 将调用其他账户中的事件总线,前提是该事件总线已在 2023 年 3 月 2 日之前被配置为跨账户 EventBridge 目标。有关更多信息,请参阅《Amazon EventBridge 用户指南》中的 授予权限以允许来自其他 AWS 账户的事件

    • Amazon GuardDuty

      • guardduty:AcceptAdministratorInvitation

    • Amazon Macie

      • macie2:AcceptInvitation

    • Amazon OpenSearch Service

      • es:AcceptInboundConnection

    • Amazon Route 53

      • route53:AssociateVpcWithHostedZone

      • route53:CreateVPCAssociationAuthorization

      • route53:DeleteVPCAssociationAuthorization

      • route53:DisassociateVPCFromHostedZone

      • route53:ListHostedZonesByVPC

    • AWS Security Hub

      • securityhub:AcceptAdministratorInvitation

  • 数据类型字符串

  • 值类型 — 单值

注意

有关上述不支持的操作的其他注意事项,请参阅 Data Perimeter Policy Examples 存储库。

此全局键会返回给定请求的资源组织 ID。它允许您创建适用于组织中所有资源的规则,这些资源在基于身份的策略Resource 元素中指定。您可以在条件元素中指定组织 ID。当您添加和删除账户时,包含 aws:ResourceOrgID 键的策略将自动包括正确的账户,并且不必手动更新。

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

重要

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

{ "Version": "2012-10-17", "Statement": { "Sid": "DenyPutObjectToS3ResourcesOutsideMyOrganization", "Effect": "Deny", "Action": "s3:PutObject", "Resource": "arn:partition: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 除外。 演示了如何根据资源账户拒绝访问,同时定义对于服务拥有的资源的例外情况。您可以使用 aws:ResourceOrgID 键来创建类似的策略,限制对企业内部资源的访问,同时包括服务拥有的资源。

将此策略示例用作创建自己的自定义策略的模板。参阅服务文档以了解更多信息。

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

aws:ResourceTag/tag-key

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

  • Availability(可用性)– 当请求的资源已附加标签,或者是在利用附加包创建资源的请求中,键会包含在请求上下文中。只有支持基于标签的授权的资源返回此键。每个标签键/值对均有一个上下文密钥。

  • 数据类型字符串

  • 值类型— 单值

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

有关使用 aws:ResourceTag 键控制对 IAM 资源的访问的示例,请参阅 控制对 AWS 资源的访问

有关使用 aws:ResourceTag 键控制对其他 AWS 资源的访问的示例,请参阅 使用标签控制对 AWS 资源的访问

有关使用 aws:ResourceTag 条件键进行基于属性的访问控制 (ABAC) 的教程,请参阅 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

服务主体
aoss.amazonaws.com
athena.amazonaws.com
backup.amazonaws.com
cloud9.amazonaws.com
cloudformation.amazonaws.com
databrew.amazonaws.com
dataexchange.amazonaws.com
dynamodb.amazonaws.com
imagebuilder.amazonaws.com
kms.amazonaws.com
mgn.amazonaws.com
nimble.amazonaws.com
omics.amazonaws.com
ram.amazonaws.com
robomaker.amazonaws.com
servicecatalog-appregistry.amazonaws.com
sqlworkbench.amazonaws.com
ssm-guiconnect.amazonaws.com

要在任何 服务使用主体的凭证发出请求时允许或拒绝访问,请使用 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.rproxy.goskope.comdynamodb.amazonaws.com(按照该顺序)。如果您只关心调用是在请求链中的某个地方通过 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"] } } } ] }

如果要强制由哪个服务在链中进行第一个或最后一个调用,可以使用 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", "aws:CalledViaLast": "dynamodb.amazonaws.com" } } } ] }

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

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

aws:CalledViaFirst

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

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

  • 数据类型字符串

  • 值类型— 单值

aws:CalledViaLast

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

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

  • 数据类型字符串

  • 值类型 — 单值

aws:ViaAWSService

使用此键检查 AWS 服务 是否使用转发访问会话(FAS)代表你向另一项服务发出请求。

当服务使用转发访问会话代表原始 IAM 主体发出请求时,请求上下文键会返回 true。当主体直接进行调用时,请求上下文密钥也会返回 false

  • Availability(可用性)- 此键始终包含在请求上下文中。

  • 数据类型布尔值

  • 值类型— 单值

aws:CurrentTime

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

  • Availability(可用性)- 此键始终包含在请求上下文中。

  • 数据类型日期

  • 值类型— 单值

aws:EpochTime

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

  • Availability(可用性)- 此键始终包含在请求上下文中。

  • 数据类型日期数字

  • 值类型— 单值

aws:referer

使用此键可将在客户端浏览器中引用请求的站点与您在策略中指定的引用站点进行比较。aws:referer 请求上下文值是由调用方在 HTTP 标头中提供的。当您在网页上选择链接时,Referer 标题将包含在 Web 浏览器请求中。Referer 标题包含选定链接的网页的 URL。

  • Availability(可用性)- 仅当通过从浏览器中的网页 URL 链接来调用对 AWS 资源的请求时,才将此键包含在请求上下文中。编程请求不包括此键,因为它不使用浏览器链接即可访问 AWS 资源。

  • 数据类型字符串

  • 值类型— 单值

例如,您可以直接使用 URL 或使用直接 API 调用访问 Amazon S3 对象。有关更多信息,请参阅使用 Web 浏览器直接调用 Amazon S3 API 操作。当您从网页中存在的 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

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

  • Availability(可用性)- 此键始终包含在请求上下文中。

  • 数据类型字符串

  • 值类型— 单值

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

注意

使用 aws:RequestedRegion 条件键可以控制服务的哪个端点被调用,但不控制该操作产生的影响。一些服务具有跨区域影响。

例如,Amazon S3 具有跨区域扩展的 API 操作。

  • 您可以在一个区域中调用 s3:PutBucketReplication(受 aws:RequestedRegion 条件键的影响),但其他区域将会受到影响,具体取决于复制配置设置。

  • 您可以调用 s3:CreateBucket 在另一个区域创建存储桶,然后使用 s3:LocationConstraint 条件键来控制适用区域。

您可以使用该上下文密钥将访问限制为一组给定区域中的 AWS 服务。例如,以下策略允许用户查看 AWS Management Console 中的所有 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 请求期间控制访问

  • Availability(可用性)– 当在请求中传递标签键值对时,将此键包含在请求上下文中。在请求中传递多个标签时,每个标签键/值对均有一个上下文密钥。

  • 数据类型字符串

  • 值类型— 单值

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

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

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

aws:TagKeys

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

  • Availability(可用性)– 仅在操作支持将标签传递到请求中时,才将此键包含在请求上下文中。

  • 数据类型字符串(列表)

  • 值类型— 多值

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

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

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

aws:SecureTransport

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

  • Availability(可用性)- 此键始终包含在请求上下文中。

  • 数据类型布尔值

  • 值类型 — 单值

aws:SourceArn

使用该键可将发出服务到服务请求的资源的 Amazon 资源名称(ARN)与您在策略中指定的 ARN 进行比较,但仅当请求由 AWS 服务主体发出时才有效。源的 ARN 包含账户 ID 时,不必将 aws:SourceAccountaws:SourceArn 结合使用。

此键不适用于发出请求的主体的 ARN。请改用aws:PrincipalArn

  • 可用性 – 仅当 AWS 服务主体代表配置触发服务到服务请求的资源直接调用您的资源时,才会将该键包含在请求上下文中。发出调用的服务将原始资源的 ARN 传递给被调用的服务。

    aws:SourceArn

    以下服务集成不支持该全局条件键:

    发出调用的服务(服务主体) 被调用的服务(基于资源的策略) 描述
    logdelivery.elb.amazonaws.com Amazon S3 存储桶 在 Amazon S3 桶中启用 Elastic Load Balancing 访问日志记录
    logdelivery.elasticloadbalancing.amazonaws.com Amazon S3 存储桶 在 Amazon S3 桶中启用 Elastic Load Balancing 访问日志记录
    注意

    并非所有与 AWS Security Token Service(AWS STS)和 AWS Key Management Service(AWS KMS)的服务集成均受支持。有关更多信息,请参阅发出调用的服务的文档。对 AWS 服务 通过 KMS 密钥授权使用的键使用 KMS 密钥政策中 aws:SourceArn 可能会导致意外行为。

  • 数据类型 – ARN、字符串

    AWS 建议在比较 ARN 时使用 ARN 运算符而不是字符串运算符

  • 值类型— 单值

您可以使用此条件键来防止 AWS 服务在服务之间执行事务时被用作混淆代理人。仅在 Principal 作为 AWS 服务 主体的基于资源的策略中使用该键。将此条件键的值设置为请求中资源的 ARN。例如,当 Amazon S3 桶更新触发 Amazon SNS 主题发布时,Amazon S3 服务将调用 sns:Publish API 操作。在允许 sns:Publish 操作的主题策略中,将条件键的值设置为 Amazon S3 桶的 ARN。有关如何以及建议何时使用此条件键的信息,请参阅您正在使用的 AWS 服务的文档。

aws:SourceAccount

使用该键可将发出服务到服务请求的资源的账户 ID 与您在策略中指定的账户 ID 进行比较,但仅当请求由 AWS 服务主体发出时才有效。

  • 可用性 – 仅当 AWS 服务主体代表配置触发服务到服务请求的资源直接调用您的资源时,才会将该键包含在请求上下文中。发出调用的服务将原始资源的账户 ID 传递给被调用的服务。

    aws:SourceAccount

    以下服务集成不支持该全局条件键:

    发出调用的服务(服务主体) 被调用的服务(基于资源的策略) 描述
    logdelivery.elb.amazonaws.com Amazon S3 存储桶 在 Amazon S3 桶中启用 Elastic Load Balancing 访问日志记录
    logdelivery.elasticloadbalancing.amazonaws.com Amazon S3 存储桶 在 Amazon S3 桶中启用 Elastic Load Balancing 访问日志记录
    注意

    并非所有与 AWS Security Token Service(AWS STS)和 AWS Key Management Service(AWS KMS)的服务集成均受支持。有关更多信息,请参阅发出调用的服务的文档。对 AWS 服务 通过 KMS 密钥授权使用的键使用 KMS 密钥政策中 aws:SourceAccount 可能会导致意外行为。

  • 数据类型字符串

  • 值类型— 单值

您可以使用此条件键来防止 AWS 服务在服务之间执行事务时被用作混淆代理人。仅在 Principal 作为 AWS 服务 主体的基于资源的策略中使用该键。将此条件键的值设置为请求中资源的账户 ID。例如,当 Amazon S3 桶更新触发 Amazon SNS 主题发布时,Amazon S3 服务将调用 sns:Publish API 操作。在允许 sns:Publish 操作的主题策略中,将条件键的值设置为 Amazon S3 桶的账户 ID。有关如何以及建议何时使用此条件键的信息,请参阅您正在使用的 AWS 服务的文档。

aws:SourceOrgPaths

使用该键可将发出服务到服务请求的资源的 AWS Organizations 路径与您在策略中指定的组织路径进行比较,但仅当请求由 AWS 服务主体发出时才有效。 Organizations 路径是 Organizations 实体结构的文本表示形式。有关使用和了解路径的更多信息,请参阅了解 AWS Organizations 实体路径

  • 可用性 – 仅当 AWS 服务主体代表属于组织成员的账户拥有的资源直接调用您的资源时,才会将该键包含在请求上下文中。发出调用的服务将原始资源的组织路径传递给被调用的服务。

    aws:SourceOrgPaths

    以下服务集成不支持该全局条件键:

    发出调用的服务(服务主体) 被调用的服务(基于资源的策略) 描述
    logdelivery.elb.amazonaws.com Amazon S3 存储桶 在 Amazon S3 桶中启用 Elastic Load Balancing 访问日志记录
    logdelivery.elasticloadbalancing.amazonaws.com Amazon S3 存储桶 在 Amazon S3 桶中启用 Elastic Load Balancing 访问日志记录
    所有服务主体 Amazon Lex 机器人 允许 AWS 服务 以使用 Amazon Lex 机器人
    注意

    并非所有与 AWS Security Token Service(AWS STS)和 AWS Key Management Service(AWS KMS)的服务集成均受支持。有关更多信息,请参阅发出调用的服务的文档。对 AWS 服务 通过 KMS 密钥授权使用的键使用 KMS 密钥政策中 aws:SourceOrgPaths 可能会导致意外行为。

  • 数据类型字符串(列表)

  • 值类型— 多值

您可以使用此条件键来防止 AWS 服务在服务之间执行事务时被用作混淆代理人。仅在 Principal 作为 AWS 服务 主体的基于资源的策略中使用该键。将此条件键的值设置为请求中资源的组织路径。例如,当 Amazon S3 桶更新触发 Amazon SNS 主题发布时,Amazon S3 服务将调用 sns:Publish API 操作。在允许 sns:Publish 操作的主题策略中,将条件键的值设置为 Amazon S3 桶的组织路径。有关如何以及建议何时使用此条件键的信息,请参阅您正在使用的 AWS 服务的文档。

aws:SourceOrgPaths 是一个多值条件键。多值键在请求上下文中可以有多个值。对于此键,您必须将 ForAnyValue 或者 ForAllValues 集合运算符与字符串条件运算符搭配使用。有关多值条件键的更多信息,请参阅多值上下文键

aws:SourceOrgID

使用该键可将发出服务到服务请求的资源的组织 ID 与您在策略中指定的组织 ID 进行比较,但仅当请求由 AWS 服务主体发出时才有效。当您在 AWS Organizations 中向组织添加和删除账户时,包含 aws:SourceOrgID 键的策略将自动包含正确的账户,并且不必手动更新。

  • 可用性 – 仅当 AWS 服务主体代表属于组织成员的账户拥有的资源直接调用您的资源时,才会将该键包含在请求上下文中。发出调用的服务将原始资源的组织 ID 传递给被调用的服务。

    aws:SourceOrgID

    以下服务集成不支持该全局条件键:

    发出调用的服务(服务主体) 被调用的服务(基于资源的策略) 描述
    logdelivery.elb.amazonaws.com Amazon S3 存储桶 在 Amazon S3 桶中启用 Elastic Load Balancing 访问日志记录
    logdelivery.elasticloadbalancing.amazonaws.com Amazon S3 存储桶 在 Amazon S3 桶中启用 Elastic Load Balancing 访问日志记录
    所有服务主体 Amazon Lex 机器人 允许 AWS 服务 以使用 Amazon Lex 机器人
    注意

    并非所有与 AWS Security Token Service(AWS STS)和 AWS Key Management Service(AWS KMS)的服务集成均受支持。有关更多信息,请参阅发出调用的服务的文档。对 AWS 服务 通过 KMS 密钥授权使用的键使用 KMS 密钥政策中 aws:SourceOrgID 可能会导致意外行为。

  • 数据类型字符串

  • 值类型— 单值

您可以使用此条件键来防止 AWS 服务在服务之间执行事务时被用作混淆代理人。仅在 Principal 作为 AWS 服务 主体的基于资源的策略中使用该键。将此条件键的值设置为请求中资源的组织 ID。例如,当 Amazon S3 桶更新触发 Amazon SNS 主题发布时,Amazon S3 服务将调用 sns:Publish API 操作。在允许 sns:Publish 操作的主题策略中,将条件键的值设置为 Amazon S3 桶的组织 ID。有关如何以及建议何时使用此条件键的信息,请参阅您正在使用的 AWS 服务的文档。

aws:UserAgent

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

  • Availability(可用性)- 此键始终包含在请求上下文中。

  • 数据类型字符串

  • 值类型— 单值

警告

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

其他跨服务条件键

AWS STS 支持将基于 SAML 的联合身份验证条件键和跨服务条件键用于 OIDC 联合身份验证。当使用 SAML 联合的用户在其他服务中执行 AWS 操作时,这些键可用。