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

IAM 条件上下文键

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

其他几个 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.amazonaws.com 元素中的 Principal。附加以下策略以允许用户将角色传递到 CloudWatch:

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

通过使用此条件键,您可以确保用户仅为您指定的服务创建服务角色。

字符串运算符结合使用。

iam:PolicyARN

ARN 运算符结合使用。

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

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 的联合的可用密钥

如果使用的是基于 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*

字符串运算符结合使用。

账户 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 的联合身份验证