Utiliser le plugin TIP pour accéder Services AWS - AWS SDKs et outils

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utiliser le plugin TIP pour accéder Services AWS

La propagation sécurisée des identités (TIP) est une fonctionnalité AWS IAM Identity Center qui permet aux administrateurs d' Services AWS accorder des autorisations en fonction des attributs de l'utilisateur tels que les associations de groupes. Avec la propagation d'identité sécurisée, le contexte d'identité est ajouté à un rôle IAM pour identifier l'utilisateur qui demande l'accès aux AWS ressources. Ce contexte est propagé à d'autres Services AWS.

Le contexte d'identité comprend les informations Services AWS utilisées pour prendre des décisions d'autorisation lorsqu'ils reçoivent des demandes d'accès. Ces informations incluent des métadonnées qui identifient le demandeur (par exemple, un utilisateur du IAM Identity Center), l'accès Service AWS auquel l'accès est demandé (par exemple, Amazon Redshift) et l'étendue de l'accès (par exemple, accès en lecture seule). Le destinataire Service AWS utilise ce contexte, ainsi que toutes les autorisations attribuées à l'utilisateur, pour autoriser l'accès à ses ressources. Pour plus d'informations, reportez-vous à la section Vue d'ensemble de la propagation des identités fiables dans le Guide de AWS IAM Identity Center l'utilisateur.

Le plugin TIP peut être utilisé avec un Services AWS support de propagation d'identité fiable. À titre de cas d'utilisation de référence, consultez la section Configuration d'une application Amazon Q Business AWS IAM Identity Centerà l'aide du guide de l'utilisateur Amazon Q Business.

Note

Si vous utilisez Amazon Q Business, consultez Configuration d'une application Amazon Q Business à l'aide AWS IAM Identity Center d'instructions spécifiques au service.

Conditions préalables à l'utilisation du plugin TIP

Les ressources suivantes sont nécessaires pour que le plugin fonctionne :

  1. Vous devez utiliser le AWS SDK pour Java ou le AWS SDK pour JavaScript.

  2. Vérifiez que le service que vous utilisez prend en charge la propagation d'identités fiables.

    Consultez la colonne Permet la propagation d'identités fiables via IAM Identity Center du tableau des applications AWS gérées qui s'intègrent à IAM Identity Center dans le guide de l'AWS IAM Identity Center utilisateur.

  3. Activez le centre d'identité IAM et la propagation fiable des identités.

    Consultez les conditions préalables et considérations relatives au TIP dans le guide de AWS IAM Identity Center l'utilisateur.

  4. Vous devez avoir une Identity-Center-integrated candidature.

    Consultez la section Applications AWS gérées ou Applications gérées par le client dans le Guide de AWS IAM Identity Center l'utilisateur.

  5. Vous devez configurer un émetteur de jetons sécurisé (TTI) et connecter votre service à IAM Identity Center.

    Consultez les sections Conditions requises pour les émetteurs de jetons fiables et Tâches de configuration d'un émetteur de jetons de confiance dans le guide de l'AWS IAM Identity Center utilisateur.

Pour utiliser le plugin TIP dans votre code

  1. Créez une instance du plugin de propagation d'identité sécurisé.

  2. Créez une instance de client de service pour interagir avec votre client de service Service AWS et personnalisez-le en ajoutant le plug-in de propagation d'identité sécurisé.

Le plugin TIP prend les paramètres d'entrée suivants :

  • webTokenProvider: fonction que le client implémente pour obtenir un jeton OpenID auprès de son fournisseur d'identité externe.

  • accessRoleArn: L'ARN du rôle IAM à assumer par le plugin avec le contexte d'identité de l'utilisateur pour obtenir les informations d'identification améliorées.

  • applicationArn: chaîne d'identifiant unique du client ou de l'application. Cette valeur est un ARN d'application pour lequel OAuth des autorisations sont configurées.

  • ssoOidcClient: (Facultatif) Un client OIDC SSO, tel que SsoOidcClientpour Java ou client-sso-oidcpour JavaScript, avec des configurations définies par le client. S'il n'est pas fourni, un client OIDC utilisant applicationRoleArn sera instancié et utilisé.

  • stsClient: (Facultatif) Un AWS STS client avec des configurations définies par le client, utilisé pour assumer le accessRoleArn contexte d'identité de l'utilisateur. S'il n'est pas fourni, un AWS STS client utilisant applicationRoleArn sera instancié et utilisé.

  • applicationRoleArn: (Facultatif) L'ARN du rôle IAM à utiliser pour que l'OIDC et les AWS STS clients puissent être initialisés. AssumeRoleWithWebIdentity

    • S'ils ne sont pas fournis, les stsClient paramètres ssoOidcClient et doivent être fournis.

    • S'il est fourni, il ne applicationRoleArn peut pas s'agir de la même valeur que le accessRoleArn paramètre. applicationRoleArnest utilisé pour créer le STSClient, qui est utilisé pour assumer le rôle AccessRole. Si le même rôle est utilisé pour applicationRole les deuxaccessRole, cela signifierait utiliser un rôle pour s'assumer (hypothèse d'un rôle propre), ce qui est déconseillé par. AWS Consultez l'annonce pour plus de détails.

