View a markdown version of this page

Utilizzo del plugin TIP per accedere Servizi AWS - AWS SDK e strumenti

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo del plugin TIP per accedere Servizi AWS

La propagazione affidabile dell'identità (TIP) è una funzionalità Centro identità AWS IAM che consente agli amministratori di concedere autorizzazioni Servizi AWS in base agli attributi dell'utente, come le associazioni di gruppo. Con la propagazione affidabile delle identità, il contesto dell'identità viene aggiunto a un ruolo IAM per identificare l'utente che richiede l'accesso alle risorse. AWS Questo contesto viene propagato ad altri. Servizi AWS

Il contesto di identità comprende informazioni che vengono Servizi AWS utilizzate per prendere decisioni di autorizzazione quando ricevono richieste di accesso. Queste informazioni includono i metadati che identificano il richiedente (ad esempio, un utente IAM Identity Center), i dati Servizio AWS a cui viene richiesto l'accesso (ad esempio, Amazon Redshift) e l'ambito dell'accesso (ad esempio, accesso in sola lettura). Il destinatario Servizio AWS utilizza questo contesto e tutte le autorizzazioni assegnate all'utente per autorizzare l'accesso alle proprie risorse. Per ulteriori informazioni, vedere la panoramica sulla propagazione delle identità attendibili nella Guida per l' Centro identità AWS IAM utente.

Il plug-in TIP può essere utilizzato con Servizi AWS questo supporto per la propagazione affidabile delle identità. Come caso d'uso di riferimento, consulta Configurazione di un'applicazione Amazon Q Business utilizzando Centro identità AWS IAM nella Amazon Q Business User Guide.

Nota

Se utilizzi Amazon Q Business, consulta Configurazione di un'applicazione Amazon Q Business utilizzando Centro identità AWS IAM per istruzioni specifiche sul servizio.

Prerequisiti per l'utilizzo del plugin TIP

Per il funzionamento del plugin sono necessarie le seguenti risorse:

  1. È necessario utilizzare il AWS SDK per Java o il AWS SDK per JavaScript.

  2. Verifica che il servizio che stai utilizzando supporti la propagazione delle identità attendibili.

    Consulta la colonna Abilita la propagazione delle identità affidabili tramite IAM Identity Center della tabella Applicazioni AWS gestite che si integrano con IAM Identity Center nella Guida per l'Centro identità AWS IAM utente.

  3. Abilita IAM Identity Center e la propagazione affidabile delle identità.

    Consulta i prerequisiti e le considerazioni TIP nella Guida per l'Centro identità AWS IAM utente.

  4. È necessario disporre di un' Identity-Center-integrated applicazione.

    Vedi le applicazioni AWS gestite o le applicazioni gestite dal cliente nella Guida Centro identità AWS IAM per l'utente.

  5. Devi configurare un Trusted Token Issuer (TTI) e connettere il tuo servizio a IAM Identity Center.

    Vedi Prerequisiti per emittenti di token affidabili e Attività per la configurazione di un emittente di token affidabile nella Guida per l'utente. Centro identità AWS IAM

Per utilizzare il plug-in TIP nel codice

  1. Crea un'istanza del plug-in di propagazione dell'identità affidabile.

  2. Crea un'istanza del client di servizio per interagire con il tuo client di servizio Servizio AWS e personalizza il client di servizio aggiungendo il plug-in di propagazione dell'identità affidabile.

Il plugin TIP accetta i seguenti parametri di input:

  • webTokenProvider: una funzione che il cliente implementa per ottenere un token OpenID dal proprio provider di identità esterno.

  • accessRoleArn: l'ARN del ruolo IAM che deve essere assunto dal plug-in con il contesto di identità dell'utente per ottenere le credenziali con identità migliorata.

  • applicationArn: la stringa identificativa univoca per il client o l'applicazione. Questo valore è un ARN dell'applicazione con autorizzazioni OAuth configurate.

  • ssoOidcClient: (Facoltativo) Un client OIDC SSO, ad esempio SsoOidcClient per Java o per, con configurazioni definite dal cliente. client-sso-oidc JavaScript Se non viene fornito, verrà istanziato e utilizzato un client OIDC che utilizza applicationRoleArn.

  • stsClient: (Facoltativo) Un AWS STS client con configurazioni definite dal cliente, utilizzato per assumere il contesto dell'identità dell'utente. accessRoleArn Se non viene fornito, applicationRoleArn verrà istanziato e utilizzato un AWS STS client che utilizza.

  • applicationRoleArn: (Facoltativo) L'ARN del ruolo IAM da assumere in AssumeRoleWithWebIdentity modo che l'OIDC e AWS STS i client possano essere avviati.

    • Se non viene fornito, devono essere forniti entrambi ssoOidcClient i stsClient parametri.

    • Se fornito, non applicationRoleArn può avere lo stesso valore del accessRoleArn parametro. applicationRoleArnviene utilizzato per creare STSClient, che viene utilizzato per assumere AccessRole. Se si utilizza lo stesso ruolo per entrambi i applicationRole ruoliaccessRole, significherebbe utilizzare un ruolo che si assuma se stesso (presupposto del ruolo personale), il che è sconsigliato. AWS Vedi l'annuncio per maggiori dettagli.

