在 Amazon 托管应用程序中使用可信身份传播 - Amazon IAM Identity Center
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Amazon 托管应用程序中使用可信身份传播

可信身份传播使 Amazon 托管应用程序能够代表用户请求访问 Amazon 服务中的数据。对数据访问的管理基于用户身份,因此,管理员可以根据用户的现有用户和组成员资格,授予访问权限。用户的身份、代表他们执行的操作以及其他事件都记录在服务特定的日志和 CloudTrail事件中。

可信身份传播基于 OAuth 2.0 标准。要使用此功能, Amazon 托管应用程序必须与 IAM 身份中心集成。 Amazon 分析服务可能会提供基于驱动程序的接口,使兼容的应用程序能够使用可信身份传播。例如,JDBC、ODBC 和 Python 驱动程序允许兼容的查询工具使用可信身份传播,您无需完成其他设置步骤。

为可信身份传播设置 Amazon 托管应用程序

Amazon 支持可信身份传播的服务提供了管理用户界面和 API,您可以使用它们来设置此功能。无需在 IAM Identity Center 配置这些服务。

以下是设置可信身份传播 Amazon 服务的高级流程。具体步骤因应用程序提供的管理界面和 API 而异。

  1. 使用应用程序控制台或 API 将应用程序连接到您的 IAM Identity Center 实例

    使用 Amazon 托管应用程序或应用程序 API 的控制台将应用程序连接到您的 IAM Identity Center 实例。当您使用应用程序控制台时,管理用户界面会包含一个小部件,用于简化设置和连接过程。

  2. 使用应用程序控制台或 API 设置用户对应用程序资源的访问权限

    完成此步骤以授权用户可以访问哪些资源或数据。访问权限取决于用户身份或组成员资格。授权模式因应用程序而异。

    重要

    您必须完成此步骤,才能允许用户访问 Amazon 服务的资源。否则,即使发出请求的应用程序对访问服务的请求得到授权,用户也无法访问资源。

Amazon 托管应用程序的可信身份传播请求流

所有流向 Amazon 托管应用程序的可信身份传播流程都必须从从 IAM Identity Center 获取令牌的应用程序开始。此令牌是必需的,因为它包含对 IAM Identity Center 已知用户和在 IAM Identity Center 注册的应用程序的引用。

以下各节介绍 Amazon 托管应用程序如何从 IAM Identity Center 获取令牌以启动可信身份传播。

基于 Web 的 IAM Identity Center 身份验证

在此流程中, Amazon 托管应用程序使用 IAM Identity Center 进行身份验证提供基于 Web 的单点登录体验。

当用户打开 Amazon 托管应用程序时,会触发使用 IAM Identity Center 的单点登录流程。如果 IAM Identity Center 中没有该用户的活动会话,则会根据您指定的身份源,向用户展示登录页面,然后 IAM Identity Center 会为该用户创建一个会话。

IAM Identity Center 为 Amazon 托管应用程序提供了一个令牌,其中包括用户的身份以及应用程序注册使用的受众 (Aud) 和相关范围列表。然后,应用程序可以使用该令牌向其他接收端 Amazon 服务端发出请求。

基于控制台、由用户发起的身份验证请求

在此流程中, Amazon 托管应用程序提供了用户启动的控制台体验。

在这种情况下, Amazon 托管应用程序是在担任角色后从 Amazon 管理控制台进入的。要使应用程序获取令牌,用户必须发起一个过程,触发应用程序对用户进行身份验证。这将使用 IAM Identity Center 发起身份验证,将用户重定向至您配置的身份源。

应用程序获取令牌后

发出请求的应用程序从 IAM Identity Center 获取令牌后,该应用程序会定期刷新令牌,令牌可在用户会话的生命周期内使用。在此期间,该应用程序可能会:

  • 获取有关令牌的更多信息,以确定用户是谁,以及该应用程序可以在哪些范围内与其他接收端 Amazon 托管应用程序一起使用。

  • 在调用中将令牌传递给其他支持使用令牌的接收 Amazon 托管应用程序。

  • 获取身份增强型 IAM 角色会话,用于向使用 Amazon 签名版本 4 的其他 Amazon 托管应用程序发出请求。

    身份增强型 IAM 角色会话是一种 IAM 角色会话,包含了在 IAM Identity Center 创建的令牌中存储的用户传播身份。

身份增强型 IAM 角色会话

使应用程序 Amazon Security Token Service 能够获得身份增强型 IAM 角色会话。 Amazon 在角色会话中支持用户上下文的托管应用程序可以使用身份信息根据角色会话中的用户来授权访问权限。这种新的上下文使应用程序能够通过 Amazon 签名版本 4 API 请求向支持可信身份传播的 Amazon 托管应用程序发出请求。

当 Amazon 托管应用程序使用身份增强型 IAM 角色会话访问资源时,会 CloudTrail 记录用户的身份(用户 ID)、启动会话和采取的操作。

当应用程序使用身份增强型 IAM 角色会话向接收端应用程序发出请求时,它会为会话添加上下文,以便接收端应用程序可以根据用户的身份、组成员资格或 IAM 角色对访问授权。如果接收端应用程序或请求的资源未配置为根据用户身份或组成员资格对访问授权,支持可信身份传播的接收端应用程序将返回错误。

要避免此问题,请执行以下操作之一:

  • 验证接收端应用程序是否连接到 IAM Identity Center。

  • 使用接收端应用程序的控制台或应用程序 API,将应用程序设置为根据用户身份或组成员资格对访问资源授权。这里的设置要求因应用程序而异。

