Verwenden des TIP-Plugins für den Zugriff AWS-Services - AWS SDKs und Tools

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden des TIP-Plugins für den Zugriff AWS-Services

Trusted Identity Propagation (TIP) ist eine Funktion AWS IAM Identity Center , die es Administratoren ermöglicht, Berechtigungen auf der Grundlage von Benutzerattributen wie Gruppenzuordnungen AWS-Services zu gewähren. Bei Trusted Identity Propagation wird einer IAM-Rolle ein Identitätskontext hinzugefügt, um den Benutzer zu identifizieren, der Zugriff auf AWS Ressourcen anfordert. Dieser Kontext wird an andere weitergegeben. AWS-Services

Der Identitätskontext umfasst Informationen, AWS-Services anhand derer Autorisierungsentscheidungen getroffen werden, wenn sie Zugriffsanfragen erhalten. Zu diesen Informationen gehören Metadaten, mit denen der Anforderer (z. B. ein IAM Identity Center-Benutzer), der AWS-Service Zugriff angefordert wird (z. B. Amazon Redshift) und der Zugriffsumfang (z. B. schreibgeschützter Zugriff) identifiziert werden. Der Empfänger AWS-Service verwendet diesen Kontext und alle dem Benutzer zugewiesenen Berechtigungen, um den Zugriff auf seine Ressourcen zu autorisieren. Weitere Informationen finden Sie in der Übersicht über die Verbreitung vertrauenswürdiger Identitäten im AWS IAM Identity Center Benutzerhandbuch.

Das TIP-Plugin kann zusammen mit AWS-Services diesem Plugin verwendet werden, das die Verbreitung vertrauenswürdiger Identitäten unterstützt. Einen Referenzanwendungsfall finden Sie unter Konfiguration einer Amazon Q Business-Anwendung mithilfe von Amazon Q AWS IAM Identity Center im Amazon Q Business-Benutzerhandbuch.

Anmerkung

Wenn Sie Amazon Q Business verwenden, finden Sie unter Konfiguration einer Amazon Q Business-Anwendung mithilfe AWS IAM Identity Center von servicespezifischen Anweisungen.

Voraussetzungen für die Verwendung des TIP-Plug-ins

Die folgenden Ressourcen sind erforderlich, damit das Plugin funktioniert:

  1. Sie müssen entweder das AWS SDK für Java oder das verwenden AWS SDK für JavaScript.

  2. Stellen Sie sicher, dass der Dienst, den Sie verwenden, die Verbreitung vertrauenswürdiger Identitäten unterstützt.

    Weitere Informationen finden Sie in der Spalte Aktiviert die Verbreitung vertrauenswürdiger Identitäten über IAM Identity Center in der Tabelle AWS verwaltete Anwendungen, die in IAM Identity Center integriert sind, im AWS IAM Identity Center Benutzerhandbuch.

  3. Aktivieren Sie IAM Identity Center und die Verbreitung vertrauenswürdiger Identitäten.

    Weitere Informationen zu den Voraussetzungen und Überlegungen zu TIP finden Sie im AWS IAM Identity Center Benutzerhandbuch.

  4. Sie müssen über eine Identity-Center-integrated Bewerbung verfügen.

    Weitere Informationen finden Sie AWS im AWS IAM Identity Center Benutzerhandbuch unter Verwaltete Anwendungen oder Vom Kunden verwaltete Anwendungen.

  5. Sie müssen einen vertrauenswürdigen Token-Aussteller (TTI) einrichten und Ihren Service mit dem IAM Identity Center verbinden.

    Weitere Informationen finden Sie im Benutzerhandbuch unter Voraussetzungen für vertrauenswürdige Token-Aussteller und Aufgaben für die Einrichtung eines vertrauenswürdigen Token-Ausstellers.AWS IAM Identity Center

Um das TIP-Plugin in Ihrem Code zu verwenden

  1. Erstellen Sie eine Instanz des Plugins zur Verbreitung vertrauenswürdiger Identitäten.

  2. Erstellen Sie eine Service-Client-Instanz für die Interaktion mit Ihrem AWS-Service und passen Sie den Service-Client an, indem Sie das Trusted Identity Propagation-Plugin hinzufügen.

Das TIP-Plugin verwendet die folgenden Eingabeparameter:

  • webTokenProvider: Eine Funktion, die der Kunde implementiert, um ein OpenID-Token von seinem externen Identitätsanbieter zu erhalten.

  • accessRoleArn: Der ARN der IAM-Rolle, den das Plugin mit dem Identitätskontext des Benutzers annehmen soll, um die identitätserweiterten Anmeldeinformationen abzurufen.

  • applicationArn: Die eindeutige Kennungszeichenfolge für den Client oder die Anwendung. Dieser Wert ist ein Anwendungs-ARN, für den OAuth Grants konfiguriert sind.

  • ssoOidcClient: (Optional) Ein SSO-OIDC-Client, z. B. SsoOidcClientfür Java oder client-sso-oidcfür JavaScript, mit kundenspezifischen Konfigurationen. Falls nicht angegeben, wird ein OIDC-Client, der verwendet, instanziiert und verwendetapplicationRoleArn.

  • stsClient: (Optional) Ein AWS STS Client mit kundenspezifischen Konfigurationen, der verwendet wird, um den Identitätskontext des accessRoleArn Benutzers anzunehmen. Falls nicht angegeben, applicationRoleArn wird ein AWS STS verwendender Client instanziiert und verwendet.

  • applicationRoleArn: (Optional) Der ARN der IAM-Rolle, mit dem angenommen werden soll, AssumeRoleWithWebIdentity damit der OIDC und die AWS STS Clients gebootet werden können.

    • Wenn nicht angegeben, müssen sowohl der als auch der ssoOidcClient Parameter angegeben werden. stsClient

    • Falls angegeben, applicationRoleArn kann es nicht derselbe Wert wie der accessRoleArn Parameter sein. applicationRoleArnwird verwendet, um den STSClient zu erstellen, der verwendet wird, um AccessRole zu übernehmen. Wenn dieselbe Rolle für beide applicationRole und verwendet wird, würde das bedeutenaccessRole, eine Rolle zu verwenden, um sich selbst anzunehmen (Übernahme der eigenen Rolle), wovon jedoch abgeraten wird. AWS Weitere Einzelheiten finden Sie in der Ankündigung.

