AWS Identity and Access Management
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

IAM 和 AWS STS 条件上下文键

可以在 IAM 中使用 JSON 策略的 Condition 元素来测试所有 AWS API 请求的评估上下文中包含的键的值。这些键提供有关请求本身或请求所引用资源的信息。在允许用户请求的操作之前,您可以检查这些键是否具有指定值。这样,您就可以精细控制 JSON 策略语句何时与传入的 API 请求匹配或不匹配。有关如何在 JSON 策略中使用 Condition 元素的信息,请参阅IAM JSON 策略元素:Condition

本主题介绍了由 IAM 服务定义和提供的键(带 iam: 前缀)以及由 AWS Security Token Service (AWS STS) 服务定义和提供的键(带 sts: 前缀)。其他几个 AWS 服务也提供与该服务定义的操作和资源相关的服务特定键。有关更多信息,请参阅 。支持条件键的服务的文档通常包含附加信息。例如,有关可在 Amazon S3 资源的策略中使用的密钥的信息,请参阅 Amazon Simple Storage Service 开发人员指南 中的 Amazon S3 策略密钥

IAM 的可用键

可以在控制对 IAM 资源的访问的策略中使用以下条件键:

iam:AWSServiceName

字符串运算符结合使用。

指定此角色将附加到的 AWS 服务。

iam:PassedToService

字符串运算符结合使用。

指定可将角色传递到的服务的服务委托人。服务委托人是可在策略的 Principal 元素中指定的服务的名称。常见格式为:SERVICE_NAME_URL.amazonaws.com。在 iam:PassedToService 条件键中,提供将代入角色的服务的服务委托人。

您可以使用 iam:PassedToService 限制您的用户,使其只能将角色传递到特定服务。例如,用户可能会创建一个服务角色,该角色信任 CloudWatch 代表用户将日志数据写入到 Amazon S3 存储桶。之后,用户必须将一个权限策略和一个信任策略附加到新的服务角色。在此情况下,信任策略必须指定 cloudwatch.amazonaws.com 元素中的 Principal。附加以下策略以允许用户将角色传递到 CloudWatch:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": {"StringEquals": {"iam:PassedToService": "cloudwatch.amazonaws.com"}} } ] }

通过使用此条件键,您可以确保用户仅为您指定的服务创建服务角色。例如,如果具有之前的策略的用户尝试为 Amazon EC2 创建服务角色,则此操作将失败,因为用户无权将角色传递到 Amazon EC2。

iam:PermissionsBoundary

字符串运算符结合使用。

检查指定的策略附加为 IAM 委托人资源上的权限边界。有关更多信息,请参阅IAM 实体的权限边界

iam:PolicyARN

ARN 运算符结合使用。

检查涉及托管策略的请求中的托管策略的 Amazon 资源名称 (ARN)。有关更多信息,请参阅控制对策略的访问

iam:ResourceTag/key-name

字符串运算符结合使用。

检查附加到身份资源(用户或角色)的标签是否与指定的键名称和键值匹配。

您可采用键–值对的形式向用户或角色添加自定义属性。有关 IAM 标签的更多信息,请参阅标记 IAM 实体。您可以使用 iam:ResourceTag控制访问(针对 IAM 用户和角色)。但是,由于 IAM 不支持组的标签,因此您不能使用标签来控制对组的访问。

此示例显示您可以如何创建策略 允许删除具有 status=terminated 标签的用户。要使用此策略,请将示例策略中的红色斜体文本替换为您自己的信息。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "iam:DeleteUser", "Resource": "*", "Condition": {"StringLike": {"iam:ResourceTag/status": "terminated"}} }] }

可用于 AWS Web 联合身份验证的键

您可以使用 Web 联合身份验证为通过身份提供程序 (IdP) 进行身份验证的用户提供临时安全凭证。此类提供商的示例包括 Login with Amazon、Amazon Cognito、Google 或 Facebook。在此情况下,当使用临时安全凭证发出请求时,将会有额外条件键可用。您可以使用这些键编写策略,确保联合身份用户只能访问与特定提供商、应用程序或用户关联的资源。

aws:FederatedProvider

字符串运算符结合使用。