有关更多信息,请参阅接收端 Amazon 托管应用程序的文档。

身份增强型 IAM 角色会话的类型

应用程序通过向 Amazon STS AssumeRole API 发出请求并在请求的ProvidedContexts参数中传递上下文断言来获得身份增强型 IAM 角色会话。AssumeRole上下文断言从 idToken 声明中获取,该声明在 SSO OIDC CreateTokenWithIAM 请求的响应中提供。

Amazon STS 可以创建两种不同类型的身份增强型 IAM 角色会话,具体取决于为请求提供的上下文断言:AssumeRole

  • 仅将用户身份记录到的会话 CloudTrail。

  • 基于传播的用户身份启用授权并将其记录到的会话。 CloudTrail

要从中获取仅提供在 CloudTrail 跟踪中注册 Amazon STS 的审计信息的身份增强型 IAM 角色会话,请向请求提供sts:audit_context声明的值。AssumeRole要获得同时允许接收 Amazon 服务授权 IAM Identity Center 用户执行操作的会话,请向AssumeRole请求提供sts:identity_context索赔的价值。您只能提供一个上下文。

通过 sts:audit_context 创建的身份增强型 IAM 角色会话

当使用使用创建的身份增强型 IAM 角色会话向 Amazon 服务发出请求时sts:audit_context,用户的 IAM Identity Center userId 将登录到该OnBehalfOf元素 CloudTrail 中。

"userIdentity": { "type": "AssumedRole", "principalId": "AROAEXAMPLE:MyRole", "arn": "arn:aws:sts::111111111111:assumed-role/MyRole/MySession", "accountId": "111111111111", "accessKeyId": "ASIAEXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAEXAMPLE", "arn": "arn:aws:iam::111111111111:role/MyRole", "accountId": "111111111111", "userName": "MyRole" }, "attributes": { "creationDate": "2023-12-12T13:55:22Z", "mfaAuthenticated": "false" } }, "onBehalfOf": { "userId": "11111111-1111-1111-1111-1111111111", "identityStoreArn": "arn:aws:identitystore::111111111111:identitystore/d-111111111" } }
注意

这些会话不能用于授权 Identity Center 用户。但它们仍然可以用来授权 IAM 角色。

要从中获取此类角色会话 Amazon STS,请在请求参数中为AssumeRole请求提供该sts:audit_contextProvidedContexts字段的值。使用 arn:aws:iam::aws:contextProvider/IdentityStore 作为 ProviderArn 的值。

通过 sts:identity_context 创建的身份增强型 IAM 角色会话

当用户使用使用创建的身份增强型 IAM 角色会话向 Amazon 服务发出请求时,用户的 IAM Identity Center userId 将以与sts:identity_context创建的会话相同的方式登录到 CloudTrail 该onBehalfOf元素。sts:audit_context

除了将 IAM Identity Center 用户登录userId到之外 CloudTrail,支持的 API 还使用这种类型的会话根据传播的用户身份授权操作。有关支持的 API 的 IAM 操作列表,请参阅AWSIAMIdentityCenterAllowListForIdentityContext Amazon 托管策略。当使用创建身份增强型 IAM 角色会话时,此 Amazon 托管策略作为会话策略提供。sts:identity_context该策略禁止您将角色会话与不支持的 Amazon 服务一起使用。

要从中获取此类角色会话 Amazon STS,请在请求参数中为AssumeRole请求提供该sts:identity_contextProvidedContexts字段的值。使用 arn:aws:iam::aws:contextProvider/IdentityStore 作为 ProviderArn 的值。

Amazon 托管应用程序的设置流程和请求流程

本节介绍使用可信身份传播并提供基于 Web 单点登录体验的 Amazon 托管应用程序的设置过程和请求流程。

下图提供了此过程的概述。

使用可信身份传播的 Amazon 托管应用程序的设置流程和请求流

以下步骤提供了有关此过程的更多信息。

  1. 使用 Amazon 托管应用程序或应用程序 API 的控制台执行以下操作:

    1. 将应用程序连接到您的 IAM Identity Center 实例。

    2. 设置权限,授权用户可以访问哪些应用程序资源。

  2. 当用户打开可以请求访问资源的 Amazon 托管应用程序(请求应用程序)时,请求流就开始了。

  3. 要获取访问接收 Amazon 托管应用程序的令牌,请求 Amazon 的托管应用程序会向 IAM Identity Center 发起登录请求。

    如果用户未登录,IAM Identity Center 会针对您指定的身份源,触发用户身份验证流程。这将为用户创建一个新的 Amazon Web Services 访问门户会话,其持续时间与您在 IAM Identity Center 中配置的时间相同。然后,IAM Identity Center 会生成与会话关联的令牌,应用程序可以在用户 Amazon Web Services 访问门户会话的剩余时间内运行。如果用户退出应用程序,或者您删除了他们的会话,会话将在两小时内自动结束。

  4. Amazon 托管应用程序向接收应用程序发起请求并提供其令牌。

  5. 接收端应用程序调用 IAM Identity Center 获取用户身份和在令牌中编码的范围。接收端应用程序还可能从 Identity Center 目录中请求获取用户属性或用户的组成员资格。

  6. 接收端应用程序使用其授权配置来确定用户是否得到授权,可访问所请求的应用程序资源。

  7. 如果用户有权访问所请求的应用程序资源,接收端应用程序会对请求做出响应。

  8. 用户的身份、代表其执行的操作以及其他事件记录在接收端应用程序的日志和 Amazon CloudTrail 事件中。记录这些信息的具体方式因应用程序而异。