Considérations relatives à ssoOidcClientstsClient, et applicationRoleArn paramètres

Lors de la configuration du plug-in TIP, tenez compte des exigences d'autorisation suivantes en fonction des paramètres que vous fournissez :

  • Si vous fournissez ssoOidcClient et stsClient :

    • Les informations d'identification figurant sur le ssoOidcClient doivent être oauth:CreateTokenWithIAM autorisées à appeler le centre d'identité afin d'obtenir le contexte utilisateur spécifique au centre d'identité.

    • Les informations d'identification stsClient devraient être sts:AssumeRole activées et sts:SetContext les autorisations activéesaccessRole. accessRoledoit également être configuré avec une relation de confiance avec les informations d'identification activéesstsClient.

  • Si vous fournissez applicationRoleArn :

    • applicationRoledoit avoir les oauth:CreateTokenWithIAM sts:SetContext autorisations sts:AssumeRole et les autorisations nécessaires sur les ressources requises (instance IdCaccessRole) car elles seront utilisées pour créer des clients OIDC et STS.

    • applicationRoledoit avoir une relation de confiance avec le fournisseur d'identité utilisé pour générer lewebToken, car il webToken sera utilisé pour assumer le rôle d'application via l'AssumeRoleWithWebIdentityappel du plugin.

Exemple ApplicationRole de configuration :

Politique de confiance avec le fournisseur de jetons 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" } } } ] }

Politique d'autorisation :

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

Exemples de code utilisant TIP

Les exemples ci-dessous montrent comment implémenter le plugin TIP dans votre code à l'aide du AWS SDK pour Java ou du AWS SDK pour JavaScript.

Java

Pour utiliser le plugin TIP dans votre AWS SDK pour Java projet, vous devez le déclarer en tant que dépendance dans le pom.xml fichier de votre projet.

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

Dans votre code source, incluez l'instruction de package requise poursoftware.amazon.awssdk.trustedidentitypropagation.

Les exemples suivants montrent deux manières de créer une instance du plugin de propagation d'identité sécurisé et de l'ajouter à un client de service. Les deux exemples utilisent Amazon S3 en tant que service et sont utilisés S3AccessGrantsPlugin pour gérer les autorisations spécifiques aux utilisateurs, mais ils peuvent être appliqués à tout Service AWS ce qui prend en charge la propagation d'identité sécurisée (TIP).

Note

Pour ces exemples, vous devez configurer les autorisations spécifiques à l'utilisateur à partir de S3 Access Grants. Reportez-vous à la documentation relative aux subventions d'accès S3 pour plus de détails.

Option 1 : créer et transmettre des clients OIDC et 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());

Option 2 : Transférer applicationRoleArn et reporter la création du client au 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());

Pour plus de détails et la source, voir trusted-identity-propagation-javaci-dessous GitHub.

JavaScript

Exécutez la commande suivante pour installer le package du plugin d'authentification TIP dans votre AWS SDK pour JavaScript projet :

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

La version finale package.json doit inclure une dépendance similaire à la suivante :

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

Dans votre code source, importez la TrustedIdentityPropagationExtension dépendance requise.

Les exemples suivants montrent deux manières de créer une instance du plugin de propagation d'identité sécurisé et de l'ajouter à un client de service. Les deux exemples utilisent Amazon S3 en tant que service et utilisent Amazon S3 Access Grants pour gérer les autorisations spécifiques aux utilisateurs, mais ils peuvent être appliqués à tout Service AWS ce qui prend en charge la propagation d'identité sécurisée (TIP).

Note

Pour ces exemples, vous devez configurer les autorisations spécifiques à l'utilisateur à partir d'Amazon S3 Access Grants. Consultez la documentation Amazon S3 Access Grants pour plus de détails.

Option 1 : créer et transmettre des clients OIDC et 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); }

Option 2 : Transférer applicationRoleArn et reporter la création du client au 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); }

Pour plus de détails et la source, voir trusted-identity-propagation-jsci-dessous GitHub.