TIP プラグインを使用して にアクセスする AWS のサービス - AWS SDKsとツール

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

TIP プラグインを使用して にアクセスする AWS のサービス

信頼できる ID 伝達 (TIP) は、 の管理者がグループの関連付けなどのユーザー属性に基づいてアクセス許可 AWS のサービス を付与 AWS IAM Identity Center できるようにする の機能です。信頼できる ID の伝播により、ID コンテキストが IAM ロールに追加され、 AWS リソースへのアクセスをリクエストしているユーザーを識別します。このコンテキストは他の AWS のサービスに伝達されます。

ID コンテキストは、 がアクセスリクエストを受信したときに承認の決定を行うために AWS のサービス 使用する情報で構成されます。この情報には、リクエスタ (IAM Identity Center ユーザーなど)、アクセスがリクエスト AWS のサービス される (Amazon Redshift など)、アクセス範囲 (読み取り専用アクセスなど) を識別するメタデータが含まれます。受信側 AWS のサービス は、このコンテキストとユーザーに割り当てられたアクセス許可を使用して、そのリソースへのアクセスを承認します。詳細については、「 AWS IAM Identity Center ユーザーガイド」の「信頼できる ID の伝播の概要」の「」を参照してください。

TIP プラグインは、信頼できる ID の伝播 AWS のサービス をサポートする で使用できます。リファレンスユースケースとして、「Amazon Q Business User Guide」の「Configuring an Amazon Q Business application using AWS IAM Identity Center」を参照してください。

注記

Amazon Q Business を使用している場合は、「Configuring an Amazon Q Business application using AWS IAM Identity Center」でサービス固有の手順を参照してください。

TIP プラグインを使用するための前提条件

プラグインを機能させるには、次のリソースが必要です。

  1. AWS SDK for Java または のいずれかを使用する必要があります AWS SDK for JavaScript。

  2. 使用しているサービスが信頼できる ID の伝播をサポートしていることを確認します。

    AWS IAM Identity Center ユーザーガイド」にある「AWS managed applications that integrate with IAM Identity Center」の表の「Enables trusted identity propagation through IAM Identity Center」列を参照してください。

  3. IAM Identity Center と信頼できる ID の伝播を有効にします。

    AWS IAM Identity Center ユーザーガイド」の「TIP prerequisites and considerations」を参照してください。

  4. Identity-Center-integrated アプリケーションが必要です。

    AWS IAM Identity Center ユーザーガイド」の「AWS managed applications」または「Customer managed applications」を参照してください。

  5. 信頼できるトークン発行者 (TTI) を設定し、サービスを IAM Identity Center に接続する必要があります。

    AWS IAM Identity Center ユーザーガイド」の「Prerequisites for trusted token issuers」および「Tasks for setting up a trusted token issuer」を参照してください。

コードで TIP プラグインを使用するには

  1. 信頼できる ID の伝播プラグインのインスタンスを作成します。

  2. とやり取りするためのサービスクライアントインスタンスを作成し AWS のサービス 、信頼できる ID 伝達プラグインを追加してサービスクライアントをカスタマイズします。

TIP プラグインは以下の入力パラメータを使用します。

  • webTokenProvider: 外部 ID プロバイダーから OpenID トークンを取得するためにお客様が実装する関数。

  • accessRoleArn: ユーザーの ID コンテキストを使用してプラグインが引き受ける IAM ロール ARN。ID 拡張認証情報を取得します。

  • applicationArn: クライアントまたはアプリケーションの一意の識別子文字列。この値は、OAuth 許可が設定されたアプリケーション ARN です。

  • ssoOidcClient: (オプション) SsoOidcClient for Java や client-sso-oidc for JavaScript など、お客様が定義した設定の SSO OIDC クライアント。指定しない場合、applicationRoleArn を使用する OIDC クライアントがインスタンス化されて使用されます。

  • stsClient: (オプション) お客様が定義した設定の AWS STS クライアント。ユーザーの ID コンテキストで accessRoleArn を引き受けるために使用されます。指定しない場合、 を使用する AWS STS クライアントapplicationRoleArnはインスタンス化されて使用されます。

  • applicationRoleArn: (オプション) OIDC と AWS STS クライアントをブートストラップAssumeRoleWithWebIdentityできるように で引き受ける IAM ロール ARN。

    • 指定しない場合は、ssoOidcClientstsClient のパラメータの両方を指定する必要があります。

    • 指定した場合、applicationRoleArnaccessRoleArn のパラメータと同じ値にすることはできません。 applicationRoleArn は accessRole を引き受けるために使用される stsClient の構築に使用されます。applicationRole と の両方に同じロールが使用されている場合accessRole、ロールを使用してそれ自体を引き受ける (自己ロールの引き受け) ことを意味します。これは推奨されません AWS。詳細については、お知らせを参照してください。

