使用 TIP 插件访问 Amazon Web Services 服务
可信身份传播(TIP)是 Amazon IAM Identity Center 的一项功能,让 Amazon Web Services 服务的管理员可以根据用户属性(例如组关系)授予权限。使用可信身份传播,可以向 IAM 角色添加身份上下文,以识别请求访问 Amazon 资源的用户身份。此上下文会传播到其他 Amazon Web Services 服务。
身份上下文包含当 Amazon Web Services 服务收到访问请求时将用于授权决的策信息。这些信息包括用于识别请求者(例如,某个 IAM Identity Center 用户)、被请求访问的 Amazon Web Services 服务(例如 Amazon Redshift)和访问范围(例如,只读权限)的元数据。收到请求的 Amazon Web Services 服务使用此上下文以及分配给用户的任何权限来授权访问其资源。有关更多信息,请参阅《Amazon IAM Identity Center 用户指南》中的 Trusted identity propagation overview。
使用 TIP 插件的先决条件
需要具有下列资源才能正常使用该插件:
-
您必须使用 适用于 Java 的 Amazon SDK 或 适用于 JavaScript 的 Amazon SDK。
-
确认您使用的服务支持可信身份传播。
请参阅《Amazon IAM Identity Center 用户指南》中 Amazon managed applications that integrate with IAM Identity Center 表的 Enables trusted identity propagation through IAM Identity Center 列。
-
启用 IAM Identity Center 和可信身份传播。
请参阅《Amazon IAM Identity Center 用户指南》中的 TIP prerequisites and considerations。
-
您必须有一个与 Identity Center 集成的应用程序。
请参阅《Amazon IAM Identity Center 用户指南》中的 Amazon managed applications 或 Customer managed applications。
-
您必须设置一个可信令牌颁发者(TTI)并将您的服务连接到 IAM Identity Center。
请参阅《Amazon IAM Identity Center 用户指南》中的 Prerequisites for trusted token issuers 和 Tasks for setting up a trusted token issuer。
在代码中使用 TIP 插件
-
创建可信身份传播插件实例。
-
通过添加可信身份传播插件来创建用于与 Amazon Web Services 服务交互的服务客户端实例,并自定义该服务客户端。
TIP 插件使用以下输入参数:
-
webTokenProvider:客户为了从其外部身份提供者处获取 OpenID 令牌而实现的函数。 -
accessRoleArn:该插件要使用用户的身份上下文代入的 IAM 角色的 ARN,用来获取身份增强型凭证。 -
applicationArn:客户端或应用程序的唯一标识符字符串。该值是已配置了 OAuth 授权的应用程序的 ARN。 -
ssoOidcClient:(可选)具有客户定义配置的 SSO OIDC 客户端,例如SsoOidcClient(用于 Java)或 client-sso-oidc(用于 JavaScript)。如果未提供,则将实例化并使用采用applicationRoleArn的 OIDC 客户端。 -
stsClient:(可选)具有客户定义配置的 Amazon STS 客户端,用于使用用户的身份上下文代入accessRoleArn。如果未提供,则将实例化并使用采用applicationRoleArn的 Amazon STS 客户端。 -
applicationRoleArn:(可选)将使用AssumeRoleWithWebIdentity代入的 IAM 角色的 ARN,用来引导 OIDC 和 Amazon STS 客户端。-
如果未提供,则必须同时提供
ssoOidcClient和stsClient参数。 -
如果提供,则
applicationRoleArn的值不能与accessRoleArn参数的值相同。applicationRoleArn用来构建用于代入 accessRole 的 stsClient。如果applicationRole和accessRole使用同一角色,则意味着要使用代入自身的角色(自我角色代入),Amazon 不建议这样操作。有关更多详细信息,请参阅公告。
-
ssoOidcClient、stsClient 和 applicationRoleArn 参数的注事意项
配置 TIP 插件时,根据您提供的参数应注意以下权限要求:
-
如果您提供了
ssoOidcClient和stsClient:-
ssoOidcClient上的凭证应具有oauth:CreateTokenWithIAM权限,以调用 Identity Center 来获取 Identity Center 特定的用户上下文。 -
stsClient上的凭证应具有accessRole上的sts:AssumeRole和sts:SetContext权限。accessRole还需要配置与stsClient上的凭证的信任关系。
-
-
如果您提供了
applicationRoleArn:-
applicationRole应具有所需资源(IdC 实例、accessRole)的oauth:CreateTokenWithIAM、sts:AssumeRole和sts:SetContext权限,因为该角色将用于构建 OIDC 和 STS 客户端。 -
applicationRole应与用于生成webToken的身份提供者建立信任关系,因为webToken将由该插件通过 AssumeRoleWithWebIdentity 调用来代入 applicationRole。
-
示例 ApplicationRole 配置:
Web 令牌提供者的信任策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::ACCOUNT_ID:oidc-provider/IDENTITY_PROVIDER_URL" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "IDENTITY_PROVIDER_URL:aud": "CLIENT_ID_TO_BE_TRUSTED" } } } ] }
权限策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole", "sts:SetContext" ], "Resource": [ "accessRoleArn" ] }, { "Effect": "Allow", "Action": [ "sso-oauth:CreateTokenWithIAM" ], "Resource": [ "*" ] } ] }
使用 TIP 的代码示例
以下示例演示了如何使用 适用于 Java 的 Amazon SDK 或 适用于 JavaScript 的 Amazon SDK 在代码中实现 TIP 插件。