Considerazioni sui parametri sso OidcClient, STSClient e applicativi RoleArn

Quando configuri il plug-in TIP, considera i seguenti requisiti di autorizzazione in base ai parametri forniti:

  • Se stai fornendo ssoOidcClient estsClient:

    • Le credenziali su ssoOidcClient devono essere oauth:CreateTokenWithIAM autorizzate a chiamare il centro di identità per ottenere il contesto utente specifico del centro di identità.

    • Le credenziali stsClient devono essere attivate sts:AssumeRole e le sts:SetContext autorizzazioni attivate. accessRole accessRoledeve inoltre essere configurato con una relazione di fiducia con le credenziali attive. stsClient

  • Se stai fornendoapplicationRoleArn:

    • applicationRoledovrebbe avere le oauth:CreateTokenWithIAM sts:SetContext autorizzazioni sts:AssumeRole e sulle risorse richieste (istanza iDCaccessRole), poiché verrà utilizzato per creare client OIDC e STS.

    • applicationRoledovrebbe avere una relazione di fiducia con il provider di identità utilizzato per generare ilwebToken, in quanto webToken verrà utilizzato per assumere l'ApplicationRole tramite la chiamata del plug-in. AssumeRoleWithWebIdentity

Esempio ApplicationRole di configurazione:

Politica di fiducia con il fornitore di 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" } } } ] }

Politica di autorizzazione:

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

Esempi di codice che utilizzano TIP

Gli esempi seguenti mostrano come implementare il plug-in TIP nel codice utilizzando AWS SDK per Java o il AWS SDK per JavaScript.

Java

Per utilizzare il plug-in TIP nel tuo AWS SDK per Java progetto, devi dichiararlo come dipendenza nel file del pom.xml tuo progetto.

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

Nel codice sorgente, includi la dichiarazione del pacchetto richiesta per. software.amazon.awssdk.trustedidentitypropagation

Gli esempi seguenti mostrano due modi per creare un'istanza del plug-in di propagazione dell'identità affidabile e aggiungerla a un client di servizio. Entrambi gli esempi utilizzano Amazon S3 come servizio e vengono utilizzati S3AccessGrantsPlugin per gestire le autorizzazioni specifiche dell'utente, ma possono essere applicati a qualsiasi servizio Servizio AWS che supporti la propagazione delle identità affidabili (TIP).

Nota

Per questi esempi, è necessario configurare le autorizzazioni specifiche dell'utente tramite S3 Access Grants. Per maggiori dettagli, consulta la documentazione di S3 Access Grants.

Opzione 1: creazione e trasferimento di client OIDC e 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());

Opzione 2: passare l'applicazione RoleArn e rinviare la creazione del client al 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());

Per ulteriori dettagli e fonti, vedere https://github.com/aws-sdk-plugin/trusted-identity-propagation-java trusted-identity-propagation-java on. GitHub

JavaScript

Esegui il comando seguente per installare il pacchetto del plug-in di autenticazione TIP nel tuo progetto: AWS SDK per JavaScript

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

La versione finale package.json dovrebbe includere una dipendenza simile alla seguente:

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

Nel codice sorgente, importa la TrustedIdentityPropagationExtension dipendenza richiesta.

Gli esempi seguenti mostrano due modi per creare un'istanza del plug-in di propagazione dell'identità affidabile e aggiungerla a un client di servizio. Entrambi gli esempi utilizzano Amazon S3 come servizio e utilizzano Amazon S3 Access Grants per gestire le autorizzazioni specifiche dell'utente, ma possono essere applicati a qualsiasi dispositivo Servizio AWS che supporti la propagazione delle identità affidabili (TIP).

Nota

Per questi esempi, devi configurare le autorizzazioni specifiche dell'utente da Amazon S3 Access Grants, consulta la documentazione di Amazon S3 Access Grants per maggiori dettagli. https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants.html

Opzione 1: creazione e trasferimento di client OIDC e 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); }

Opzione 2: passare l'applicazione RoleArn e rinviare la creazione del client al 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); }

Per ulteriori dettagli e fonti, vedi https://github.com/aws-sdk-plugin/trusted-identity-propagation-js trusted-identity-propagation-js on. GitHub