ssoOidcClientstsClient、および applicationRoleArn のパラメータに関する考慮事項

TIP プラグインを設定するときは、指定するパラメータに基づいて、次のアクセス許可要件を考慮してください。

  • ssoOidcClientstsClient を指定する場合:

    • ssoOidcClient の認証情報には、アイデンティティセンターを呼び出してアイデンティティセンター固有のユーザーコンテキストを取得するための oauth:CreateTokenWithIAM アクセス許可が必要です。

    • stsClient の認証情報には、sts:AssumeRole と、accessRolests:SetContext のアクセス許可が必要です。また、accessRole には、stsClient の認証情報との信頼関係を構成する必要があります。

  • applicationRoleArn を指定する場合:

    • applicationRole は OIDC および STS クライアントの構築に使用されるため、必要なリソース (IdC インスタンス、accessRole) での oauth:CreateTokenWithIAMsts:AssumeRole、および sts:SetContext のアクセス許可が必要です。

    • webToken はプラグインによる AssumeRoleWithWebIdentity 呼び出しを介して applicationRole を引き受けるために使用されるため、applicationRole は、webToken の生成に使用される ID プロバイダーとの信頼関係が必要です。

ApplicationRole 構成の例:

ウェブトークンプロバイダーとの信頼ポリシー:

