Amazon 全局条件上下文密钥
当主体向 Amazon 发出请求时,Amazon 会将请求信息收集到请求上下文中。您可以使用 JSON 策略的 Condition
元素将请求上下文中的键与您在策略中指定的键值进行比较。请求信息由不同的来源提供,包括发出请求的主体、请求所针对的资源以及有关请求本身的元数据。
全局条件键可在所有 Amazon 服务中使用。虽然这些条件键可以在所有策略中使用,但该键并非在每个请求上下文中都可用。例如,只有当 Amazon 服务主体直接调用您的资源时,aws:SourceAccount
条件键才可用。要了解有关在请求上下文中包含全局键的情况的更多信息,请参阅每个键的可用性信息。
某些单独的服务创建自己的条件键,这些键在其他服务的请求上下文中可用。跨服务条件键是一种全局条件键,其包含与服务名称相匹配的前缀(例如 ec2:
或 lambda:
),但可跨其他服务使用。
服务特定条件键是为与单独的 Amazon 服务一起使用而定义的。例如,Amazon S3 允许您使用 s3:VersionId
条件键编写策略,以限制对特定版本 Amazon S3 对象的访问。此条件键是该服务所独有的,这意味着其仅适用于对 Amazon S3 服务的请求。对于服务特定的条件键,请参阅 Amazon 服务的操作、资源和条件键,然后选择要查看其键的服务。
注意
如果您使用只在某些情况下可用的条件键,则可使用 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 用户
-
Amazon STS 联合用户会话
-
Amazon Web Services 账户 根用户
-
-
数据类型 – ARN、字符串
-
值类型 — 单值
-
示例值下表显示了您可以在
aws:PrincipalArn
条件键中指定的为不同类型的主体返回的请求上下文值:-
IAM 角色 – 请求上下文包含条件键
aws:PrincipalArn
的以下值。请勿将所担任角色会话 ARN 指定为此条件键的值。有关所担任角色会话主体的更多信息,请参阅 角色会话主体。arn:aws:iam::123456789012:role/role-name
-
IAM 用户 – 请求上下文包含条件键
aws:PrincipalArn
的以下值。arn:aws:iam::123456789012:user/
user-name
-
Amazon STS 联合用户会话 – 请求上下文包含条件键
aws:PrincipalArn
的以下值。arn:aws:sts::123456789012:federated-user/
user-name
-
Amazon Web Services 账户 根用户 – 请求上下文包含条件键
aws:PrincipalArn
的以下值。当您将根用户 ARN 指定为aws:PrincipalArn
条件键,它仅限制 Amazon Web Services 账户 根用户的权限。这不同于在基于资源策略的主体元素中指定根用户 ARN,后者会将权限委托给 Amazon Web Services 账户。有关在基于资源策略的主体元素中指定根用户 ARN 的更多信息,请参阅 Amazon Web Services 账户 主体。arn:aws:iam::123456789012:root
-
您可以将根用户 ARN 指定为 Amazon 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
使用此键可将发出请求的主体的 Amazon Organizations 路径与策略中的路径进行比较。该主体可以是 IAM 用户、IAM 角色、联合用户或 Amazon Web Services 账户根用户。在策略中,此条件键可确保请求者是 Amazon Organizations 中指定组织根或组织单位 (OU) 的账户成员。Amazon Organizations 路径是 Organizations 实体结构的文本表示形式。有关使用和了解路径的更多信息,请参阅了解 Amazon 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
使用此键可将请求主体所属的 Amazon Organizations 中组织的标识符与策略中指定的标识符进行比较。
-
Availability(可用性)- 仅在主体是企业成员时,才将此键包含在请求上下文中。匿名请求不包括此键。
-
数据类型 – 字符串
-
值类型— 单值
此全局键提供了列出组织中的所有 Amazon 账户的所有账户 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"} } } }
注意
此全局条件也适用于 Amazon 企业的管理账户。此策略防止指定组织之外的所有主体访问 Amazon S3 存储桶。这包括与您的内部资源交互的任何 Amazon 服务,如将日志数据发送到 Amazon S3 存储桶的 Amazon CloudTrail。了解如何安全地授予 Amazon 服务的访问权限,请参阅 aws:PrincipalIsAWSService。
有关 Amazon Organizations 的更多信息,请参阅《Amazon Organizations 用户指南》中的 什么是 Amazon Organizations?。
aws:PrincipalTag/tag-key
使用此键可将附加到发出请求的主体的标签与您在策略中指定的标签进行比较。如果已为主体附加多个标签,则请求上下文会为每个附加的标签键包含一个 aws:PrincipalTag
键。
您可采用键/值对的形式向用户或角色添加自定义属性。有关 IAM 标签的更多信息,请参阅 Amazon Identity and Access Management 资源的标签。您可以将 aws:PrincipalTag
用于针对 Amazon 主体的访问控制。
此示例说明如何创建基于角色的策略,以允许具有 department=hr
标签的用户管理 IAM 用户、组或角色。要使用此策略,请将示例策略中的斜体占位符文本
替换为您自己的信息。然后,按照创建策略或编辑策略中的说明操作。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:*", "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalTag/
department
": "hr
" } } } ] }
aws:PrincipalIsAWSService
使用此密钥可检查对您资源的调用是否直接由 Amazon 服务主体提出。例如,Amazon CloudTrail 使用服务主体 cloudtrail.amazonaws.com
将日志写入 Amazon S3 存储桶。当服务使用服务主体对资源执行直接操作时,请求上下文密钥将设置为 true。如果服务使用 IAM 主体的凭证代表主体发出请求时,上下文密钥设置为 false。如果服务使用服务角色或服务相关角色代表主体进行调用,则请求也会被设为 false。
-
可用性 — 此密钥存在于所有使用 Amazon 凭证的签名 API 请求的请求上下文中。匿名请求不包括此键。
-
数据类型 – 布尔值
-
值类型— 单值
您可以使用此条件键限制对可信身份和预期网络位置的访问,同时安全地授予对 Amazon 服务的访问权限。
在以下 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
/AmazonLogs/AccountNumber
/*", "Condition": { "StringNotEqualsIfExists": { "aws:SourceVpc": "vpc-111bbb22" }, "BoolIfExists": { "aws:PrincipalIsAWSService": "false" } } } ] }
aws:PrincipalServiceName
使用此密钥可以将策略中的服务主体名称与正在向您的资源发出请求的服务主体进行比较。您可以使用此密钥来检查此调用是否由特定的服务主体提出。当服务主体向您的资源发出直接请求时,aws:PrincipalServiceName
密钥将包含服务主体的名称。例如,Amazon CloudTrail 服务主体的名称是 cloudtrail.amazonaws.com
。
-
可用性 — 当调用由 Amazon 服务主体提出时,此密钥将存在于请求中。此密钥不会在任何其他情况中出现,包括以下情况:
-
如果服务使用服务角色或服务相关角色代表主体进行调用。
-
如果服务使用 IAM 主体的凭证代表主体发出请求。
-
如果调用是由 IAM 主体直接发出的。
-
如果调用是由匿名请求者发出的。
-
-
数据类型 – 字符串
-
值类型— 单值
您可以使用此条件键限制对可信身份和预期网络位置的访问,同时安全地授予对 Amazon 服务的访问权限。
在以下 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
/AmazonLogs/AccountNumber
/*", "Condition": { "StringNotEqualsIfExists": { "aws:SourceVpc": "vpc-111bbb22", "aws:PrincipalServiceName": "cloudtrail.amazonaws.com" } } } ] }
aws:PrincipalServiceNamesList
此密钥提供了属于此服务的所有服务主体名称列表。这是一个高级条件键。您可以用它来限制服务仅从特定地区访问您的资源。某些服务可能会创建区域服务主体,以指示特定区域内服务的特定实例。您可以将对资源的访问限制为服务的特定实例。当服务主体向您的资源发出直接请求时,aws:PrincipalServiceNamesList
会包含与服务的区域实例关联的所有服务主体名称的无序列表。
-
可用性 — 当调用由 Amazon 服务主体提出时,此密钥将存在于请求中。此密钥不会在任何其他情况中出现,包括以下情况:
-
如果服务使用服务角色或服务相关角色代表主体进行调用。
-
如果服务使用 IAM 主体的凭证代表主体发出请求。
-
如果调用是由 IAM 主体直接发出的。
-
如果调用是由匿名请求者发出的。
-
-
数据类型 – 字符串(列表)
-
值类型— 多值
aws:PrincipalServiceNamesList
是一个多值条件键。多值键在请求上下文中可以有多个值。对于此键,您必须将 ForAnyValue
或者 ForAllValues
集合运算符与字符串条件运算符搭配使用。有关多值条件键的更多信息,请参阅多值上下文键。
aws:PrincipalType
使用此键可将发出请求的主体的类型与您在策略中指定的主体类型进行比较。有关更多信息,请参阅 如何指定主体。有关 principal
密钥值的具体示例,请参阅 主体键值。
-
Availability(可用性)– 此键包含在所有请求(包括匿名请求)的请求上下文中。
-
数据类型 – 字符串
-
值类型 — 单值
aws:userid
使用此键可将请求者的主体标识符与您在策略中指定的 ID 进行比较。对于 IAM 用户,请求上下文值是用户 ID。对于 IAM 角色,此值的格式可能有所不同。有关如何为不同的主体显示信息的详细信息,请参阅如何指定主体。有关 principal
密钥值的具体示例,请参阅 主体键值。
-
Availability(可用性)– 此键包含在所有请求(包括匿名请求)的请求上下文中。
-
数据类型 – 字符串
-
值类型— 单值
aws:username
使用此键可将请求者的用户名与您在策略中指定的用户名进行比较。有关如何为不同的主体显示信息的详细信息,请参阅如何指定主体。有关 principal
密钥值的具体示例,请参阅 主体键值。
-
可用性 - 此键始终包含在 IAM 用户的请求上下文中。匿名请求和使用 Amazon Web Services 账户根用户 或 IAM 角色发出的请求不包含此键。使用 IAM Identity Center 凭证发出的请求不会在上下文中包含此键。
-
数据类型 – 字符串
-
值类型 — 单值
角色会话的属性
使用以下条件键来比较生成会话时角色会话的属性。只有拥有角色会话或联合用户凭证的主体发出请求时,这些条件键才可用。这些条件键的值嵌入角色的会话令牌中。
角色是一种主体。您还可以使用 主体的属性 部分中的条件键在角色发出请求时评估角色的属性。
目录
- aws:FederatedProvider
- aws:TokenIssueTime
- aws:MultiFactorAuthAge
- aws:MultiFactorAuthPresent
- aws:ChatbotSourceArn
- aws:Ec2InstanceSourceVpc
- aws:Ec2InstanceSourcePrivateIPv4
- aws:SourceIdentity
- ec2:RoleDelivery
- ec2:SourceInstanceArn
- glue:RoleAssumedBy
- glue:CredentialIssuingService
- lambda:SourceFunctionArn
- ssm:SourceInstanceArn
- identitystore:UserId
aws:FederatedProvider
使用此密钥将主体的发布身份提供程序 (IdP) 与您在策略中指定的 IdP 进行比较。这意味着 IAM 角色使用 AssumeRoleWithWebIdentity
Amazon STS 操作代入。使用生成的角色会话的临时证书发出请求时,请求上下文将标识对原始联合身份进行身份验证的 IdP。
-
可用性 — 当主体是角色会话主体并且该会话是使用
AssumeRoleWithWebIdentity
发出的时候,此密钥就存在。 -
数据类型 – 字符串
-
值类型— 单值
例如,如果用户已通过 Amazon Cognito 进行身份验证,则请求上下文将包含值 cognito-identity.amazonaws.com
。同样,如果已通过 Login with Amazon 对用户进行身份验证,则请求上下文将包含值 www.amazon.com
。
您可以使用任何可用的单值条件密钥作为变量。以下示例基于资源的策略使用 aws:FederatedProvider
密钥作为资源的 ARN 中的策略变量。此策略允许使用 IdP 进行身份验证的任何主体,使用特定于发布身份提供程序的路径从 Amazon S3 存储桶获取对象。
aws:TokenIssueTime
使用此键可将临时安全凭证的颁发日期和时间与您在策略中指定的日期和时间进行比较。
-
Availability(可用性)- 仅在主体使用临时凭证发出请求时,才将此键包含在请求上下文中。使用访问密钥发出的 Amazon CLI、Amazon API 或 Amazon 开发工具包请求中未提供此键。
-
数据类型 – 日期
-
值类型— 单值
要了解哪些服务支持使用临时凭证,请参阅使用 IAM 的Amazon服务。
aws:MultiFactorAuthAge
使用此键可将自使用 MFA 向请求主体授权以来的秒数与您在策略中指定的数量进行比较。有关 MFA 的更多信息,请参阅 IAM 中的 Amazon 多重身份验证。
重要
对于联合身份或使用访问密钥签署 Amazon CLI、Amazon API 或 Amazon SDK 请求而发出的请求,此条件键不存在。要了解有关使用临时安全凭证为 API 操作添加 MFA 保护的更多信息,请参阅 使用 MFA 保护 API 访问。
要检查是否使用 MFA 来验证 IAM 联合身份,您可以将身份提供者的身份验证方法作为会话标签传递给 Amazon。有关详细信息,请参阅在 Amazon STS 中传递会话标签。要对 IAM Identity Center 身份强制执行 MFA,您可以启用访问控制属性,以使用身份提供者的身份验证方法将 SAML 断言声明传递给 IAM Identity Center。
aws:MultiFactorAuthPresent
使用此键可检查是否已使用多重身份验证(MFA)来验证发出请求的临时安全凭证。
重要
对于联合身份或使用访问密钥签署 Amazon CLI、Amazon API 或 Amazon SDK 请求而发出的请求,此条件键不存在。要了解有关使用临时安全凭证为 API 操作添加 MFA 保护的更多信息,请参阅 使用 MFA 保护 API 访问。
要检查是否使用 MFA 来验证 IAM 联合身份,您可以将身份提供者的身份验证方法作为会话标签传递给 Amazon。有关详细信息,请参阅在 Amazon STS 中传递会话标签。要对 IAM Identity Center 身份强制执行 MFA,您可以启用访问控制属性,以使用身份提供者的身份验证方法将 SAML 断言声明传递给 IAM Identity Center。
-
Availability(可用性)- 仅在主体使用临时凭证发出请求时,才将此键包含在请求上下文中。带 MFA 条件的策略可附加到:
-
对于 IAM 用户或组:
-
Amazon S3 存储桶、Amazon SQS 队列或 Amazon SNS 主题等资源
-
可由用户担任的 IAM 角色的信任策略
-
-
数据类型 – 布尔值
-
值类型 — 单值
临时凭证用于验证具有来自 AssumeRole 或 GetSessionToken 的临时令牌的 IAM 角色和 IAM 用户,以及 Amazon Web Services Management Console 用户。
IAM 用户访问密钥是长期凭证,但在某些情况下,Amazon 会代表 IAM 用户创建临时凭证以执行操作。在这些情况下,aws:MultiFactorAuthPresent
密钥存在于请求中,并设置为值 false
。有两种常见情况可能会发生这种情形:
-
Amazon Web Services Management Console中的 IAM 用户在不知情的情况下使用了临时凭证。用户使用其作为长期凭证的用户名和密码登录控制台。但在后台,控制台代表用户生成临时凭证。
-
如果 IAM 用户对某个 Amazon 服务进行调用,则该服务将重新使用该用户的凭证向其他服务发出另一个请求。例如,当调用 Athena 以访问 Amazon S3 存储桶或使用 Amazon CloudFormation 创建 Amazon EC2 实例时。对于后续请求,Amazon 使用临时凭证。
要了解哪些服务支持使用临时凭证,请参阅使用 IAM 的Amazon服务。
在使用长期凭证(例如,用户访问密钥对)调用 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" } }
Deny
、BoolIfExists
和 false
的组合将拒绝未使用 MFA 进行身份验证的请求。具体来说,它拒绝来自不包含 MFA 的临时凭证的请求。它还拒绝使用长期凭证发出的请求,例如使用访问密钥执行的 Amazon CLI 或 Amazon API 操作。*IfExists
运算符用于检查 aws:MultiFactorAuthPresent
键是否存在以及它是否可以存在(由其存在性指示)。当您要拒绝未使用 MFA 进行身份验证的任何请求时,可使用此运算符。这是更安全的,但可能会中断使用访问密钥访问 Amazon CLI 或 Amazon API 的任何代码或脚本。
替代组合
您还可以使用 BoolIfExists 运算符以允许通过 MFA 进行身份验证的请求以及使用长期凭证发出的 Amazon CLI 或 Amazon API 请求。
"Effect" : "Allow", "Condition" : { "BoolIfExists" : { "aws:MultiFactorAuthPresent" : "true" } }
此条件将匹配键存在或键不存在的情况。Allow
、BoolIfExists
和 true
的组合允许已使用 MFA 进行身份验证的请求或无法使用 MFA 进行身份验证的请求。这意味着,在请求者使用其长期访问密钥时,允许执行 Amazon CLI、Amazon API 和 Amazon 开发工具包操作。该组合不允许来自临时凭证的请求,这些凭证可能包含 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
使用此键,可将主体设置的来源聊天配置 ARN 跟您在与频道配置关联的 IAM 角色策略中指定的聊天配置 ARN 进行比较。您可以根据 Amazon Chatbot 发起的代入角色会话对请求进行授权。
-
可用性 – 每次代入角色会话时,此键都将包含在 Amazon Chatbot 服务发起的请求上下文中。键值是聊天配置 ARN,例如从聊天频道运行 Amazon 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:Ec2InstanceSourceVpc
和 aws: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 实例角色发出请求时允许 Amazon 对请求进行授权。例如,当您从 Amazon EC2 实例向加密的 Amazon S3 存储桶发出请求时,Amazon S3 会代表您调用 Amazon KMS。向 Amazon 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
使用此密钥可将主体设置的源身份与您在策略中指定的源身份进行比较。
-
可用性 — 在使用任何 Amazon STS 担任角色 CLI 命令或 Amazon STS
AssumeRole
API 操作担任角色时设置好源身份后,此密钥将会被包含在请求中。 -
数据类型 – 字符串
-
值类型— 单值
您可以在策略中使用此密钥来允许 Amazon 中的主体操作,这些主体在担任角色时设置了源身份。角色指定源身份的活动显示在 Amazon CloudTrail。这使管理员能够更轻松地确定什么角色在 Amazon 中执行了操作。
与 sts:RoleSessionName 不同,在设置源身份后,无法更改该值。它存在于角色执行的所有操作的请求上下文中。当您使用会话凭证担任另一个角色时,该值将保留到后续角色会话中。从一个角色代入另一个角色的过程称为角色链。
当主体使用任何 Amazon STS 担任角色 CLI 命令或 Amazon 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 请求:对于任何给定请求,PUT
或 GET
标头(对于 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
对于策略示例,请参阅允许特定实例查看其他 Amazon 服务中的资源。
glue:RoleAssumedBy
Amazon Glue 服务为每个 Amazon API 请求设置此条件键,其中 Amazon Glue 使用服务角色代表客户发出请求(不是通过作业或开发人员端点,而是直接通过 Amazon Glue 服务发出请求)。使用此键验证对 Amazon 资源的调用是否来自 Amazon Glue 服务。
-
可用性 – 当 Amazon Glue 代表客户使用服务角色发出请求时,此键包含在请求上下文中。
-
数据类型 – 字符串
-
值类型 — 单值
-
示例值 – 此键始终设置为
glue.amazonaws.com
。
以下示例添加了一个允许 Amazon 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
Amazon Glue 服务使用来自作业或开发人员端点的服务角色为每个 Amazon API 请求设置此键。使用此键验证对 Amazon 资源的调用是来自 Amazon Glue 作业还是开发人员端点。
-
可用性 – 当 Amazon Glue 发出来自作业或开发人员端点的请求时,此键包含在请求上下文中。
-
数据类型 – 字符串
-
值类型 — 单值
-
示例值 – 此键始终设置为
glue.amazonaws.com
。
以下示例添加一个附加到 Amazon Glue 作业使用的 IAM 角色的条件。这确保了可以基于角色会话是否用于 Amazon 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 服务会为来自函数执行环境的每个 Amazon API 请求设置此键。使用此键可验证对 Amazon 资源的调用是否来自特定 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" } } } ] }
有关更多信息,请参阅《Amazon Lambda 开发人员指南》中的使用 Lambda 执行环境凭证。
ssm:SourceInstanceArn
使用此键标识将 IAM 角色凭证传递到的 Amazon Systems Manager 托管实例 ARN。请求来自使用与 Amazon EC2 实例配置文件关联的 IAM 角色的托管实例时,此条件键不存在。
-
可用性 – 每次将角色凭证传递到 Amazon 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
您可以使用 Amazon CLI、Amazon API 或 Amazon 软件开发工具包向 GetUserId API 发出请求,以在 IAM Identity Center 查找用户的用户 ID。
网络的属性
使用以下条件键可将有关请求源自或传递网络的详细信息与您在策略中指定的网络属性进行比较。
aws:SourceIp
使用此键可将请求者的 IP 地址与您在策略中指定的 IP 地址进行比较。aws:SourceIp
条件键只能用于公有 IP 地址范围。
-
可用性 – 此键将包含在请求上下文中,但请求者使用 VPC 端点发出请求时除外。
-
数据类型 – IP 地址
-
值类型— 单值
可在策略中使用 aws:SourceIp
条件键以仅允许主体从指定的 IP 范围发出请求。
注意
aws:SourceIp
同时支持 IPv4 和 IPv6 地址或 IP 地址范围。有关支持 IPv6 的 Amazon Web Services 服务 列表,请参阅《Amazon VPC 用户指南》中支持 IPv6 的 Amazon Web Services 服务。
例如,您可以将以下基于身份的策略附加到 IAM 角色。如果用户从指定的 IPv4 地址范围进行调用,此策略允许用户将对象放入 amzn-s3-demo-bucket3
Amazon S3 存储桶。此策略还允许使用 转发访问会话 的 Amazon 服务代表您执行此操作。
{ "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 地址范围之前,请验证您正在使用的 Amazon Web Services 服务 是否支持 IPv6。有关支持 IPv6 的 Amazon Web Services 服务 列表,请参阅《Amazon VPC 用户指南》中支持 IPv6 的 Amazon Web Services 服务。
{ "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 端点的更多信息,请参阅《Amazon 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)代表角色发出请求的 Amazon Web Services 服务 发出的。与 aws:SourceIp 不同的是,必须使用 aws:ViaAWSService 或 aws: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:ViaAWSService 或 aws:CalledVia 来允许 Amazon Web Services 服务 使用转发访问会话(FAS)发出的请求。这是因为初始请求的源 VPC 端点未被保留。
aws:VpcSourceIp
使用此键可将从中发出请求的 IP 地址与您在策略中指定的 IP 地址进行比较。在策略中,键仅在请求来自指定的 IP 地址并经过 VPC 端点时进行匹配。
-
可用性 – 仅在使用 VPC 端点发出请求时,才将此键包含在请求上下文中。
-
数据类型 – IP 地址
-
值类型 — 单值
有关更多信息,请参阅《Amazon VPC 用户指南》中的使用端点策略控制对 VPC 端点的访问。与使用 aws:SourceVpc 类似,必须使用 aws:ViaAWSService 或 aws:CalledVia 来允许 Amazon Web Services 服务 使用转发访问会话(FAS)发出的请求。这是因为使用 VPC 端点发出的初始请求的源 IP 不会保留在 FAS 请求中。
注意
aws:VpcSourceIp
同时支持 IPv4 和 IPv6 地址或 IP 地址范围。有关支持 IPv6 的 Amazon Web Services 服务 列表,请参阅《Amazon VPC 用户指南》中支持 IPv6 的 Amazon Web Services 服务。
aws:VpcSourceIp
条件键应始终与 aws:SourceVpc
或 aws:SourceVpce
条件键结合使用。否则,策略可能会允许来自使用相同或重叠的 IP CIDR 的意外 VPC 的 API 调用。之所以发生这种情况,是因为来自两个不相关的 VPC 的 IP CIDR 可能相同或重叠。相反,应在策略中使用 VPC ID 或 VPC 端点 ID,因为它们具有全局唯一的标识符。这些唯一标识符可确保不会出现意外结果。
资源的属性
使用以下条件键可将有关请求目标资源的详细信息与您在策略中指定的资源属性进行比较。
aws:ResourceAccount
使用此键,将策略中所请求的资源所有者的 Amazon Web Services 账户 ID 与资源账户进行比较。然后,您可以根据拥有该资源的账户来允许或拒绝对该资源的访问。
-
Availability(可用性)– 对于大多数服务操作,此键始终包含在请求上下文中。以下操作不支持此键:
-
Amazon 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
– EventBridgePutEvents
将调用其他账户中的事件总线,前提是该事件总线已在 2023 年 3 月 2 日之前被配置为跨账户 EventBridge 目标。有关更多信息,请参阅《Amazon EventBridge 用户指南》中的 授予权限以允许来自其他 Amazon 账户的事件。
-
-
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
-
-
Amazon Security Hub
-
securityhub:AcceptAdministratorInvitation
-
-
-
数据类型 – 字符串
-
值类型 — 单值
注意
有关上述不支持的操作的其他注意事项,请参阅 Data Perimeter Policy Examples
此键等于包含请求中受评估资源的账户的 Amazon Web Services 账户 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 中不显示。
使用 Amazon 控制台、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
" ] } } } ] }
此策略会拒绝对特定 Amazon 服务所有资源的访问,除非指定 Amazon Web Services 账户 拥有该资源。
注意
某些 Amazon Web Services 服务 需要访问托管在其他 Amazon 中的 Amazon Web Services 账户 所拥有的资源。在基于身份的策略中使用 aws:ResourceAccount
可能会影响您的身份访问这些资源的能力。
某些 Amazon 服务,例如 Amazon Web Services Data Exchange,依赖于对您的 Amazon Web Services 账户 以外的资源的访问来进行正常操作。如果您在策略中使用元素 aws:ResourceAccount
,请在策略中包含额外声明来为这些服务创建豁免。示例策略 Amazon:拒绝访问您账户之外的 Amazon S3 资源,Amazon Web Services Data Exchange 除外。 演示了如何根据资源账户拒绝访问,同时定义对于服务拥有的资源的例外情况。
将此策略示例用作创建自己的自定义策略的模板。参阅服务文档以了解更多信息。
aws:ResourceOrgPaths
使用此键来比较所访问资源的 Amazon Organizations 路径与策略中的路径。在策略中,此条件键可确保该资源属于 Amazon Organizations 中指定组织根或组织单位(OU)的账户成员。Amazon Organizations 路径是 Organizations 实体结构的文本表示形式。有关使用和了解路径的更多信息,请参阅 了解 Amazon Organizations 实体路径
-
Availability(可用性)- 仅在拥有资源的账户是企业成员时,才将此键包含在请求上下文中。此全局条件键不支持以下操作:
-
Amazon 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
– EventBridgePutEvents
将调用其他账户中的事件总线,前提是该事件总线已在 2023 年 3 月 2 日之前被配置为跨账户 EventBridge 目标。有关更多信息,请参阅《Amazon EventBridge 用户指南》中的 授予权限以允许来自其他 Amazon 账户的事件。
-
-
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
-
-
Amazon 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/"] }}
注意
某些 Amazon Web Services 服务 需要访问托管在其他 Amazon 中的 Amazon Web Services 账户 所拥有的资源。在基于身份的策略中使用 aws:ResourceOrgPaths
可能会影响您的身份访问这些资源的能力。
某些 Amazon 服务,例如 Amazon Web Services Data Exchange,依赖于对您的 Amazon Web Services 账户 以外的资源的访问来进行正常操作。如果您在策略中使用 aws:ResourceOrgPaths
键,请在策略中包含额外声明来为这些服务创建豁免。示例策略 Amazon:拒绝访问您账户之外的 Amazon S3 资源,Amazon Web Services Data Exchange 除外。 演示了如何根据资源账户拒绝访问,同时定义对于服务拥有的资源的例外情况。您可以使用 aws:ResourceOrgPaths
键来创建类似的策略,限制对企业部门(OU)内部资源的访问,同时包括服务拥有的资源。
将此策略示例用作创建自己的自定义策略的模板。参阅服务文档以了解更多信息。
aws:ResourceOrgID
使用此键可将被请求资源所属的 Amazon Organizations 中组织的标识符与策略中指定的标识符进行比较。
-
Availability(可用性)- 仅在拥有资源的账户是企业成员时,才将此键包含在请求上下文中。此全局条件键不支持以下操作:
-
Amazon 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
– EventBridgePutEvents
将调用其他账户中的事件总线,前提是该事件总线已在 2023 年 3 月 2 日之前被配置为跨账户 EventBridge 目标。有关更多信息,请参阅《Amazon EventBridge 用户指南》中的 授予权限以允许来自其他 Amazon 账户的事件。
-
-
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
-
-
Amazon 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}" } } } }
注意
某些 Amazon Web Services 服务 需要访问托管在其他 Amazon 中的 Amazon Web Services 账户 所拥有的资源。在基于身份的策略中使用 aws:ResourceOrgID
可能会影响您的身份访问这些资源的能力。
某些 Amazon 服务,例如 Amazon Web Services Data Exchange,依赖于对您的 Amazon Web Services 账户 以外的资源的访问来进行正常操作。如果您在策略中使用 aws:ResourceOrgID
键,请在策略中包含额外声明来为这些服务创建豁免。示例策略 Amazon:拒绝访问您账户之外的 Amazon S3 资源,Amazon Web Services Data Exchange 除外。 演示了如何根据资源账户拒绝访问,同时定义对于服务拥有的资源的例外情况。您可以使用 aws:ResourceOrgID
键来创建类似的策略,限制对企业内部资源的访问,同时包括服务拥有的资源。
将此策略示例用作创建自己的自定义策略的模板。参阅服务文档以了解更多信息。
aws:ResourceTag/tag-key
使用此键可将您在策略中指定的标签键/值对与附加到资源的键/值对进行比较。例如,您可能会要求只有在资源具有附加的标签键 "Dept"
和值 "Marketing"
时才允许访问该资源。有关更多信息,请参阅 控制对 Amazon 资源的访问。
该上下文密钥的格式为 "aws:ResourceTag/
,其中 tag-key
":"tag-value
"tag-key
和 tag-value
是标签键值对。标签密钥和值不区分大小写。这意味着,如果您在策略的条件元素中指定 "aws:ResourceTag/TagKey1": "Value1"
,则条件将匹配名为 TagKey1
或 tagkey1
的资源标签键,但不会同时匹配两者。
有关使用 aws:ResourceTag
键控制对 IAM 资源的访问的示例,请参阅 控制对 Amazon 资源的访问。
有关使用 aws:ResourceTag
键控制对其他 Amazon 资源的访问的示例,请参阅 使用标签控制对 Amazon 资源的访问。
有关使用 aws:ResourceTag
条件键进行基于属性的访问控制 (ABAC) 的教程,请参阅 IAM 教程:根据标签定义访问 Amazon 资源的权限。
请求的属性
使用以下条件键可将有关请求本身以及请求内容的详细信息与您在策略中指定的请求属性进行比较。
目录
aws:CalledVia
使用此键可以将策略中的服务与代表 IAM 主体(用户或角色)发出请求的服务进行比较。当主体向 Amazon 服务发出请求时,该服务可能会使用主体的凭证向其他服务发出后续请求。aws:CalledVia
键包含链中代表主体发出请求的每个服务的有序列表。
例如,您可以使用 Amazon CloudFormation 从 Amazon DynamoDB 表中读取和写入。然后,DynamoDB 使用 Amazon Key Management Service (Amazon KMS) 提供的加密操作。
-
可用性 - 当支持
aws:CalledVia
的服务使用 IAM 主体的凭证向其他服务发出请求时,此键会出现在请求中。如果服务使用服务角色或服务相关角色代表主体进行调用,则此键不存在。当主体直接进行调用时,此键也不存在。 -
数据类型 – 字符串(列表)
-
值类型— 多值
要在策略中使用 aws:CalledVia
条件键,您必须提供服务主体以允许或拒绝 Amazon 服务请求。Amazon 支持将以下服务主体用于 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
条件键。该条件键支持 Amazon 服务。
aws:CalledVia
键是多值键。但是,您不能在条件下强制使用此键进行排序。使用上面的示例,User 1(用户 1)向 Amazon CloudFormation 发出请求,然后依次调用 DynamoDB 和调用 Amazon KMS。这是三个单独的请求。对 Amazon KMS 的最终调用是由用户 1 通过 Amazon CloudFormation,然后通过 DynamoDB 进行的。
在这种情况下,请求上下文中的 aws:CalledVia
键包括 cloudformation.amazonaws.com
和 dynamodb.amazonaws.com
(按照该顺序)。如果您只关心调用是在请求链中的某个地方通过 DynamoDB 进行的,则可以在策略中使用此条件键。
例如,以下策略允许管理名为 my-example-key
的 Amazon KMS 键,但前提为 DynamoDB 是发出请求的服务之一。ForAnyValue:StringEquals
条件运算符确保 DynamoDB 是发出调用的服务之一。如果主体直接调用 Amazon 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:CalledViaFirst
和 aws:CalledViaLast
键。例如,以下策略允许管理 Amazon KMS 中名为 my-example-key
的键。仅当链中包含多个请求时,才允许执行这些 Amazon KMS 操作。第一个请求必须通过 Amazon 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:CalledViaFirst
和 aws:CalledViaLast
键。它们表示在请求链中进行调用的第一个和最后一个服务。例如,假定 Amazon CloudFormation 调用另一个名为 X Service
的服务,然后依次调用 DynamoDB,然后调用 Amazon KMS。对 Amazon KMS 的最终调用是由 User 1
依次通过 Amazon CloudFormation、X Service
和 DynamoDB 进行的。首先通过 DynamoDB 进行调用,最后通过 Amazon CloudFormation 进行调用。
aws:CalledViaFirst
使用此键可以将策略中的服务与代表 IAM 主体(用户或角色)发出请求的第一个服务 进行比较。有关更多信息,请参阅 aws:CalledVia
。
-
Availability(可用性)- 当服务使用 IAM 主体的凭证向其他服务发出至少一个其他请求时,此键会出现在请求中。如果服务使用服务角色或服务相关角色代表主体进行调用,则此键不存在。当主体直接进行调用时,此键也不存在。
-
数据类型 – 字符串
-
值类型— 单值
aws:CalledViaLast
使用此键可以将策略中的服务与代表 IAM 主体(用户或角色)发出请求的最后一个服务进行比较。有关更多信息,请参阅 aws:CalledVia
。
-
Availability(可用性)- 当服务使用 IAM 主体的凭证向其他服务发出至少一个其他请求时,此键会出现在请求中。如果服务使用服务角色或服务相关角色代表主体进行调用,则此键不存在。当主体直接进行调用时,此键也不存在。
-
数据类型 – 字符串
-
值类型 — 单值
aws:ViaAWSService
使用此键检查 Amazon Web Services 服务 是否使用转发访问会话(FAS)代表你向另一项服务发出请求。
当服务使用转发访问会话代表原始 IAM 主体发出请求时,请求上下文键会返回 true
。当主体直接进行调用时,请求上下文密钥也会返回 false
。
-
Availability(可用性)- 此键始终包含在请求上下文中。
-
数据类型 – 布尔值
-
值类型— 单值
aws:CurrentTime
使用此键可将请求的日期和时间与您在策略中指定的日期和时间进行比较。要查看使用此条件键的示例策略,请参阅Amazon:允许基于日期和时间进行访问。
-
Availability(可用性)- 此键始终包含在请求上下文中。
-
数据类型 – 日期
-
值类型— 单值
aws:EpochTime
使用此键可将请求的日期和时间(以纪元或 Unix 时间表示)与您在策略中指定的值进行比较。此键还接受自 1970 年 1 月 1 日以来的秒数。
aws:referer
使用此键可将在客户端浏览器中引用请求的站点与您在策略中指定的引用站点进行比较。aws:referer
请求上下文值是由调用方在 HTTP 标头中提供的。当您在网页上选择链接时,Referer
标题将包含在 Web 浏览器请求中。Referer
标题包含选定链接的网页的 URL。
-
Availability(可用性)- 仅当通过从浏览器中的网页 URL 链接来调用对 Amazon 资源的请求时,才将此键包含在请求上下文中。编程请求不包括此键,因为它不使用浏览器链接即可访问 Amazon 资源。
-
数据类型 – 字符串
-
值类型— 单值
例如,您可以直接使用 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
不应用于阻止未经授权方直接发出 Amazon 请求。提供它只是为了允许客户保护其数字内容(如存储在 Amazon S3 中的内容),以免在未经授权的第三方站点上引用。
aws:RequestedRegion
使用此键可将已在请求中调用的 Amazon 区域与您在策略中指定的区域进行比较。您可以使用此全局条件键来控制可请求的区域。要查看每个服务的 Amazon 区域,请参阅《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
条件键来控制适用区域。
您可以使用该上下文密钥将访问限制为一组给定区域中的 Amazon 服务。例如,以下策略允许用户查看 Amazon Web Services 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"
值。有关更多信息,请参阅 在 Amazon 请求期间控制访问。
-
Availability(可用性)– 当在请求中传递标签键值对时,将此键包含在请求上下文中。在请求中传递多个标签时,每个标签键/值对均有一个上下文密钥。
-
数据类型 – 字符串
-
值类型— 单值
该上下文密钥的格式为 "aws:RequestTag/
,其中 tag-key
":"tag-value
"tag-key
和 tag-value
是标签键值对。标签密钥和值不区分大小写。这意味着,如果您在策略的条件元素中指定 "aws:RequestTag/TagKey1": "Value1"
,则条件将匹配名为 TagKey1
或 tagkey1
的请求标签键,但不会同时匹配两者。
这个例子表明,虽然该键是单值的,但如果键不同,您仍然可以在请求中使用多个键值对。
{ "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"]
)。
由于可在一个请求中包含多个标签键/值对,因此,请求内容可以是多值请求。在此情况下,您必须使用 ForAllValues
或 ForAnyValue
集合运算符。有关更多信息,请参阅 多值上下文键。
某些服务支持同时使用标记和资源操作,例如创建、修改或删除资源。要允许在单次调用中同时使用标记和操作,您必须创建同时包含标记操作和资源修改操作的策略。然后,您可以使用 aws:TagKeys
条件键强制在请求中使用特定标签键。例如,要在某人创建 Amazon EC2 快照时限制标签,您必须在策略中包含 ec2:CreateSnapshot
创建操作和 ec2:CreateTags
标记操作。要查看此使用 aws:TagKeys
场景的策略,请参阅《Amazon EC2 用户指南》中的创建具有标签的快照。
aws:SecureTransport
使用此键可检查是否已使用 TLS 发送请求。请求上下文将返回 true
或 false
。在策略中,只能在使用 TLS 发送请求时允许特定操作。
-
Availability(可用性)- 此键始终包含在请求上下文中。
-
数据类型 – 布尔值
-
值类型 — 单值
aws:SourceArn
使用该键可将发出服务到服务请求的资源的 Amazon 资源名称(ARN)与您在策略中指定的 ARN 进行比较,但仅当请求由 Amazon 服务主体发出时才有效。源的 ARN 包含账户 ID 时,不必将 aws:SourceAccount
与 aws:SourceArn
结合使用。
此键不适用于发出请求的主体的 ARN。请改用aws:PrincipalArn
。
-
可用性 – 仅当 Amazon 服务主体代表配置触发服务到服务请求的资源直接调用您的资源时,才会将该键包含在请求上下文中。发出调用的服务将原始资源的 ARN 传递给被调用的服务。
以下服务集成不支持该全局条件键:
发出调用的服务(服务主体) 被调用的服务(基于资源的策略) 描述 logdelivery.elb.amazonaws.com Amazon S3 存储桶 在 Amazon S3 桶中启用 Elastic Load Balancing 访问日志记录 logdelivery.elasticloadbalancing.amazonaws.com Amazon S3 存储桶 在 Amazon S3 桶中启用 Elastic Load Balancing 访问日志记录 注意
并非所有与 Amazon Security Token Service(Amazon STS)和 Amazon Key Management Service(Amazon KMS)的服务集成均受支持。有关更多信息,请参阅发出调用的服务的文档。对 Amazon Web Services 服务 通过 KMS 密钥授权使用的键使用 KMS 密钥政策中
aws:SourceArn
可能会导致意外行为。 -
数据类型 – ARN、字符串
-
值类型— 单值
您可以使用此条件键来防止 Amazon 服务在服务之间执行事务时被用作混淆代理人。仅在 Principal
作为 Amazon Web Services 服务 主体的基于资源的策略中使用该键。将此条件键的值设置为请求中资源的 ARN。例如,当 Amazon S3 桶更新触发 Amazon SNS 主题发布时,Amazon S3 服务将调用 sns:Publish
API 操作。在允许 sns:Publish
操作的主题策略中,将条件键的值设置为 Amazon S3 桶的 ARN。有关如何以及建议何时使用此条件键的信息,请参阅您正在使用的 Amazon 服务的文档。
aws:SourceAccount
使用该键可将发出服务到服务请求的资源的账户 ID 与您在策略中指定的账户 ID 进行比较,但仅当请求由 Amazon 服务主体发出时才有效。
-
可用性 – 仅当 Amazon 服务主体代表配置触发服务到服务请求的资源直接调用您的资源时,才会将该键包含在请求上下文中。发出调用的服务将原始资源的账户 ID 传递给被调用的服务。
以下服务集成不支持该全局条件键:
发出调用的服务(服务主体) 被调用的服务(基于资源的策略) 描述 logdelivery.elb.amazonaws.com Amazon S3 存储桶 在 Amazon S3 桶中启用 Elastic Load Balancing 访问日志记录 logdelivery.elasticloadbalancing.amazonaws.com Amazon S3 存储桶 在 Amazon S3 桶中启用 Elastic Load Balancing 访问日志记录 注意
并非所有与 Amazon Security Token Service(Amazon STS)和 Amazon Key Management Service(Amazon KMS)的服务集成均受支持。有关更多信息,请参阅发出调用的服务的文档。对 Amazon Web Services 服务 通过 KMS 密钥授权使用的键使用 KMS 密钥政策中
aws:SourceAccount
可能会导致意外行为。 -
数据类型 – 字符串
-
值类型— 单值
您可以使用此条件键来防止 Amazon 服务在服务之间执行事务时被用作混淆代理人。仅在 Principal
作为 Amazon Web Services 服务 主体的基于资源的策略中使用该键。将此条件键的值设置为请求中资源的账户 ID。例如,当 Amazon S3 桶更新触发 Amazon SNS 主题发布时,Amazon S3 服务将调用 sns:Publish
API 操作。在允许 sns:Publish
操作的主题策略中,将条件键的值设置为 Amazon S3 桶的账户 ID。有关如何以及建议何时使用此条件键的信息,请参阅您正在使用的 Amazon 服务的文档。
aws:SourceOrgPaths
使用该键可将发出服务到服务请求的资源的 Amazon Organizations 路径与您在策略中指定的组织路径进行比较,但仅当请求由 Amazon 服务主体发出时才有效。 Organizations 路径是 Organizations 实体结构的文本表示形式。有关使用和了解路径的更多信息,请参阅了解 Amazon Organizations 实体路径。
-
可用性 – 仅当 Amazon 服务主体代表属于组织成员的账户拥有的资源直接调用您的资源时,才会将该键包含在请求上下文中。发出调用的服务将原始资源的组织路径传递给被调用的服务。
以下服务集成不支持该全局条件键:
发出调用的服务(服务主体) 被调用的服务(基于资源的策略) 描述 logdelivery.elb.amazonaws.com Amazon S3 存储桶 在 Amazon S3 桶中启用 Elastic Load Balancing 访问日志记录 logdelivery.elasticloadbalancing.amazonaws.com Amazon S3 存储桶 在 Amazon S3 桶中启用 Elastic Load Balancing 访问日志记录 所有服务主体 Amazon Lex 机器人 允许 Amazon Web Services 服务 以使用 Amazon Lex 机器人 注意
并非所有与 Amazon Security Token Service(Amazon STS)和 Amazon Key Management Service(Amazon KMS)的服务集成均受支持。有关更多信息,请参阅发出调用的服务的文档。对 Amazon Web Services 服务 通过 KMS 密钥授权使用的键使用 KMS 密钥政策中
aws:SourceOrgPaths
可能会导致意外行为。 -
数据类型 – 字符串(列表)
-
值类型— 多值
您可以使用此条件键来防止 Amazon 服务在服务之间执行事务时被用作混淆代理人。仅在 Principal
作为 Amazon Web Services 服务 主体的基于资源的策略中使用该键。将此条件键的值设置为请求中资源的组织路径。例如,当 Amazon S3 桶更新触发 Amazon SNS 主题发布时,Amazon S3 服务将调用 sns:Publish
API 操作。在允许 sns:Publish
操作的主题策略中,将条件键的值设置为 Amazon S3 桶的组织路径。有关如何以及建议何时使用此条件键的信息,请参阅您正在使用的 Amazon 服务的文档。
aws:SourceOrgPaths
是一个多值条件键。多值键在请求上下文中可以有多个值。对于此键,您必须将 ForAnyValue
或者 ForAllValues
集合运算符与字符串条件运算符搭配使用。有关多值条件键的更多信息,请参阅多值上下文键。
aws:SourceOrgID
使用该键可将发出服务到服务请求的资源的组织 ID 与您在策略中指定的组织 ID 进行比较,但仅当请求由 Amazon 服务主体发出时才有效。当您在 Amazon Organizations 中向组织添加和删除账户时,包含 aws:SourceOrgID
键的策略将自动包含正确的账户,并且不必手动更新。
-
可用性 – 仅当 Amazon 服务主体代表属于组织成员的账户拥有的资源直接调用您的资源时,才会将该键包含在请求上下文中。发出调用的服务将原始资源的组织 ID 传递给被调用的服务。
以下服务集成不支持该全局条件键:
发出调用的服务(服务主体) 被调用的服务(基于资源的策略) 描述 logdelivery.elb.amazonaws.com Amazon S3 存储桶 在 Amazon S3 桶中启用 Elastic Load Balancing 访问日志记录 logdelivery.elasticloadbalancing.amazonaws.com Amazon S3 存储桶 在 Amazon S3 桶中启用 Elastic Load Balancing 访问日志记录 所有服务主体 Amazon Lex 机器人 允许 Amazon Web Services 服务 以使用 Amazon Lex 机器人 注意
并非所有与 Amazon Security Token Service(Amazon STS)和 Amazon Key Management Service(Amazon KMS)的服务集成均受支持。有关更多信息,请参阅发出调用的服务的文档。对 Amazon Web Services 服务 通过 KMS 密钥授权使用的键使用 KMS 密钥政策中
aws:SourceOrgID
可能会导致意外行为。 -
数据类型 – 字符串
-
值类型— 单值
您可以使用此条件键来防止 Amazon 服务在服务之间执行事务时被用作混淆代理人。仅在 Principal
作为 Amazon Web Services 服务 主体的基于资源的策略中使用该键。将此条件键的值设置为请求中资源的组织 ID。例如,当 Amazon S3 桶更新触发 Amazon SNS 主题发布时,Amazon S3 服务将调用 sns:Publish
API 操作。在允许 sns:Publish
操作的主题策略中,将条件键的值设置为 Amazon S3 桶的组织 ID。有关如何以及建议何时使用此条件键的信息,请参阅您正在使用的 Amazon 服务的文档。
aws:UserAgent
使用此键可将请求者的客户端应用程序与您在策略中指定的应用程序进行比较。
-
Availability(可用性)- 此键始终包含在请求上下文中。
-
数据类型 – 字符串
-
值类型— 单值
警告
应谨慎使用此键。由于 aws:UserAgent
值由发起人在 HTTP 标头中提供,因此未经授权方可以修改或自定义浏览器以提供他们选择的任何 aws:UserAgent
值。因此,aws:UserAgent
不应用于阻止未经授权方直接发出 Amazon 请求。您可以使用它来仅允许特定客户端应用程序,并且仅在对策略进行测试之后。
其他跨服务条件键
Amazon STS 支持将基于 SAML 的联合身份验证条件键和跨服务条件键用于 OIDC 联合身份验证。当使用 SAML 联合的用户在其他服务中执行 Amazon 操作时,这些键可用。