FederatedProvider 密钥可以识别是使用哪个 IdP 对用户进行身份验证的。例如,如果用户已通过 Amazon Cognito 进行身份验证,则键将包含 cognito-identity.amazonaws.com.cn。同样,如果已通过 Login with Amazon 对用户进行身份验证,则键将包含值 www.amazon.com。您可能使用类似以下资源策略中的键,该策略在资源的 ARN 中使用 aws:FederatedProvider 键作为策略变量。如果用户是使用 IdP 进行的身份验证,那么策略将允许这些用户从 Amazon S3 存储桶中的文件夹获取对象。但是,存储桶必须是对用户进行身份验证的提供商特定的。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws-cn:s3:::BUCKET-NAME/${aws:FederatedProvider}/*" } }
应用程序 ID 和用户 ID

字符串运算符结合使用。

您也可以使用两个键,它们提供用户的唯一标识符以及用于验证用户的应用程序或网站的标识符。这些键具有以下 IdP 特定名称:

  • 对于 Amazon Cognito 用户,键是 cognito-identity.amazonaws.com.cn:aud (对于身份池 ID) 和 cognito-identity.amazonaws.com.cn:sub (对于用户 ID)。

  • 对于 Login with Amazon 用户,键为 www.amazon.com:app_idwww.amazon.com:user_id

  • 对 Facebook 用户,键为 graph.facebook.com:app_idgraph.facebook.com:id

  • 对于 Google 用户,键为 accounts.google.com:aud (对于应用程序 ID) 和 accounts.google.com:sub (对于用户 ID)。

Amazon Cognito 中的 amr 键

字符串运算符结合使用。

如果您正在使用 Amazon Cognito 进行 Web 联合身份验证,则信任策略中的 cognito-identity.amazonaws.com.cn:amr 键 (身份验证方法引用) 包含有关该用户的登录信息。该键有多个值,这意味着您要在使用条件集合运算符的策略中对它进行测试。该键可包含以下值:

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

  • 如果该用户已经过身份验证,则该键包含值 authenticated 以及在调用中使用的登录提供商的名称 (graph.facebook.comaccounts.google.comwww.amazon.com)。

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

"Condition": { "StringEquals": { "cognito-identity.amazonaws.com.cn:aud": "us-east-2:identity-pool-id" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com.cn:amr": "unauthenticated" } }
有关 Web 联合身份验证的更多信息

有关 Web 联合身份验证的更多信息,请参阅以下内容:

基于 SAML 的 AWS STS 联合的可用键

如果您通过 AWS Security Token Service (AWS STS) 使用基于 SAML 的联合,则可以在策略中包含更多条件键。

SAML 角色信任策略

在角色的信任策略中,您可以包括以下键,以帮助您确定发起人是否有权代入角色。除了 saml:doc,所有值均源自 SAML 断言。控制台 UI 可使用列表中标有星号 (*) 的项目创建条件。标有 [] 的项目可以 具有指定类型列表中的值。

saml:aud

字符串运算符结合使用。

SAML 断言提交到的终端节点 URL。此键的值来自断言中的 SAML Recipient 字段,而不是 Audience 字段。

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:namequalifier*

字符串运算符结合使用。

哈希值,基于 Issuer 响应值 (saml:iss)、AWS 账户 ID 和 IAM 中 SAML 提供商的友好名称(ARN 的最后一部分)的串联,以“/”字符分隔。账户 ID 与 SAML 提供商的友好名称的串联可作为密钥 saml:doc 供 IAM 策略使用。有关更多信息,请参阅唯一标识基于 SAML 的联合中的用户

saml:iss*

字符串运算符结合使用。

发布者,以 URN 表示。

saml:sub*

字符串运算符结合使用。

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

saml:sub_type*

字符串运算符结合使用。

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

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

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

"Condition": { "ForAllValues:StringLike": { "saml:edupersonaffiliation":[ "faculty", "staff", "employee" ] } }

SAML 角色权限策略

SAML 联合角色的许可策略用于定义用户能够访问的 AWS 内容,您可以在其中包含以下键:

saml:namequalifier

字符串运算符结合使用。

这包含代表 saml:docsaml:iss 值组合的一个哈希值。它用作命名空间限定词;saml:namequalifiersaml:sub 组合可唯一标识用户。

saml:sub

字符串运算符结合使用。

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

saml:sub_type

字符串运算符结合使用。

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

有关使用这些密钥的更多信息,请参阅关于基于 SAML 2.0 的联合身份验证

AWS STS 的可用键

您可以对使用 AWS Security Token Service (AWS STS) 操作代入的角色使用 IAM 角色信任策略中的以下条件键。

sts:ExternalId

字符串运算符结合使用。

在其他账户中代入角色时可能需要的唯一标识符。如果角色所属的账户的管理员为您提供了外部 ID,请在 ExternalId 参数中提供该值。该值可以是任意字符串,如密码或账号。由于跨账户角色通常设置为信任账户中的所有人,因此信任账户的管理员可能会向可信账户的管理员发送外部 ID。这样一来,只有拥有该 ID 的人员才能代入角色,而不是该账户中的每个人。有关外部 ID 的更多信息,请参阅 如何在向第三方授予对 AWS 资源的访问权时使用外部 ID

ExternalId 值的长度必须最少为 2 个字符,最多为 1224 个字符。该值必须是字母数字,没有空格。它还可以包含以下符号:加号 (+)、等号 (=)、逗号 (,)、句点 (.)、@ 符号、冒号 (:)、正斜杠 (/) 和连字符 (-)。