{ "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 を使用したコードの例

以下の例は、 AWS SDK for Java または を使用してコードに TIP プラグインを実装する方法を示しています AWS SDK for JavaScript。

Java

AWS SDK for Java プロジェクトで TIP プラグインを使用するには、プロジェクトの pom.xml ファイルで TIP プラグインを依存関係として宣言する必要があります。

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

ソースコードに、software.amazon.awssdk.trustedidentitypropagation に必要なパッケージステートメントを含めます。

次の例は、信頼できる ID の伝播プラグインのインスタンスを作成し、サービスクライアントに追加する 2 つの方法を示しています。どちらの例も Amazon S3 をサービスとして使用し、 S3AccessGrantsPluginを使用してユーザー固有のアクセス許可を管理しますが、信頼できる ID 伝達 (TIP) AWS のサービス をサポートする任意の に適用できます。

注記

これらの例では、S3 Access Grants からユーザー固有のアクセス許可を設定する必要があります。詳細については、S3 Access Grants のドキュメントを参照してください。

オプション 1: OIDC クライアントと STS クライアントを構築して渡す

SsoOidcClient oidcClient = SsoOidcClient.builder() .region(Region.US_EAST_1) .credentialsProvider(credentialsProvider).build(); StsClient stsClient = StsClient.builder() .region(Region.US_EAST_1) .credentialsProvider(credentialsProvider).build(); TrustedIdentityPropagationPlugin trustedIdentityPropagationPlugin = TrustedIdentityPropagationPlugin.builder() .webTokenProvider(() -> webToken) .applicationArn(idcApplicationArn) .accessRoleArn(accessRoleArn) .ssoOidcClient(oidcClient) .stsClient(stsClient) .build(); S3AccessGrantsPlugin accessGrantsPlugin = S3AccessGrantsPlugin.builder() .build(); S3Client s3Client = S3Client.builder().region(Region.US_EAST_1) .crossRegionAccessEnabled(true) .addPlugin(trustedIdentityPropagationPlugin) .addPlugin(accessGrantsPlugin) .build(); final var resp = s3Client.getObject(GetObjectRequest.builder() .key("path/to/object/fileName") .bucket("bucketName") .build());

オプション 2: applicationRoleArn を渡してクライアント作成をプラグインに任せる

TrustedIdentityPropagationPlugin trustedIdentityPropagationPlugin = TrustedIdentityPropagationPlugin.builder() .webTokenProvider(() -> webToken) .applicationArn(idcApplicationArn) .accessRoleArn(accessRoleArn) .applicationRoleArn(applicationRoleArn) .build(); S3AccessGrantsPlugin accessGrantsPlugin = S3AccessGrantsPlugin.builder() .build(); S3Client s3Client = S3Client.builder().region(Region.US_EAST_1) .crossRegionAccessEnabled(true) .addPlugin(trustedIdentityPropagationPlugin) .addPlugin(accessGrantsPlugin) .build(); final var resp = s3Client.getObject(GetObjectRequest.builder() .key("path/to/object/fileName") .bucket("bucketName") .build());

詳細とソースについては、GitHub の「trusted-identity-propagation-java」を参照してください。

JavaScript

次のコマンドを実行して、TIP 認証プラグインパッケージを AWS SDK for JavaScript プロジェクトにインストールします。

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

最後の package.json には、次のような依存関係を含める必要があります。

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

ソースコードで、必要な TrustedIdentityPropagationExtension 依存関係をインポートします。

次の例は、信頼できる ID の伝播プラグインのインスタンスを作成し、サービスクライアントに追加する 2 つの方法を示しています。どちらの例も Amazon S3 をサービスとして使用し、Amazon S3 Access Grants を使用してユーザー固有のアクセス許可を管理しますが、信頼できる ID 伝達 (TIP) AWS のサービス をサポートする任意の に適用できます。

注記

これらの例については、Amazon S3 Access Grants からユーザー固有のアクセス許可を設定する必要があります。詳細については、S3 Access Grants のドキュメントを参照してください。

オプション 1: OIDC クライアントと STS クライアントを構築して渡す

import { S3Client, GetObjectCommand } from "@aws-sdk/client-s3"; import { S3ControlClient, GetDataAccessCommand } from "@aws-sdk/client-s3-control"; import { TrustedIdentityPropagationExtension } from "@aws-sdk-extension/trusted-identity-propagation"; const s3ControlClient = new S3ControlClient({ region: "us-east-1", extensions: [ TrustedIdentityPropagationExtension.create({ webTokenProvider: async () => { return 'ID_TOKEN_FROM_YOUR_IDENTITY_PROVIDER'; }, ssoOidcClient: customOidcClient, stsClient: customStsClient, accessRoleArn: accessRoleArn, applicationArn: applicationArn, }), ], }); const getDataAccessParams = { Target: "S3_URI_PATH", Permission: "READ", AccountId: ACCOUNT_ID, InstanceArn: S3_ACCESS_GRANTS_ARN, TargetType: "Object", }; try { const command = new GetDataAccessCommand(getDataAccessParams); const response = await s3ControlClient.send(command); const credentials = response.Credentials; // Create a new S3 client with the temporary credentials const temporaryS3Client = new S3Client({ region: "us-east-1", credentials: { accessKeyId: credentials.AccessKeyId, secretAccessKey: credentials.SecretAccessKey, sessionToken: credentials.SessionToken, }, }); // Use the temporary S3 client to perform the operation const s3Params = { Bucket: "BUCKET_NAME", Key: "S3_OBJECT_KEY", }; const getObjectCommand = new GetObjectCommand(s3Params); const s3Object = await temporaryS3Client.send(getObjectCommand); const fileContent = await s3Object.Body.transformToString(); // Process the S3 object data console.log("Successfully retrieved S3 object:", fileContent); } catch (error) { console.error("Error accessing S3 data:", error); }

オプション 2: applicationRoleArn を渡してクライアント作成をプラグインに任せる

import { S3Client, GetObjectCommand } from "@aws-sdk/client-s3"; import { S3ControlClient, GetDataAccessCommand } from "@aws-sdk/client-s3-control"; import { TrustedIdentityPropagationExtension } from "@aws-sdk-extension/trusted-identity-propagation"; const s3ControlClient = new S3ControlClient({ region: "us-east-1", extensions: [ TrustedIdentityPropagationExtension.create({ webTokenProvider: async () => { return 'ID_TOKEN_FROM_YOUR_IDENTITY_PROVIDER'; }, accessRoleArn: accessRoleArn, applicationRoleArn: applicationRoleArn, applicationArn: applicationArn, }), ], }); // Same S3 AccessGrants workflow as Option 1 const getDataAccessParams = { Target: "S3_URI_PATH", Permission: "READ", AccountId: ACCOUNT_ID, InstanceArn: S3_ACCESS_GRANTS_ARN, TargetType: "Object", }; try { const command = new GetDataAccessCommand(getDataAccessParams); const response = await s3ControlClient.send(command); const credentials = response.Credentials; const temporaryS3Client = new S3Client({ region: "us-east-1", credentials: { accessKeyId: credentials.AccessKeyId, secretAccessKey: credentials.SecretAccessKey, sessionToken: credentials.SessionToken, }, }); const s3Params = { Bucket: "BUCKET_NAME", Key: "S3_OBJECT_KEY", }; const getObjectCommand = new GetObjectCommand(s3Params); const s3Object = await temporaryS3Client.send(getObjectCommand); const fileContent = await s3Object.Body.transformToString(); console.log("Successfully retrieved S3 object:", fileContent); } catch (error) { console.error("Error accessing S3 data:", error); }

詳細とソースについては、GitHub の「trusted-identity-propagation-js」を参照してください。