View a markdown version of this page

Menggunakan plugin TIP untuk mengakses Layanan AWS - AWS SDK dan Alat

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan plugin TIP untuk mengakses Layanan AWS

Propagasi identitas tepercaya (TIP) adalah fitur AWS IAM Identity Center yang memungkinkan administrator Layanan AWS untuk memberikan izin berdasarkan atribut pengguna seperti asosiasi grup. Dengan propagasi identitas tepercaya, konteks identitas ditambahkan ke peran IAM untuk mengidentifikasi pengguna yang meminta akses ke AWS sumber daya. Konteks ini disebarkan ke yang lain Layanan AWS.

Konteks identitas terdiri dari informasi yang Layanan AWS digunakan untuk membuat keputusan otorisasi ketika mereka menerima permintaan akses. Informasi ini mencakup metadata yang mengidentifikasi pemohon (misalnya, pengguna Pusat Identitas IAM), Layanan AWS akses yang diminta (misalnya, Amazon Redshift), dan ruang lingkup akses (misalnya, akses baca saja). Penerima Layanan AWS menggunakan konteks ini, dan izin apa pun yang diberikan kepada pengguna, untuk mengotorisasi akses ke sumber dayanya. Untuk informasi selengkapnya, lihat ikh tisar propagasi identitas tepercaya di Panduan AWS IAM Identity Center Pengguna.

Plugin TIP dapat digunakan dengan Layanan AWS dukungan propagasi identitas tepercaya. Sebagai kasus penggunaan referensi, lihat Meng onfigurasi aplikasi Amazon Q Business menggunakan AWS IAM Identity Center di Panduan Pengguna Amazon Q Business.

catatan

Jika Anda menggunakan Amazon Q Business, lihat Mengon figurasi aplikasi Amazon Q Business menggunakan AWS IAM Identity Center untuk instruksi khusus layanan.

Prasyarat untuk menggunakan plugin TIP

Sumber daya berikut diperlukan agar plugin berfungsi:

  1. Anda harus menggunakan salah satu AWS SDK untuk Java atau AWS SDK untuk JavaScript.

  2. Pastikan layanan yang Anda gunakan mendukung propagasi identitas tepercaya.

    Lihat kolom Meng aktifkan propagasi identitas tepercaya melalui Pusat Identitas IAM dari tabel aplikasi AWS terkelola yang terintegrasi dengan Pusat Identitas IAM di Panduan AWS IAM Identity Center Pengguna.

  3. Aktifkan Pusat Identitas IAM dan propagasi identitas tepercaya.

    Lihat prasyarat dan pertimbangan TIP di Panduan AWS IAM Identity Center Pengguna.

  4. Anda harus memiliki Identity-Center-integrated aplikasi.

    Lihat aplikasi AWS terkelola atau aplikasi yang dikelola pelanggan di Panduan AWS IAM Identity Center Pengguna.

  5. Anda harus menyiapkan penerbit token tepercaya (TTI) dan menghubungkan layanan Anda ke Pusat Identitas IAM.

    Lihat Prasyarat untuk penerbit token tepercaya dan Tu gas untuk menyiapkan penerbit token tepercaya di Panduan AWS IAM Identity Center Pengguna.

Untuk menggunakan plugin TIP dalam kode Anda

  1. Buat instance plugin propagasi identitas tepercaya.

  2. Buat instance klien layanan untuk berinteraksi dengan Anda Layanan AWS dan menyesuaikan klien layanan dengan menambahkan plugin propagasi identitas tepercaya.

Plugin TIP mengambil parameter input berikut:

  • webTokenProvider: Fungsi yang diterapkan pelanggan untuk mendapatkan token OpenID dari penyedia identitas eksternal mereka.

  • accessRoleArn: Peran IAM ARN akan diasumsikan oleh plugin dengan konteks identitas pengguna untuk mendapatkan kredenSIAL yang ditingkatkan identitas.

  • applicationArn: String pengenal unik untuk klien atau aplikasi. Nilai ini adalah ARN aplikasi yang memiliki hibah OAuth yang dikonfigurasi.

  • ssoOidcClient: (Opsional) Klien SSO OIDC, seperti SsoOidcClient untuk Java atau client-sso-oidc untuk JavaScript, dengan konfigurasi yang ditentukan pelanggan. Jika tidak disediakan, klien OIDC yang menggunakan applicationRoleArn akan dibuat instance dan digunakan.

  • stsClient: (Opsional) AWS STS Klien dengan konfigurasi yang ditentukan pelanggan, digunakan untuk mengasumsikan accessRoleArn dengan konteks identitas pengguna. Jika tidak disediakan, AWS STS klien yang menggunakan applicationRoleArn akan dibuat instance dan digunakan.

  • applicationRoleArn: (Opsional) Peran IAM ARN yang harus diasumsikan AssumeRoleWithWebIdentity sehingga OIDC dan AWS STS klien dapat di-bootstrap.

    • Jika tidak disediakan, kedua parameter ssoOidcClient dan stsClient parameter harus disediakan.

    • Jika disediakan, nilai tidak applicationRoleArn bisa sama dengan accessRoleArn parameter. applicationRoleArndigunakan untuk membangun STSClient, yang digunakan untuk mengasumsikan AccessRole. Jika peran yang sama digunakan untuk keduanya applicationRole danaccessRole, itu berarti menggunakan peran untuk mengambil dirinya sendiri (asumsi peran diri), yang tidak dianjurkan oleh AWS. Lihat pengumuman untuk lebih jelasnya.

