View a markdown version of this page

Verwenden Sie das TIP-Plugin 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 Sie das TIP-Plugin für den Zugriff AWS-Services

Trusted Identity Propagation (TIP) ist eine Funktion von AWS IAM Identity Center , die es Administratoren ermöglicht, Berechtigungen auf der Grundlage von Benutzerattributen wie Gruppenzuordnungen AWS-Services zu gewähren. Bei der Weitergabe vertrauenswürdiger Identitäten 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, die den Anforderer (z. B. einen IAM Identity Center-Benutzer), die AWS-Service Person, für die der Zugriff angefordert wird (z. B. Amazon Redshift), und den Umfang des Zugriffs (z. B. schreibgeschützter Zugriff) identifizieren. 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 Geräten verwendet werden AWS-Services , die die Verbreitung vertrauenswürdiger Identitäten unterstützen. Einen Referenzanwendungsfall finden Sie unter Konfiguration einer Amazon Q Business-Anwendung mithilfe AWS IAM Identity Center im Amazon Q Business-Benutzerhandbuch.

Anmerkung

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

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

Die folgenden Ressourcen sind erforderlich, damit das Plugin funktioniert:

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

  2. Stellen Sie sicher, dass der von Ihnen verwendete Dienst die Weitergabe vertrauenswürdiger Identitäten unterstützt.

    Weitere Informationen finden Sie in der Spalte Aktiviert die Weitergabe vertrauenswürdiger Identitäten durch IAM Identity Center 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 eine Identity-Center-integrated Bewerbung haben.

    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 unter Voraussetzungen für vertrauenswürdige Token-Aussteller und Aufgaben zur Einrichtung eines vertrauenswürdigen Token-Ausstellers im Benutzerhandbuch. AWS IAM Identity Center

Um das TIP-Plugin in Ihrem Code zu verwenden

  1. Erstellen Sie eine Instanz des Trusted Identity Propagation Plug-ins.

  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 IAM-Rollen-ARN, den das Plugin mit dem Identitätskontext des Benutzers annehmen muss, um die identitätserweiterten Anmeldeinformationen abzurufen.

  • applicationArn: Die eindeutige Identifikationszeichenfolge 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. SsoOidcClient für Java oder client-sso-oidc für JavaScript, mit kundendefinierten Konfigurationen. Falls nicht angegeben, wird ein OIDC-Client mithilfe von applicationRoleArn instanziiert und verwendet.

  • stsClient: (Optional) Ein AWS STS Client mit kundendefinierten Konfigurationen, der verwendet wird, um den accessRoleArn Identitätskontext des 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 AWS STS die Clients gebootet werden können.

    • Wenn nicht angegeben, müssen beide Parameter ssoOidcClient und stsClient angegeben werden.

    • Falls angegeben, applicationRoleArn kann nicht derselbe Wert wie der accessRoleArn Parameter sein. applicationRoleArnwird verwendet, um den StsClient zu erstellen, der zur Annahme von AccessRole verwendet wird. Wenn dieselbe Rolle für beide applicationRole und verwendet wird, würde das bedeutenaccessRole, dass eine Rolle verwendet wird, um sich selbst zu übernehmen (Eigenrollenübernahme), wovon abgeraten wird. AWS Weitere Informationen finden Sie in der Ankündigung.

Überlegungen zu SSO OidcClient, STSClient und Anwendungsparametern RoleArn

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

  • Wenn Sie ssoOidcClient und angebenstsClient:

    • Die Anmeldeinformationen auf dem ssoOidcClient sollten die oauth:CreateTokenWithIAM Berechtigung haben, das Identity Center anzurufen, um den für das Identity Center spezifischen Benutzerkontext abzurufen.

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

  • Wenn Sie Folgendes bereitstellenapplicationRoleArn:

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

    • applicationRolesollte eine Vertrauensbeziehung zu dem Identitätsanbieter haben, der zur Generierung von verwendet wirdwebToken, da der verwendet webToken wird, um die ApplicationRole über den AssumeRoleWithWebIdentity Aufruf des Plugins anzunehmen.

ApplicationRole Beispielkonfiguration:

Vertrauensrichtlinie mit Web-Token-Anbieter:

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

Genehmigungsrichtlinie:

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

Codebeispiele mit TIP

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

Java

Um das TIP-Plugin in Ihrem AWS SDK für Java Projekt verwenden zu können, müssen Sie es in der pom.xml Datei Ihres Projekts als Abhängigkeit 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. Beide Beispiele verwenden Amazon S3 als Service und S3AccessGrantsPlugin zur Verwaltung benutzerspezifischer Berechtigungen. Sie können jedoch 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 S3 Access Grants-Dokumentation.

Option 1: OIDC- und STS-Clients erstellen und weitergeben

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 Sie die Anwendung RoleArn 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 die Quelle finden Sie unter Trusted-Identity-Propagation-Java unter. GitHub

JavaScript

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

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

Das Finale package.json sollte eine Abhängigkeit ähnlich der folgenden enthalten:

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

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

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. Sie können jedoch 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 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 weitergeben

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 Sie die Anwendung RoleArn 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 Details und die Quelle finden Sie unter https://github.com/aws-sdk-plugin/trusted-identity-propagation-js trusted-identity-propagation-js auf. GitHub