IAM 和 AWS STS 条件上下文密钥
您可以在 JSON 策略中使用 Condition
元素来测试所有 AWS 请求的请求上下文中所包含键的值。这些键提供有关请求本身或请求所引用资源的信息。在允许用户请求的操作之前,您可以检查这些键是否具有指定值。这样,您就可以精细控制 JSON 策略语句何时与传入的请求匹配或不匹配。有关如何在 JSON 策略中使用 Condition
元素的信息,请参阅IAM JSON 策略元素:Condition。
本主题介绍了由 IAM 服务定义和提供的键(带 iam:
前缀)以及由 AWS Security Token Service (AWS STS) 服务定义和提供的键(带 sts:
前缀)。其他几个 AWS 服务也提供与该服务定义的操作和资源相关的服务特定键。有关更多信息,请参阅 AWS 服务的操作、资源和条件键。支持条件键的服务的文档通常包含附加信息。例如,有关可在 Amazon S3 资源的策略中使用的密钥信息,请参阅 Amazon Simple Storage Service 用户指南中的 Amazon S3 策略密钥。
主题
IAM 的可用键
可以在控制对 IAM 资源的访问的策略中使用以下条件键:
- iam:AssociatedResourceArn
-
与 ARN 运算符结合使用。
指定此角色在目标服务上关联的资源的 ARN。资源通常属于主体将角色传递到的服务。有时,资源可能属于第三个服务。例如,您可以将角色传递给他们在 Amazon EC2 实例上使用的 Amazon EC2 Auto Scaling。在这种情况下,条件将匹配 Amazon EC2 实例的 ARN。
此条件键仅适用于策略中的 PassRole 操作。无法使用它来限制任何其他操作。
重要
当在策略中使用
iam:AssociatedResourceArn
条件来限制 PassRole 操作时,如果该策略旨在定义 AddRoleToInstanceProfile 操作的访问权限,则需要特别考虑。在这种情况下,您无法在 EC2 实例 ARN 中指定区域或实例 ID。ARN 值必须为arn:aws:ec2:*:CallerAccountId:instance/*
。使用任何其他 ARN 值都可能会导致意外的评估结果。在基于身份的策略中使用此条件键可允许实体传递角色,但前提是角色与指定资源相关联。例如,您可以允许 IAM 用户或角色将任何角色传递给 Amazon EC2 服务,以便与 AWS 账户 中的实例一起使用。不允许将 IAM 用户或角色传递给其他服务。
{ "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "ec2.amazonaws.com" }, "ArnLike": { "iam:AssociatedResourceARN": [ "arn:aws:ec2:*:111122223333:instance/*" ] } } }
注意
支持 iam:PassedToService 的 AWS 服务也支持此条件键。
- iam:AWSServiceName
-
与字符串运算符结合使用。
指定此角色将附加到的 AWS 服务。
在此示例中,如果服务名称为 access-analyzer.amazonaws.com,您将允许实体创建与服务关联的角色。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "*", "Condition": { "StringLike": { "iam:AWSServiceName": "access-analyzer.amazonaws.com" } } }] }
- iam:FIDO-certification
-
与字符串运算符结合使用。
在注册 FIDO 安全密钥时,检查 MFA 设备 FIDO 认证级别。从 FIDO Alliance Metadata Service(MDS)
获取设备认证。如果您的 FIDO 安全密钥的认证状态或级别发生变化,则除非设备取消注册,然后重新注册,以获取更新的认证信息,否则不会对其进行更新。 L1、L1plus、L2、L2plus、L3、L3plus 的可能值
在本例中,您注册了安全密钥,并为设备检索 FIDO 1 级 + 认证。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "iam:EnableMFADevice", "Resource": "*", "Condition": { "StringEquals": { "iam:RegisterSecurityKey" : "Create" } } }, { "Effect": "Allow", "Action": "iam:EnableMFADevice", "Resource": "*", "Condition": { "StringEquals": { "iam:RegisterSecurityKey" : "Activate", "iam:FIDO-certification": "L1plus" } } } ] }
- iam:FIDO-FIPS-140-2-certification
-
与字符串运算符结合使用。
在注册 FIDO 安全密钥时,检查 MFA 设备 FIPS-140-2 验证认证级别。从 FIDO Alliance Metadata Service(MDS)
获取设备认证。如果您的 FIDO 安全密钥的认证状态或级别发生变化,则除非设备取消注册,然后重新注册,以获取更新的认证信息,否则不会对其进行更新。 L1、L2、L3、L4 的可能值
在本例中,您注册了安全密钥,并为设备检索 FIPS-140-2 2 级认证。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "iam:EnableMFADevice", "Resource": "*", "Condition": { "StringEquals": { "iam:RegisterSecurityKey" : "Create" } } }, { "Effect": "Allow", "Action": "iam:EnableMFADevice", "Resource": "*", "Condition": { "StringEquals": { "iam:RegisterSecurityKey" : "Activate", "iam:FIDO-FIPS-140-2-certification": "L2" } } } ] }
- iam:FIDO-FIPS-140-3-certification
-
与字符串运算符结合使用。
在注册 FIDO 安全密钥时,检查 MFA 设备 FIPS-140-3 验证认证级别。从 FIDO Alliance Metadata Service(MDS)
获取设备认证。如果您的 FIDO 安全密钥的认证状态或级别发生变化,则除非设备取消注册,然后重新注册,以获取更新的认证信息,否则不会对其进行更新。 L1、L2、L3、L4 的可能值
在本例中,您注册了安全密钥,并为设备检索 FIPS-140-3 3 级认证。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "iam:EnableMFADevice", "Resource": "*", "Condition": { "StringEquals": { "iam:RegisterSecurityKey" : "Create" } } }, { "Effect": "Allow", "Action": "iam:EnableMFADevice", "Resource": "*", "Condition": { "StringEquals": { "iam:RegisterSecurityKey" : "Activate", "iam:FIDO-FIPS-140-3-certification": "L3" } } } ] }
- iam:RegisterSecurityKey
-
与字符串运算符结合使用。
检查 MFA 设备支持的当前状态。
Create
或Activate
的可能值。在本例中,您注册了安全密钥,并为设备检索 FIPS-140-3 1 级认证。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "iam:EnableMFADevice", "Resource": "*", "Condition": { "StringEquals": { "iam:RegisterSecurityKey" : "Create" } } }, { "Effect": "Allow", "Action": "iam:EnableMFADevice", "Resource": "*", "Condition": { "StringEquals": { "iam:RegisterSecurityKey" : "Activate", "iam:FIDO-FIPS-140-3-certification": "L1" } } } ] }
- iam:OrganizationsPolicyId
-
与字符串运算符结合使用。
检查具有指定 AWS Organizations ID 的策略是否与请求中使用的策略匹配。要查看使用此条件键的示例 IAM policy,请参阅。IAM:查看 Organizations 策略的上次访问的服务信息
- iam:PassedToService
-
与字符串运算符结合使用。
指定可将角色传递到的服务的服务主体。此条件键仅适用于策略中的 PassRole 操作。无法使用它来限制任何其他操作。
在策略中使用此条件键时,请使用服务主体指定服务。服务主体是可在策略的
Principal
元素中指定的服务的名称。常见格式为:SERVICE_NAME_URL.amazonaws.com
。您可以使用
iam:PassedToService
限制您的用户,使其只能将角色传递到特定服务。例如,用户可能会创建一个服务角色,该角色信任 CloudWatch 代表用户将日志数据写入到 Amazon S3 存储桶。之后,用户必须将一个权限策略和一个信任策略附加到新的服务角色。在此情况下,信任策略必须指定cloudwatch.amazonaws.com
元素中的Principal
。要查看允许用户将角色传递给 CloudWatch 的策略,请参阅 IAM:将 IAM 角色传递给特定 AWS 服务。通过使用此条件键,您可以确保用户仅为您指定的服务创建服务角色。例如,如果具有之前的策略的用户尝试为 Amazon EC2 创建服务角色,操作将失败。失败的原因是因为用户无权将角色传递到 Amazon EC2。
有时,您会将角色传递给一个服务,随后将角色传递给另一个服务。
iam:PassedToService
仅包含担任角色的最终服务,而不包括传递角色的中间服务。注意
某些服务不支持此条件键。
- iam:PermissionsBoundary
-
与 ARN 运算符结合使用。
检查指定的策略附加为 IAM 主体资源上的权限边界。有关更多信息,请参阅 IAM 实体的权限边界
- iam:PolicyARN
-
与 ARN 运算符结合使用。
检查涉及托管策略的请求中的托管策略的 Amazon Resource Name (ARN)。有关更多信息,请参阅 控制对策略的访问。
- iam:ResourceTag/
key-name
-
与字符串运算符结合使用。
检查附加到身份资源(用户或角色)的标签是否与指定的键名称和键值匹配。
注意
IAM 和 AWS STS 同时支持
iam:ResourceTag
IAM 条件键和aws:ResourceTag
全局条件键。您可采用键值对的形式向 IAM 资源添加自定义属性。有关 IAM 资源的标签的更多信息,请参阅 AWS Identity and Access Management 资源的标签。您可以使用
ResourceTag
控制对 AWS 资源(包括 IAM 资源)的访问。但是,由于 IAM 不支持组的标签,因此您不能使用标签来控制对组的访问。此示例说明如何创建基于身份的策略以允许删除具有
status=terminated
标签的用户。要使用此策略,请将示例策略中的斜体占位符文本
替换为您自己的信息。然后,按照创建策略或编辑策略中的说明操作。{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "iam:DeleteUser", "Resource": "*", "Condition": {"StringEquals": {"iam:ResourceTag/
status
": "terminated
"}} }] }
AWS OIDC 联合身份验证的可用键
您可以使用 OIDC 联合身份验证,为已通过 OpenID Connect 兼容的身份提供者(IdP)向您的 AWS 账户中的 IAM OpenID Connect(OIDC)身份提供者进行身份验证的用户提供临时安全凭证。此类提供者的示例包括 GitHub、Amazon Cognito、Login with Amazon 和 Google。可以使用您自己的 IdP 中的身份令牌和访问令牌,也可以使用授给 Amazon Elastic Kubernetes 服务工作负载的服务账户令牌。
您可以使用 AWS OIDC 条件上下文键编写策略,将联合用户的访问权限限制为与特定提供者、应用或用户关联的资源。这些键通常在角色的信任策略中使用。使用 OIDC 提供者的名称 (token.actions.githubusercontent.com
) 和声明 (:aud
) 定义条件键:token.actions.githubusercontent.com:aud
。
某些 OIDC 联合身份验证条件键可以在角色会话中用于授权资源访问权限。如果“在会话中可用”列中的值为“是”,则可以在策略中使用这些条件键来定义其他 AWS 服务中允许用户访问的内容。当声明在会话中不可用时,OIDC 条件上下文键只能在角色信任策略中用于初始 AssumeRoleWithWebIdentity 身份验证。
选择您的 IdP,查看 IdP 中的声明如何映射到 AWS 中的 IAM 条件上下文键。
有关 OIDC 联合身份验证的更多信息
基于 SAML 的 AWS STS 联合身份验证的可用键
如果您通过 AWS Security Token Service (AWS STS) 使用基于 SAML 的联合,则可以在策略中包含更多条件键。
SAML 角色信任策略
在角色的信任策略中,您可以包括以下键,以帮助您确定发起人是否有权担任角色。除了 saml:doc
,所有值均源自 SAML 断言。在创建或编辑带条件的策略时,可在 IAM 控制台可视化编辑器中使用列表中的所有项目。标有 []
的项目可以 具有指定类型列表中的值。
- saml:aud
-
与字符串运算符结合使用。
SAML 断言提交到的终端节点 URL。此键的值来自断言中的
SAML Recipient
字段,而不是Audience
字段。 - saml:commonName[]
-
与字符串运算符结合使用。
这是
commonName
属性。 - saml:cn[]
-
与字符串运算符结合使用。
这是
eduOrg
属性。 - saml:doc
-
与字符串运算符结合使用。
这代表担任角色所用的主体。格式为
account-ID
/provider-friendly-name
,例如123456789012/SAMLProviderName
。账户 ID 值指拥有 SAML 提供商的账户。 - saml:edupersonaffiliation[]
-
与字符串运算符结合使用。
这是
eduPerson
属性。 - saml:edupersonassurance[]
-
与字符串运算符结合使用。
这是
eduPerson
属性。 - saml:edupersonentitlement[]
-
与字符串运算符结合使用。
这是
eduPerson
属性。 - saml:edupersonnickname[]
-
与字符串运算符结合使用。
这是
eduPerson
属性。 - saml:edupersonorgdn
-
与字符串运算符结合使用。
这是
eduPerson
属性。 - saml:edupersonorgunitdn[]
-
与字符串运算符结合使用。
这是
eduPerson
属性。 - saml:edupersonprimaryaffiliation
-
与字符串运算符结合使用。
这是
eduPerson
属性。 - saml:edupersonprimaryorgunitdn
-
与字符串运算符结合使用。
这是
eduPerson
属性。 - saml:edupersonprincipalname
-
与字符串运算符结合使用。
这是
eduPerson
属性。 - saml:edupersonscopedaffiliation[]
-
与字符串运算符结合使用。
这是
eduPerson
属性。 - saml:edupersontargetedid[]
-
与字符串运算符结合使用。
这是
eduPerson
属性。 - saml:eduorghomepageuri[]
-
与字符串运算符结合使用。
这是
eduOrg
属性。 - saml:eduorgidentityauthnpolicyuri[]
-
与字符串运算符结合使用。
这是
eduOrg
属性。 - saml:eduorglegalname[]
-
与字符串运算符结合使用。
这是
eduOrg
属性。 - saml:eduorgsuperioruri[]
-
与字符串运算符结合使用。
这是
eduOrg
属性。 - saml:eduorgwhitepagesuri[]
-
与字符串运算符结合使用。
这是
eduOrg
属性。 - saml:givenName[]
-
与字符串运算符结合使用。
这是
givenName
属性。 - saml:iss
-
与字符串运算符结合使用。
发布者,以 URN 表示。
- saml:mail[]
-
与字符串运算符结合使用。
这是
mail
属性。 - saml:name[]
-
与字符串运算符结合使用。
这是
name
属性。 - saml:namequalifier
-
与字符串运算符结合使用。
基于 SAML 提供商的友好名称的哈希值。该值是以下值按顺序的连接,以“/”字符分隔:
-
Issuer
响应值 (saml:iss
) -
AWS
账户 ID -
IAM 中 SAML 提供商的友好名称(ARN 的最后一部分)
账户 ID 与 SAML 提供商的易记名称的串联可作为键
saml:doc
供 IAM policy 使用。有关更多信息,请参阅 唯一标识基于 SAML 的联合中的用户。 -
- saml:organizationStatus[]
-
与字符串运算符结合使用。
这是
organizationStatus
属性。 - saml:primaryGroupSID[]
-
与字符串运算符结合使用。
这是
primaryGroupSID
属性。 - saml:sub
-
与字符串运算符结合使用。
这是该陈述的主题,其中包含唯一标识组织中某个用户的值 (例如
_cbb88bf52c2510eabe00c1642d4643f41430fe25e3
)。 - saml:sub_type
-
与字符串运算符结合使用。
此键的值可以是
persistent
、transient
或由 SAML 断言中使用的Format
和Subject
元素的完整NameID
URI 构成。persistent
值表示在不同会话之间用户的saml:sub
值是相同的。如果值为transient
,则用户在每个会话中拥有不同的saml:sub
值。有关NameID
元素的Format
属性的信息,请参阅为身份验证响应配置 SAML 断言。。 - saml:surname[]
-
与字符串运算符结合使用。
这是
surnameuid
属性。 - saml:uid[]
-
与字符串运算符结合使用。
这是
uid
属性。 - saml:x500UniqueIdentifier[]
-
与字符串运算符结合使用。
这是
x500UniqueIdentifier
属性。
有关 eduPerson
和 eduOrg
属性的一般信息,请参阅 REFEDS Wiki 网站eduPerson
属性的列表,请参阅 eduPerson 对象类规范 (201602)
列表类型的条件键可以包含多个值。要在策略中创建条件以获取列表值,可以使用集合运算符(ForAllValues
、ForAnyValue
)。例如,要支持从属关系为“教员”或“职员”(而非“学生”)的用户,可以使用下面这样的条件:
"Condition": { "ForAllValues:StringLike": { "saml:edupersonaffiliation":[ "faculty", "staff"] } }
基于 SAML 的跨服务 AWS STS 联合身份验证上下文键
一些基于 SAML 的联合身份验证条件键可用于后续请求中,以授权其他服务和 AssumeRole
调用中的 AWS 操作。以下是条件键,当联合主体担任其他角色时,可以在角色信任策略中使用它们,也可以在其他 AWS 服务的资源策略中使用它们来授权联合主体访问资源。有关使用这些键的更多信息,请参阅关于基于 SAML 2.0 的联合身份验证。
选择条件键以查看描述。
注意
在初始外部身份提供者(IdP)身份验证响应后,没有其他基于 SAML 的联合身份验证条件键可供使用。
AWS STS 的可用键
您可以对使用 AWS Security Token Service (AWS STS) 操作担任的角色使用 IAM 角色信任策略中的以下条件键。
- saml:sub
-
与字符串运算符结合使用。
这是该陈述的主题,其中包含唯一标识组织中某个用户的值 (例如
_cbb88bf52c2510eabe00c1642d4643f41430fe25e3
)。 - sts:AWSServiceName
-
与字符串运算符结合使用。
使用此键指定可以在其中使用持有者令牌的服务。在策略中使用此条件键时,请使用服务主体指定服务。服务主体是可在策略的
Principal
元素中指定的服务的名称。例如,codeartifact.amazonaws.com
是 AWS CodeArtifact 服务主体。Availability(可用性)- 此键存在于获取持有者令牌的请求中。您不能直接调用 AWS STS 以获取持有者令牌。当您在其他服务中执行某些操作时,服务代表您请求持有者令牌。
某些 AWS 服务需要您有权获取 AWS STS 服务持有者令牌,然后您才能以编程方式访问它们的资源。例如,AWS CodeArtifact 要求主体使用持有者令牌来执行某些操作。
aws codeartifact get-authorization-token
命令返回一个持有者令牌。然后,您可以使用持有者令牌来执行 AWS CodeArtifact 操作。有关持有者令牌的更多信息,请参阅 服务持有者令牌。您可以使用此条件键以允许主体获取用于特定服务的持有人令牌。
- sts:DurationSeconds
-
与数字运算符结合使用。
使用此键指定主体在获取 AWS STS 持有者令牌时可以使用的持续时间(以秒为单位)。
Availability(可用性)- 此键存在于获取持有者令牌的请求中。您不能直接调用 AWS STS 以获取持有者令牌。当您在其他服务中执行某些操作时,服务代表您请求持有者令牌。此键不适用于 AWS STS assume-role 操作。
某些 AWS 服务需要您有权获取 AWS STS 服务持有者令牌,然后您才能以编程方式访问它们的资源。例如,AWS CodeArtifact 要求主体使用持有者令牌来执行某些操作。
aws codeartifact get-authorization-token
命令返回一个持有者令牌。然后,您可以使用持有者令牌来执行 AWS CodeArtifact 操作。有关持有者令牌的更多信息,请参阅 服务持有者令牌。 - sts:ExternalId
-
与字符串运算符结合使用。
使用此键可要求主体在代入 IAM 角色时提供特定标识符。
可用性 - 如果主体在使用 AWS CLI 或 AWS API 代入角色时提供外部 ID,则请求中存在此键。
在其他账户中担任角色时可能需要的唯一标识符。如果角色所属的账户的管理员为您提供了外部 ID,请在
ExternalId
参数中提供该值。该值可以是任意字符串,如密码或账号。外部 ID 的主要功能是解决并防止混淆代理人问题。有关外部 ID 和混淆代理人问题的更多信息,请参阅访问第三方拥有的 AWS 账户。ExternalId
值的长度必须最少为 2 个字符,最多为 1224 个字符。该值必须是字母数字,没有空格。它还可以包含以下符号:加号 (+)、等号 (=)、逗号 (,)、句点 (.)、@ 符号、冒号 (:)、正斜杠 (/) 和连字符 (-)。 - sts:RequestContext/context-key
-
与字符串运算符结合使用。
使用该键可将在请求中传递的可信令牌颁发者签名上下文断言中嵌入的会话上下文键值对与角色信任策略中指定的上下文键值进行比较。
可用性 – 如果在使用 AWS STS AssumeRole API 操作代入了角色,则在
ProvidedContexts
请求参数中提供上下文断言时,该请求中存在该键。此上下文键的格式为
"sts:RequestContext/context-key":"context-value"
,其中context-key
和context-value
是上下文键值对。在请求中传递的已签名上下文断言中嵌入多个上下文键时,每个键值对都有一个上下文键。您必须在角色信任策略中授予sts:SetContext
操作的权限,才能允许主体在生成的会话令牌中设置上下文键。要详细了解可与此键一起使用的支持的 IAM Identity Center 上下文键,请参阅AWS IAM Identity Center用户指南中的 IAM Identity Center 的 AWS STS 条件键。您可以在角色信任策略中使用该键,以在用户代入角色时根据用户或其属性实施精细的访问控制。代入该角色后,活动将在 AWS CloudTrail 日志的
AdditionalEventData
属性中显示,其中包含由上下文提供程序在代入角色请求中设置的会话上下文键值对。这样,当不同的主体使用角色时,管理员可以更轻松地区分角色会话。键值对由指定的上下文提供程序设置,而不是由 AWS CloudTrail 或 AWS STS 设置。这使上下文提供程序可以控制 CloudTrail 日志和会话信息中包含哪些上下文。 - sts:RequestContextProviders
-
与 ARN 运算符结合使用。
使用该键可将请求中的上下文提供程序 ARN 与角色信任策略中指定的上下文提供程序 ARN 进行比较。
可用性 – 如果在使用 AWS STS AssumeRole API 操作代入了角色,则在
ProvidedContexts
请求参数中提供上下文断言时,该请求中存在该键。以下示例条件检查请求中传递的上下文提供程序 ARN 是否与角色信任策略条件中指定的 ARN 匹配。
"Condition": { "ForAllValues:ArnEquals": { "sts:RequestContextProviders": [ "arn:aws:iam::aws:contextProvider/IdentityCenter" ] } }
- sts:RoleSessionName
-
与字符串运算符结合使用。
使用此键可将主体在代入角色时指定的会话名称与策略中指定的值进行比较。
可用性 - 当主体使用 AWS Management Console 管理控制台、assume-role CLI 命令或 AWS STS
AssumeRole
API 操作代入角色时,则请求中存在此键。您可以在角色信任策略中使用此键,以要求您的用户在代入角色时提供特定的会话名称。例如,您可以要求 IAM 用户指定自己的用户名作为其会话名称。在 IAM 用户代入角色后,活动将与匹配用户名的会话名称一起显示在 AWS CloudTrail 日志中。这样,当不同的主体使用角色时,管理员可以更轻松地区分角色会话。
以下角色信任策略要求账户
111122223333
中的 IAM 用户在代入角色时提供其 IAM 用户名作为会话名称。使用条件键中的aws:username
条件变量来强制执行此要求。此策略允许 IAM 用户代入策略附加到的角色。此策略禁止任何使用临时凭证的人员代入角色,因为username
变量仅适用于 IAM 用户。重要
您可以使用任何可用的单值条件密钥作为变量。您不能使用多值条件键作为变量。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "RoleTrustPolicyRequireUsernameForSessionName", "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": {"AWS": "arn:aws:iam::111122223333:root"}, "Condition": { "StringLike": {"sts:RoleSessionName": "${aws:username}"} } } ] }
当管理员查看操作的 AWS CloudTrail 日志时,他们可以将会话名称与其账户中的用户名进行比较。在以下示例中,名为
matjac
的用户使用名为MateoRole
的角色执行操作。之后,管理员会联系具有名为matjac
用户的 Mateo Jackson。"assumedRoleUser": { "assumedRoleId": "AROACQRSTUVWRAOEXAMPLE:
matjac
", "arn": "arn:aws:sts::111122223333:assumed-role/MateoRole
/matjac
" }如果您允许使用角色进行跨账户访问,则一个账户中的用户可以代入另一个账户中的角色。CloudTrail 中列出的代入角色的 ARN 包括角色所在的账户。它不包括已代入角色的用户的账户。用户仅在账户中是唯一的。因此,我们建议您使用此方法以仅在 CloudTrail 日志中查看您管理的账户中的用户所代入的角色。您的用户可以在多个账户中使用相同的用户名。
- sts:SourceIdentity
-
与字符串运算符结合使用。
使用此键可将主体在代入角色时指定的源身份与策略中指定的值进行比较。
可用性 — 如果主体提供源身份,同时担任使用任何 AWS STS 担任角色 CLI 命令或 AWS STS
AssumeRole
API 操作时,此密钥将会出现在请求中。您可以在角色信任策略中使用此键,以要求您的用户在代入角色时设置特定的源身份。例如,您可以要求您的工作人员或联合身份为源身份指定值。您可以将身份提供程序 (IdP) 配置为使用与用户关联的属性之一(例如用户名或电子邮件)作为源身份。然后,IdP 会将源身份作为其发送的断言或声明中的一个属性传递给 AWS。源身份属性的值标识担任角色的用户或应用程序。
在用户担任角色后,活动将在使用已设置源身份值的 AWS CloudTrail 日志中出现。这使管理员能够更轻松地确定什么角色在 AWS 中执行了操作。您必须授予
sts:SetSourceIdentity
操作相应权限以允许身份设置源身份。与 sts:RoleSessionName 不同,在设置源身份后,无法更改该值。它将存在于源身份对角色执行的所有操作的请求上下文中。当您使用会话凭证担任另一个角色时,该值将保留到后续角色会话中。从一个角色代入另一个角色的过程称为角色链。
您可以使用 aws:SourceIdentity 全局条件键根据后续请求中源身份的值进一步控制对 AWS 资源的访问权限。
以下角色信任策略允许 IAM 用户
AdminUser
在账户中担任角色111122223333
。它还会向AdminUser
授予权限来设置源身份,只要源身份设置为DiegoRamirez
即可。{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAdminUserAssumeRole", "Effect": "Allow", "Principal": {"AWS": " arn:aws:iam::111122223333:user/AdminUser"}, "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity" ], "Condition": { "StringEquals": {"sts:SourceIdentity": "DiegoRamirez"} } } ] }
要了解有关使用源身份信息的更多信息,请参阅 监控和控制使用所担任角色执行的操作。
- sts:TaskPolicyArn
-
与 ARN 运算符结合使用。
使用该键可将 sts:AssumeRoot 请求中的策略 ARN 与在策略中指定的策略 ARN 进行比较。
可用性:当您使用 sts:AssumeRoot 发出请求时,此键会出现在请求中。
您可以在策略中使用此条件键限制管理账户或委派管理员在特权根用户会话期间可以执行的操作。有关更多信息,请参阅 在 AWS Organizations 成员账户上执行特权任务。
- sts:TransitiveTagKeys
-
与字符串运算符结合使用。
使用此键将请求中的可传递会话标签键,与在策略中指定的键进行比较。
Availability(可用性)- 使用临时安全凭证发出请求时,请求中存在此密钥。这些凭证包括使用任何 assume-role 操作或
GetFederationToken
操作创建的凭证。当您使用临时安全凭证发出请求时,请求上下文包含
aws:PrincipalTag
上下文密钥。此键包括会话标签、可传递会话标签和角色标签的列表。可传递会话标签是当您使用会话凭证代入另一个角色时,持续传递到所有后续会话中的标记。从一个角色代入另一个角色的过程称为角色链。您可以在策略中使用此条件键,以便要求在代入角色或联合身份用户身份时,要求将特定会话标签设置为可传递标签。