IAM 和 AWS STS 条件上下文密钥 - AWS Identity and Access Management

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 设备支持的当前状态。

CreateActivate 的可能值。

在本例中,您注册了安全密钥,并为设备检索 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 条件上下文键。

Default

默认列出了标准 OIDC 声明以及它们如何映射到 AWS 中的 AWS STS 条件上下文键。您可以使用这些键来控制对角色的访问。为此,请将 AWS STS 条件键IdP JWT 声明列中的值进行比较。如果选项卡选项中未列出您的 IdP,则使用此映射。

GitHub Actions 工作流和 Google 是在 OIDC JWT ID 令牌中使用默认实现的 IDP 的一些示例。

AWS STS 条件键 IdP JWT 生命 在会话中可用

amr

amr

aud

azp

如果未为 azp 设置任何值,则 aud 条件键将映射到 aud 声明。

email

email

oaud

aud

sub

sub

有关将 OIDC 条件上下文键与 GitHub 结合使用的更多信息,请参阅 为 GitHub OIDC 身份提供程序配置角色。有关 Google audazp 字段的更多信息,请参阅 Google Identity Platform OpenID Connect 指南。

amr

字符串运算符结合使用。该键有多个值,这意味着您要在使用条件集合运算符的策略中对它进行测试。

示例token.actions.githubusercontent.com:amr

“身份验证方法引用”包括有关用户的登录信息。该键可包含以下值:

  • 如果用户未经过身份验证,则该键仅包含 unauthenticated

  • 如果用户已通过身份验证,则该键包含值 authenticated 以及调用 (accounts.google.com) 中使用的登录提供者的名称。

aud

字符串运算符结合使用。

示例:

  • accounts.google.com:aud

  • token.actions.githubusercontent.com:aud

使用 aud 条件键验证受众是否与您在策略中指定的内容匹配。对于同一身份提供者,可以将 aud 键与 sub 键结合使用。

此条件键是从以下令牌字段设置的:

  • 应用程序的 OAuth 2.0 Google 客户端 ID 的 aud(如果未设置 azp 字段)。如果设置了 azp 字段,则 aud 字段将与 accounts.google.com:oaud 条件键匹配。

  • azp(如果设置了 azp 字段)。对于 Web 应用程序和 Android 应用程序具有不同的 OAuth 2.0 Google 客户端 ID 但共享相同的 Google API 项目的混合应用程序,可能会出现这种情况。

在使用 accounts.google.com:aud 条件键编写策略时,您必须了解该应用程序是否为设置 azp 字段的混合应用程序。

azp 字段未设置

以下示例策略适用于未设置 azp 字段的非混合应用程序。在此情况下,Google ID 令牌 aud 字段值将与 accounts.google.com:audaccounts.google.com:oaud 条件键值匹配。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {"Federated": "accounts.google.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:aud": "aud-value", "accounts.google.com:oaud": "aud-value", "accounts.google.com:sub": "sub-value" } } } ] }

azp 字段已设置

以下示例策略适用于设置 azp 字段的混合应用程序。在此情况下,Google ID 令牌 aud 字段值仅与 accounts.google.com:oaud 条件键值匹配。azp 字段值与 accounts.google.com:aud 条件键值匹配。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {"Federated": "accounts.google.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:aud": "azp-value", "accounts.google.com:oaud": "aud-value", "accounts.google.com:sub": "sub-value" } } } ] }
email

字符串运算符结合使用。

示例accounts.google.com:email

此条件键验证用户的电子邮件地址。此声明的值可能不是此账户所独有的,并且可能会随着时间的推移而发生变化,因此您不应使用此值作为主要标识符来验证用户记录。

oaud

字符串运算符结合使用。

示例accounts.google.com:oaud

此键指定此 ID 令牌用于的其他受众 (aud)。它必须是应用程序的 OAuth 2.0 客户端 ID 之一。

sub

字符串运算符结合使用。

示例:

  • accounts.google.com:sub

  • token.actions.githubusercontent.com:sub

使用这些键验证使用者是否与您在策略中指定的内容匹配。对于同一身份提供程序,可以将 sub 键与 aud 键结合使用。

在以下角色信任策略中,sub 条件键将角色限制为名为 demo 的 GitHib 分支。

{ "Version": "2012-10-17", "Statement": [ "Condition": { "StringEquals": { "token.actions.githubusercontent.com:aud": "sts.amazonaws.com", "token.actions.githubusercontent.com:sub": "repo:octo-org/octo-repo:ref:refs/heads/demo" } } ] }
Amazon Cognito

此选项卡说明了 Amazon Cognito 如何将 OIDC 声明映射到 AWS 中的 AWS STS 条件上下文键。您可以使用这些键来控制对角色的访问。为此,请将 AWS STS 条件键IdP JWT 声明列中的值进行比较。

对于 Amazon Cognito 使用的角色,键是使用 cognito-identity.amazonaws.com 和声明定义的。

有关身份池声明映射的更多信息,请参阅《Amazon Cognito 开发人员指南》中的默认提供商映射。有关用户池声明映射的更多信息,请参阅《Amazon Cognito 开发人员指南》中的使用 ID 令牌

AWS STS 条件键 IdP JWT 生命 在会话中可用

amr

amr

aud

aud

oaud

aud

sub

sub

amr

字符串运算符结合使用。该键有多个值,这意味着您要在使用条件集合运算符的策略中对它进行测试。

示例cognito-identity.amazonaws.com:amr