Pertimbangan untuk sso OidcClient, STSClient, dan parameter aplikasi RoleArn

Saat mengonfigurasi plugin TIP, pertimbangkan persyaratan izin berikut berdasarkan parameter yang Anda berikan:

  • Jika Anda menyediakan ssoOidcClient danstsClient:

    • KredenSIAL pada ssoOidcClient harus memiliki oauth:CreateTokenWithIAM izin untuk memanggil pusat identitas untuk mendapatkan konteks pengguna khusus pusat identitas.

    • Kreden stsClient SIAL harus dimilikists:AssumeRole, dan sts:SetContext izin aktifaccessRole. accessRolejuga perlu dikonfigurasi dengan hubungan kepercayaan dengan kredenSIAL aktifstsClient.

  • Jika Anda menyediakanapplicationRoleArn:

    • applicationRoleharus memilikioauth:CreateTokenWithIAM, sts:AssumeRole dan sts:SetContext izin pada sumber daya yang diperlukan (instance iDC,accessRole) karena akan digunakan untuk membangun klien OIDC dan STS.

    • applicationRoleharus memiliki hubungan kepercayaan dengan penyedia identitas yang digunakan untuk menghasilkanwebToken, karena webToken akan digunakan untuk mengasumsikan ApplicationRole melalui AssumeRoleWithWebIdentity panggilan oleh plugin.

Contoh ApplicationRole konfigurasi:

Kebijakan Kepercayaan dengan penyedia token Web:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/IDENTITY_PROVIDER_URL" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "IDENTITY_PROVIDER_URL:aud": "CLIENT_ID_TO_BE_TRUSTED" } } } ] }

Kebijakan Izin:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole", "sts:SetContext" ], "Resource": [ "arn:aws:iam::111122223333:role/accessRole" ] }, { "Effect": "Allow", "Action": [ "sso-oauth:CreateTokenWithIAM" ], "Resource": [ "*" ] } ] }

Contoh kode menggunakan TIP

Contoh di bawah ini menunjukkan cara mengimplementasikan plugin TIP dalam kode Anda menggunakan AWS SDK untuk Java atau AWS SDK untuk JavaScript.

Java

Untuk menggunakan plugin TIP dalam AWS SDK untuk Java proyek Anda, Anda perlu mendeklarasikannya sebagai ketergantungan dalam pom.xml file proyek Anda.

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

Dalam kode sumber Anda, sertakan pernyataan paket yang diperlukan untuksoftware.amazon.awssdk.trustedidentitypropagation.

Contoh berikut menunjukkan dua cara untuk membuat instance plugin propagasi identitas tepercaya dan menambahkannya ke klien layanan. Kedua contoh menggunakan Amazon S3 sebagai layanan dan digunakan S3AccessGrantsPlugin untuk mengelola izin khusus pengguna, tetapi dapat diterapkan ke semua Layanan AWS yang mendukung propagasi identitas tepercaya (TIP).

catatan

Untuk contoh ini, Anda perlu mengatur izin khusus pengguna dari S3 Access Grants. Lihat dokumentasi S3 Access Grants untuk detail selengkapnya.

Opsi 1: Membangun dan lulus klien OIDC dan 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());

Opsi 2: Luluskan aplikasi RoleArn dan tunda pembuatan klien ke plugin

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());

Untuk detail dan sumber tambahan, lihat trusted-identi ty-propagation-java on. GitHub

JavaScript

Jalankan perintah berikut untuk menginstal paket plugin otentikasi TIP di AWS SDK untuk JavaScript proyek Anda:

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

Final package.json harus mencakup ketergantungan yang mirip dengan berikut ini:

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

Dalam kode sumber Anda, impor TrustedIdentityPropagationExtension dependensi yang diperlukan.

Contoh berikut menunjukkan dua cara untuk membuat instance plugin propagasi identitas tepercaya dan menambahkannya ke klien layanan. Kedua contoh menggunakan Amazon S3 sebagai layanan dan memanfaatkan Amazon S3 Access Grants untuk mengelola izin khusus pengguna, tetapi dapat diterapkan ke semua Layanan AWS yang mendukung propagasi identitas tepercaya (TIP).

catatan

Untuk contoh ini, Anda perlu mengatur izin khusus pengguna dari Amazon S3 Access Grants, lihat dokumentasi Amazon S3 Access Grants untuk detail selengkapnya.

Opsi 1: Membangun dan lulus klien OIDC dan 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); }

Opsi 2: Luluskan aplikasi RoleArn dan tunda pembuatan klien ke plugin

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); }

Untuk detail dan sumber tambahan, lihat trusted-identi ty-propagation-js di. GitHub