使用 TIP 插件进行访问 Amazon Web Services 服务 - Amazon SDKs 和工具
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 TIP 插件进行访问 Amazon Web Services 服务

可信身份传播 (TIP) 是一项功能 Amazon IAM Identity Center ,允许的 Amazon Web Services 服务 管理员根据用户属性(例如群组关联)授予权限。通过可信身份传播,可以向 IAM 角色添加身份上下文,以识别请求访问 Amazon 资源的用户。此上下文会传播到其他 Amazon Web Services 服务上下文。

身份上下文包含在他们收到访问请求时 Amazon Web Services 服务 用于做出授权决策的信息。这些信息包括识别请求者(例如,IAM 身份中心用户)、请求访问权限的元数据(例如 Amazon Redshift)和访问范围(例如,只读权限)的元数据。 Amazon Web Services 服务 接收方 Amazon Web Services 服务 使用此上下文以及分配给用户的任何权限来授权访问其资源。有关更多信息,请参阅《 Amazon IAM Identity Center 用户指南》中的 “可信身份传播概述”。

使用 TIP 插件的先决条件

要使该插件正常运行,需要以下资源:

  1. 您必须使用 适用于 Java 的 Amazon SDK 或 适用于 JavaScript 的 Amazon SDK。

  2. 确认您使用的服务支持可信身份传播。

    请参阅《Amazon IAM Identity Center 用户指南》中与 IAM 身份中心集成的Amazon 托管应用程序的 “通过 IAM 身份中心启用可信身份传播” 列。

  3. 启用 IAM 身份中心和可信身份传播。

    请参阅《Amazon IAM Identity Center 用户指南》中的 TIP 先决条件和注意事项

  4. 你必须有一个 Identity-Center-integrated应用程序。

    请参阅Amazon IAM Identity Center 用户指南中的Amazon 管应用程序或客户托管应用程序。

  5. 您必须设置可信令牌发行者 (TTI) 并将您的服务连接到 IAM 身份中心。

    请参阅Amazon IAM Identity Center 用户指南》中的可信令牌发行者的先决条件设置可信令牌发行者的任务

在代码中使用 TIP 插件

  1. 创建可信身份传播插件的实例。

  2. 创建用于与您的交互的服务客户端实例, Amazon Web Services 服务 并通过添加可信身份传播插件来自定义服务客户端。

TIP 插件采用以下输入参数:

  • webTokenProvider:客户为从其外部身份提供商处获取 OpenID 令牌而实现的函数。

  • accessRoleArn:插件将扮演的 IAM 角色 ARN,其中包含用户的身份上下文,以获取身份增强证书。

  • applicationArn:客户端或应用程序的唯一标识符字符串。此值是已配置 OAuth 授权的应用程序 ARN。

  • applicationRoleArn:(可选)要使用的 IAM 角色 ARN,AssumeRoleWithWebIdentity以便可以在没有默认证书提供程序的情况下引导 OIDC 和 Amazon STS 客户端。如果未提供该值,则将使用accessRoleArn参数的值。

  • ssoOidcClient:(可选)具有客户定义配置的 SSO OIDC 客户端,例如SsoOidcClient适用于 Java 或 Javascript client-sso-oidc的客户端。如果未提供,则实例化并使用使用默认配置的 OIDC 客户端。

  • stsClient:(可选)具有 Amazon STS 客户定义配置的客户端,用于假设accessRoleArn用户的身份上下文。如果未提供,则实例化并使用使用默认配置的 Amazon STS 客户端。

Java

要在 适用于 Java 的 Amazon SDK 项目中使用 TIP 插件,您需要在项目pom.xml文件中将其声明为依赖项。

<dependency> <groupId>software.amazon.awsidentity.trustedIdentityPropagation</groupId> <artifactId>aws-sdk-java-trustedIdentityPropagation-java-plugin</artifactId> <version>1.0.0</version> </dependency>

在您的源代码中,包括所需的软件包声明software.amazon.awssdk.trustedidentitypropagation

以下示例代码显示如何创建可信身份传播插件的实例,然后将该插件添加到服务客户端实例。

此示例使用S3Client作为所选 Amazon Web Services 服务 客户端来显示如何获取 IAM 身份中心令牌。但是,任何其他支持 TIP Amazon Web Services 服务 的都将是类似的。

StsClient client = StsClient.builder() .region(Region.US_EAST_1) .credentialsProvider(AnonymousCredentialsProvider.create()).build(); TrustedIdentityPropagationPlugin trustedIdentityPropagationPlugin = TrustedIdentityPropagationPlugin.builder() .stsClient(client) .webTokenProvider(() -> idToken) .applicationArn(idcApplicationArn) .accessRoleArn(accessRoleArn) .ssoOidcClient(SsoOidcClient.builder().region(Region.US_EAST_1).build()) .build(); S3Client s3Client = S3Client.builder().region(Region.US_EAST_1).addPlugin(trustedIdentityPropagationPlugin) .build();

有关更多详细信息和来源,请参阅 trusted-identity-propagation-java上的 GitHub。

Javascript

运行以下命令在您的 适用于 JavaScript 的 Amazon SDK 项目中安装 TIP 身份验证插件包:

$ npm i @aws-sdk-extension/trusted-identity-propagation

最终package.json应包含类似于以下内容的依赖关系:

"dependencies": { "@aws-sdk-extension/trusted-identity-propagation": "^1.0.0" },

在源代码中,导入所需的TrustedIdentityPropagationExtension依赖关系。

以下示例代码显示如何创建可信身份传播插件的实例,然后将该插件添加到服务客户端实例。

此示例使用S3Client作为所选 Amazon Web Services 服务 客户端来显示如何获取 IAM 身份中心令牌。但是,任何其他支持 TIP Amazon Web Services 服务 的都将是类似的。

import { S3Client } from "@aws-sdk/client-s3"; import { TrustedIdentityPropagationExtension } from "@aws-sdk-extension/trusted-identity-propagation"; // Plugin configurations, please refer to the documentation on each of these fields. const applicationRoleArn = 'YOUR_APPLICATION_ROLE_ARN'; const accessRoleArn = 'YOUR_ACCESS_ROLE_ARN'; const applicationArn = 'YOUR_APPLICATION_ARN'; const s3Client = new S3Client({ region, extensions: [ TrustedIdentityPropagationExtension.create({ webTokenProvider: async () => { return 'ID_TOKEN_FROM_YOUR_IDENTITY_PROVIDER'; }, applicationRoleArn, accessRoleArn, applicationArn, }), ], });

有关更多详细信息和来源,请参阅trusted-identity-propagation-js上的 GitHub。