“身份验证方法引用”包括有关用户的登录信息。该键可包含以下值:

  • 如果用户未经过身份验证,则该键仅包含 unauthenticated

  • 如果用户已通过身份验证,则该键包含值 authenticated 以及调用 (cognito-identity.amazonaws.com) 中使用的登录提供者的名称。

例如,某 Amazon Cognito 角色信任策略中的以下条件测试用户是否未经身份验证:

"Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-2:identity-pool-id" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" } }
aud

字符串运算符结合使用。

示例cognito-identity.amazonaws.com:aud

对用户进行身份验证的用户群体应用程序客户端。Amazon Cognito 在访问令牌 client_id 声明中呈现相同的值。

oaud

字符串运算符结合使用。

示例cognito-identity.amazonaws.com:oaud

对用户进行身份验证的用户群体应用程序客户端。Amazon Cognito 在访问令牌 client_id 声明中呈现相同的值。

sub

字符串运算符结合使用。

示例cognito-identity.amazonaws.com:sub

经过身份验证的用户的唯一标识符 (UUID) 或主题。用户名在您的用户群体中可能不是唯一的。此子声明是识别给定用户的最佳方法。对于同一身份提供程序,可以将 sub 键与 aud 键结合使用。

{ "Version": "2012-10-17", "Statement": [ "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-abcd-abcd-abcd-123456790ab", "cognito-identity.amazonaws.com:sub": [ "us-east-1:12345678-1234-1234-1234-123456790ab", "us-east-1:98765432-1234-1234-1243-123456790ab" ] } } ] }
Login with Amazon

此选项卡说明了 Login with Amazon 如何将 OIDC 声明映射到 AWS 中的 AWS STS 条件上下文键。您可以使用这些键来控制对角色的访问。为此,请将 AWS STS 条件键IdP JWT 声明列中的值进行比较。

AWS STS 条件键 IdP JWT 生命 在会话中可用

app_id

应用程序 ID

sub

用户 ID

user_id

用户 ID

app_id

字符串运算符结合使用。

示例www.amazon.com:app_id

此键指定与其他身份提供者使用的 aud 字段匹配的受众上下文。

sub

字符串运算符结合使用。

示例www.amazon.com:sub

此键验证用户 ID 是否与您在策略中指定的内容匹配。对于同一身份提供程序,可以将 sub 键与 aud 键结合使用。

user_id

字符串运算符结合使用。

示例www.amazon.com:user_id

此键指定与其他身份提供者使用的 aud 字段匹配的受众上下文。对于同一身份提供者,可以将 user_id 键与 id 键结合使用。

Facebook

此选项卡说明了 Facebook 如何将 OIDC 声明映射到 AWS 中的 AWS STS 条件上下文键。您可以使用这些键来控制对角色的访问。为此,请将 AWS STS 条件键IdP JWT 声明列中的值进行比较。

AWS STS 条件键 IdP JWT 生命 在会话中可用

app_id

应用程序 ID

id

id

app_id

字符串运算符结合使用。

示例graph.facebook.com:app_id

此键验证受众上下文是否与其他身份提供者使用的 aud 字段匹配。

id

字符串运算符结合使用。

示例graph.facebook.com:id

此键验证应用程序(或站点)ID 是否与您在策略中指定的内容匹配。

有关 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 提供商的友好名称的哈希值。该值是以下值按顺序的连接,以“/”字符分隔:

  1. Issuer 响应值 (saml:iss)

  2. AWS 账户 ID

  3. IAM 中 SAML 提供商的友好名称(ARN 的最后一部分)

账户 ID 与 SAML 提供商的易记名称的串联可作为键 saml:doc 供 IAM policy 使用。有关更多信息,请参阅 唯一标识基于 SAML 的联合中的用户

saml:organizationStatus[]

字符串运算符结合使用。

这是 organizationStatus 属性。

saml:primaryGroupSID[]

字符串运算符结合使用。

这是 primaryGroupSID 属性。

saml:sub

字符串运算符结合使用。

这是该陈述的主题,其中包含唯一标识组织中某个用户的值 (例如 _cbb88bf52c2510eabe00c1642d4643f41430fe25e3)。

saml:sub_type

字符串运算符结合使用。

此键的值可以是 persistenttransient 或由 SAML 断言中使用的 FormatSubject 元素的完整 NameID URI 构成。persistent 值表示在不同会话之间用户的 saml:sub 值是相同的。如果值为 transient,则用户在每个会话中拥有不同的 saml:sub 值。有关 NameID 元素的 Format 属性的信息,请参阅为身份验证响应配置 SAML 断言。

saml:surname[]

字符串运算符结合使用。

这是 surnameuid 属性。

saml:uid[]

字符串运算符结合使用。

这是 uid 属性。

saml:x500UniqueIdentifier[]

字符串运算符结合使用。

这是 x500UniqueIdentifier 属性。

有关 eduPersoneduOrg 属性的一般信息,请参阅 REFEDS Wiki 网站。有关 eduPerson 属性的列表,请参阅 eduPerson 对象类规范 (201602)

列表类型的条件键可以包含多个值。要在策略中创建条件以获取列表值,可以使用集合运算符ForAllValuesForAnyValue)。例如,要支持从属关系为“教员”或“职员”(而非“学生”)的用户,可以使用下面这样的条件:

"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-keycontext-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 上下文密钥。此键包括会话标签可传递会话标签和角色标签的列表。可传递会话标签是当您使用会话凭证代入另一个角色时,持续传递到所有后续会话中的标记。从一个角色代入另一个角色的过程称为角色链

您可以在策略中使用此条件键,以便要求在代入角色或联合身份用户身份时,要求将特定会话标签设置为可传递标签。