

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
<a name="access-tip"></a>

 La propagazione affidabile dell'identità (TIP) è una funzionalità AWS IAM Identity Center che consente agli amministratori di concedere autorizzazioni Servizi AWS in base agli attributi degli utenti, 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 le informazioni che vengono Servizi AWS utilizzate per prendere decisioni di autorizzazione quando ricevono richieste di accesso. Queste informazioni includono metadati che identificano il richiedente (ad esempio, un utente IAM Identity Center), il Servizio AWS cui accesso è richiesto (ad esempio, Amazon Redshift) e l'ambito di accesso (ad esempio, l'accesso in sola lettura). La ricezione Servizio AWS utilizza questo contesto e tutte le autorizzazioni assegnate all'utente per autorizzare l'accesso alle sue risorse. Per ulteriori informazioni, vedere la [panoramica sulla propagazione delle identità affidabili](https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-overview.html) nella Guida per l' AWS IAM Identity Center utente. 

 Il plug-in TIP può essere utilizzato con dispositivi Servizi AWS che supportano la propagazione di identità affidabili. Come caso d'uso di riferimento, consulta [Configurazione di un'applicazione Amazon Q Business utilizzando AWS IAM Identity Center](https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/create-application.html) nella *Amazon Q Business User Guide*. 

**Nota**  
 Se utilizzi Amazon Q Business, consulta [Configurazione di un'applicazione Amazon Q Business AWS IAM Identity Center per istruzioni specifiche](https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/create-application.html) sul servizio. 

## Prerequisiti per l'utilizzo del plug-in TIP
<a name="prereq-tip"></a>

Per il funzionamento del plugin sono necessarie le seguenti risorse: 

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

1. Verifica che il servizio che stai utilizzando supporti la propagazione dell'identità affidabile.

   Consulta la colonna **Abilita la propagazione dell'identità affidabile tramite IAM Identity Center** delle [applicazioni AWS gestite che si integrano con IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/awsapps-that-work-with-identity-center.html) nella Guida per l'*AWS IAM Identity Center utente*. 

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

   *Consulta i [prerequisiti e le considerazioni del TIP nella Guida](https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-overall-prerequisites.html) per l'AWS IAM Identity Center utente.* 

1. È necessario disporre di un' Identity-Center-integratedapplicazione. 

   Vedi [le applicazioni AWS gestite o le](https://docs.aws.amazon.com/singlesignon/latest/userguide/awsapps-quick-start-setting-up-identity-center-to-test-awsmanagedapps.html) [applicazioni gestite dal cliente](https://docs.aws.amazon.com/singlesignon/latest/userguide/customermanagedapps-trusted-identity-propagation-set-up-your-own-app-OAuth2.html) nella *Guida AWS IAM Identity Center per l'utente*. 

1. È necessario configurare un Trusted Token Issuer (TTI) e connettere il servizio a IAM Identity Center. 

   *Consulta [Prerequisiti per emittenti di token affidabili](https://docs.aws.amazon.com/singlesignon/latest/userguide/using-apps-with-trusted-token-issuer.html#trusted-token-issuer-prerequisites) e [Attività per la configurazione di un emittente di token affidabile nella Guida per l'utente.](https://docs.aws.amazon.com/singlesignon/latest/userguide/setuptrustedtokenissuer.html#setuptrustedtokenissuer-tasks)AWS IAM Identity Center *

## Per utilizzare il plug-in TIP nel codice
<a name="using-tip"></a>

1. Crea un'istanza del plugin affidabile per la propagazione delle identità.

1. Crea un'istanza del client di servizio per interagire con il tuo 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à avanzata. 
+ **`applicationArn`**: La stringa identificativa univoca per il client o l'applicazione. Questo valore è un ARN dell'applicazione con OAuth sovvenzioni configurate. 
+ **`ssoOidcClient`**: (Facoltativo) Un client SSO OIDC, ad esempio [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/ssooidc/SsoOidcClient.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/ssooidc/SsoOidcClient.html)per Java o [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-sso-oidc/](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-sso-oidc/)for JavaScript, con configurazioni definite dal cliente. 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 di 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 i** parametri `ssoOidcClient` and`stsClient`.
  + Se fornito, non `applicationRoleArn` può avere lo stesso valore del `accessRoleArn` parametro. `applicationRoleArn`viene utilizzato per creare STSClient, che viene utilizzato per assumere AccessRole. Se si utilizza lo stesso ruolo per entrambi `applicationRole` e`accessRole`, ciò significherebbe utilizzare un ruolo per assumere se stesso (presupposto del ruolo autonomo), cosa sconsigliata da. AWS Vedi l'[annuncio per maggiori dettagli](https://aws.amazon.com/blogs/security/announcing-an-update-to-iam-role-trust-policy-behavior/).

### Considerazioni relative `ssoOidcClient` a `stsClient` e parametri `applicationRoleArn`
<a name="considerations-tip"></a>

Quando configurate il plugin TIP, tenete conto dei seguenti requisiti di autorizzazione in base ai parametri forniti:
+ Se stai fornendo `ssoOidcClient` e`stsClient`:
  + Le credenziali sul centro di identità `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 devono essere attivate. `accessRole` `accessRole`deve inoltre essere configurato con una relazione di fiducia con le credenziali attivate. `stsClient`
+ Se stai fornendo`applicationRoleArn`:
  + `applicationRole`dovrebbe avere le `oauth:CreateTokenWithIAM` autorizzazioni `sts:AssumeRole` e `sts:SetContext` le autorizzazioni sulle risorse richieste (istanza IdC`accessRole`), poiché verrà utilizzata per creare client OIDC e STS.
  + `applicationRole`dovrebbe avere una relazione di fiducia con il provider di identità utilizzato per generare il`webToken`, poiché `webToken` verrà utilizzato per assumere l'ApplicationRole tramite la chiamata del plug-in. [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)

**Configurazione di esempio ApplicationRole :**

Politica di fiducia con provider di 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"
                }
            }
        }
    ]
}
```

Politica di autorizzazione:

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

## Esempi di codice che utilizzano TIP
<a name="tip-code-example"></a>

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 plugin 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, includete la dichiarazione del pacchetto richiesta per. `software.amazon.awssdk.trustedidentitypropagation` 

Gli esempi seguenti mostrano due modi per creare un'istanza del plugin di propagazione dell'identità affidabile e aggiungerla a un client di servizio. Entrambi gli esempi utilizzano Amazon S3 come servizio e lo utilizzano `S3AccessGrantsPlugin` per gestire le autorizzazioni specifiche degli utenti, ma possono essere applicati a qualsiasi sistema Servizio AWS che supporti la propagazione dell'identità affidabile (TIP). 

**Nota**  
Per questi esempi, è necessario configurare le autorizzazioni specifiche dell'utente da S3 Access Grants. Consulta la documentazione di [S3 Access Grants](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants.html) per maggiori dettagli.

**Opzione 1: crea e trasferisci 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: Passa applicationRoleArn e rimanda 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, vedi [ trusted-identity-propagation-java](https://github.com/aws-sdk-plugin/trusted-identity-propagation-java)su GitHub.

------
#### [ JavaScript ]

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

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

Il 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 plugin di propagazione dell'identità affidabile e aggiungerla a un client di servizio. Entrambi gli esempi utilizzano Amazon S3 come servizio e Amazon S3 Access Grants per gestire le autorizzazioni specifiche degli utenti, ma possono essere applicati a qualsiasi sistema Servizio AWS che supporti la propagazione dell'identità affidabile (TIP). 

**Nota**  
Per questi esempi, è necessario 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: crea e trasferisci 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: Passa applicationRoleArn e rimanda 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 [trusted-identity-propagation-js](https://github.com/aws-sdk-plugin/trusted-identity-propagation-js)su GitHub.

------