Menggunakan plugin TIP untuk mengakses Layanan AWS - AWS SDKs dan Tools

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

Trusted Identity Propagation (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 sumber daya. AWS 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 di ikhtisar 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 Mengonfigurasi aplikasi Amazon Q Business menggunakan AWS IAM Identity Center dalam Panduan Pengguna Bisnis Amazon Q.

catatan

Jika Anda menggunakan Amazon Q Business, lihat Mengonfigurasi aplikasi Amazon Q Business menggunakan AWS IAM Identity Center petunjuk 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. Verifikasi bahwa layanan yang Anda gunakan mendukung propagasi identitas tepercaya.

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

  3. Aktifkan Pusat Identitas IAM dan propagasi identitas tepercaya.

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

  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 IAM Identity Center.

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

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 sesuaikan 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 kredensil yang ditingkatkan identitas.

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

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

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

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

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

    • Jika disediakan, tidak applicationRoleArn bisa menjadi nilai yang 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 mengasumsikan dirinya sendiri (asumsi peran diri), yang tidak disarankan oleh. AWS Lihat pengumuman untuk lebih jelasnya.

Pertimbangan untukssoOidcClient,stsClient, dan parameter applicationRoleArn

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

  • Jika Anda menyediakan ssoOidcClient danstsClient:

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

    • Kredensil pada stsClient harus memilikists:AssumeRole, dan sts:SetContext izin pada. accessRole accessRolejuga perlu dikonfigurasi dengan hubungan kepercayaan dengan kredensil aktif. stsClient

  • Jika Anda menyediakanapplicationRoleArn:

    • applicationRoleharus memilikioauth:CreateTokenWithIAM, sts:AssumeRole dan sts:SetContext izin pada sumber daya yang diperlukan (contoh 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 AssumeRoleWithWebIdentitypanggilan oleh plugin.

Contoh ApplicationRole konfigurasi:

Kebijakan Kepercayaan dengan penyedia token 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" } } } ] }

Kebijakan Izin:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole", "sts:SetContext" ], "Resource": [ "accessRoleArn" ] }, { "Effect": "Allow", "Action": [ "sso-oauth:CreateTokenWithIAM" ], "Resource": [ "*" ] } ] }

Contoh kode menggunakan TIP

Contoh di bawah ini menunjukkan bagaimana menerapkan 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 dependensi dalam file proyek Anda. pom.xml

<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 Hibah Akses S3 untuk detail selengkapnya.

Opsi 1: Bangun dan lewati 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: Lulus applicationRoleArn 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-identity-propagation-javadi GitHub.

JavaScript

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

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

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

"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 yang mendukung propagasi identitas Layanan AWS tepercaya (TIP).

catatan

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

Opsi 1: Bangun dan lewati 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: Lulus applicationRoleArn 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-identity-propagation-jsdi GitHub.