Überlegungen zu ssoOidcClientstsClient, und applicationRoleArn Parametern

Beachten Sie bei der Konfiguration des TIP-Plug-ins die folgenden Berechtigungsanforderungen, je nachdem, welche Parameter Sie angeben:

  • Wenn Sie angeben ssoOidcClient undstsClient:

    • Die Anmeldeinformationen auf der ssoOidcClient sollten oauth:CreateTokenWithIAM berechtigt sein, Identity Center anzurufen, um den Identity Center-spezifischen Benutzerkontext abzurufen.

    • Die Anmeldeinformationen stsClient sollten aktiviert sein und sts:AssumeRole die sts:SetContext Berechtigungen müssen aktiviert seinaccessRole. accessRolemuss außerdem mit einer Vertrauensstellung konfiguriert werden, bei der die Anmeldeinformationen aktiviert sindstsClient.

  • Wenn Sie Folgendes bereitstellenapplicationRoleArn:

    • applicationRolesollte über die oauth:CreateTokenWithIAM sts:SetContext Berechtigungen sts:AssumeRole und für die erforderlichen Ressourcen (IdC-InstanzaccessRole) verfügen, da sie zum Erstellen von OIDC- und STS-Clients verwendet wird.

    • applicationRolesollte eine Vertrauensbeziehung mit dem Identitätsanbieter haben, der für die Generierung verwendet wirdwebToken, da dieser verwendet webToken wird, um die ApplicationRole über den AssumeRoleWithWebIdentityAufruf durch das Plugin zu übernehmen.

ApplicationRole Beispielkonfiguration:

Vertrauensrichtlinie mit Web-Token-Anbieter:

{ "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" } } } ] }

Genehmigungsrichtlinie:

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

Codebeispiele mit TIP

Die folgenden Beispiele zeigen, wie Sie das TIP-Plugin mit dem AWS SDK für Java oder dem in Ihrem Code implementieren AWS SDK für JavaScript.

Java

Um das TIP-Plugin in Ihrem AWS SDK für Java Projekt zu verwenden, müssen Sie es als Abhängigkeit in der pom.xml Datei Ihres Projekts deklarieren.

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

Fügen Sie in Ihrem Quellcode die erforderliche Paketanweisung für einsoftware.amazon.awssdk.trustedidentitypropagation.

Die folgenden Beispiele zeigen zwei Möglichkeiten, eine Instanz des Trusted Identity Propagation Plug-ins zu erstellen und sie einem Service-Client hinzuzufügen. In beiden Beispielen wird Amazon S3 als Service und S3AccessGrantsPlugin zur Verwaltung benutzerspezifischer Berechtigungen verwendet. Sie können jedoch auch auf alle Anwendungen angewendet werden, AWS-Service die Trusted Identity Propagation (TIP) unterstützen.

Anmerkung

Für diese Beispiele müssen Sie die benutzerspezifischen Berechtigungen von S3 Access Grants einrichten. Weitere Informationen finden Sie in der Dokumentation zu S3 Access Grants.

Option 1: OIDC- und STS-Clients erstellen und übergeben

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

Option 2: Übergeben applicationRoleArn und verschieben Sie die Client-Erstellung an das 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());

Weitere Informationen und Quellen finden Sie trusted-identity-propagation-javaunter GitHub.

JavaScript

Führen Sie den folgenden Befehl aus, um das TIP-Authentifizierungs-Plugin-Paket in Ihrem AWS SDK für JavaScript Projekt zu installieren:

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

Das Finale package.json sollte eine Abhängigkeit enthalten, die der folgenden ähnelt:

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

Importieren Sie die erforderliche TrustedIdentityPropagationExtension Abhängigkeit in Ihren Quellcode.

Die folgenden Beispiele zeigen zwei Möglichkeiten, eine Instanz des Trusted Identity Propagation Plug-ins zu erstellen und sie einem Service-Client hinzuzufügen. Beide Beispiele verwenden Amazon S3 als Service und Amazon S3 Access Grants zur Verwaltung benutzerspezifischer Berechtigungen, können aber auch auf alle angewendet werden, AWS-Service die Trusted Identity Propagation (TIP) unterstützen.

Anmerkung

Für diese Beispiele müssen Sie die benutzerspezifischen Berechtigungen von Amazon S3 Access Grants einrichten. Weitere Informationen finden Sie in der Dokumentation zu Amazon S3 Access Grants.

Option 1: OIDC- und STS-Clients erstellen und übergeben

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

Option 2: Übergeben applicationRoleArn und verschieben Sie die Client-Erstellung an das 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); }

Weitere Informationen und Quellen finden Sie trusted-identity-propagation-jsunter GitHub.