

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à.

# Guida introduttiva alla federazione delle identità in uscita
<a name="id_roles_providers_outbound_getting_started"></a>

Questa guida mostra come abilitare la federazione delle identità in uscita per il tuo AWS account e ottenere il tuo primo JSON Web Token (JWT) (utilizzando l'API). [ GetWebIdentityToken ](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html) Attiverai la funzionalità, stabilirai una relazione di fiducia con un servizio esterno, configurerai le autorizzazioni IAM e richiederai un token utilizzando la AWS CLI o l' AWS SDK for Python (Boto3).

## Prerequisiti
<a name="outbound-federation-prerequisites"></a>

Prima di iniziare, assicurati di disporre dei seguenti elementi:
+ Ultima versione della AWS CLI o Python 3.8 (o successiva) e Boto3 installati (per esempi di SDK) AWS 
+ Un account di servizio esterno in cui è possibile configurare le relazioni di fiducia (ad esempio un provider cloud esterno, un provider SaaS o un'applicazione di test)

**Nota**  
L'`GetWebIdentityToken`API non è disponibile sull'endpoint STS Global.
I JSON Web Tokens (JWT) generati dall'`GetWebIdentityToken`API non possono essere utilizzati per la federazione di OpenID Connect (OIDC) in (tramite l'API). AWS [ AssumeRoleWithWebIdentity ](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)

## Abilita la federazione delle identità in uscita per il tuo account
<a name="enable-outbound-federation"></a>

Devi abilitare la federazione delle identità in uscita prima di poter richiedere i token. È possibile abilitare la funzionalità utilizzando la console di AWS gestione o a livello di codice utilizzando l'API. [ EnableOutboundWebIdentityFederation ](https://docs.aws.amazon.com/IAM/latest/APIReference/API_EnableOutboundWebIdentityFederation.html)

### Utilizzo di AWS CLI
<a name="enable-using-cli"></a>

```
aws iam enable-outbound-web-identity-federation
```

### Utilizzo AWS SDK for Python
<a name="enable-using-sdk"></a>

```
import boto3

# Create IAM client
iam_client = boto3.client('iam')

# Enable outbound identity federation
response = iam_client.enable_outbound_web_identity_federation()
print(f"Feature enabled. Issuer URL: {response['IssuerUrl']}")
print(f"Status: {response['Status']}")
```

### Utilizzo di AWS Console
<a name="enable-using-console"></a>

Accedi a IAM e seleziona Impostazioni ** ** dell'account ** nella sezione Gestione degli ** accessi del menu di navigazione a sinistra

![Voce del menu delle impostazioni dell'account evidenziata nella barra di navigazione a sinistra nella sezione Gestione degli accessi.](http://docs.aws.amazon.com/it_it/IAM/latest/UserGuide/images/outbound-screen-1.png)


Una volta abilitata la funzione, annota l'URL dell'emittente specifico del tuo account. Utilizzerai questo URL per configurare le relazioni di fiducia nei servizi esterni. Puoi anche recuperare questo URL dell'emittente secondo necessità utilizzando l'API. [ GetOutboundWebIdentityFederationInfo ](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetOutboundWebIdentityFederationInfo.html)

![L'interfaccia Outbound Identity Federation mostra lo stato Abilitato con il pulsante Disabilita e l'URL dell'emittente del token.](http://docs.aws.amazon.com/it_it/IAM/latest/UserGuide/images/outbound-screen-2.png)


## Stabilisci una relazione di fiducia nel servizio esterno
<a name="establish-trust-relationship"></a>

Configura il servizio esterno in modo che consideri attendibile e accetti i token emessi dal tuo AWS account. I passaggi specifici variano in base al servizio, ma generalmente comportano:
+ Registrazione dell'URL AWS dell'emittente dell'account come provider di identità affidabile
+ Configurazione delle affermazioni da convalidare (destinatario, modelli tematici)
+ Mappatura delle dichiarazioni dei token alle autorizzazioni nel servizio esterno

Per istruzioni di configurazione dettagliate, consulta la documentazione del servizio esterno.

## Configurazione delle autorizzazioni IAM
<a name="configure-iam-permissions"></a>

Crea una policy IAM che conceda il permesso di chiamare l'[GetWebIdentityToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html)API e allegare la policy a un ruolo IAM che deve generare token.

Questa policy di esempio garantisce l'accesso alla generazione di token con restrizioni specifiche. Consente di richiedere i token solo per "https://api.example.com" come pubblico e impone una durata massima dei token di 5 minuti (300 secondi). Fai riferimento a [IAM e AWS STS chiavi di contesto delle condizioni](reference_policies_iam-condition-keys.md) per un elenco delle chiavi di condizione che puoi utilizzare per applicare le proprietà dei token.

### Policy IAM di esempio
<a name="example-iam-policy"></a>

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:GetWebIdentityToken",
            "Resource": "*",
            "Condition": {
                "ForAllValues:StringEquals": {
                    "sts:IdentityTokenAudience": "https://api.example.com"
                },
                "NumericLessThanEquals": {
                    "sts:DurationSeconds": 300
                }
            }
        }
    ]
}
```

## Richiedi il tuo primo JSON Web Token (JWT)
<a name="request-first-jwt"></a>

Puoi richiedere un token Web JSON utilizzando l'API. [ GetWebIdentityToken ](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html) È possibile specificare i seguenti parametri quando si chiama l'API:
+ **Destinatari (obbligatorio): ** il destinatario previsto del token. Questo valore compila l'attestazione «aud» nel JWT. I servizi esterni convalidano questa dichiarazione per assicurarsi che il token sia destinato a loro.
+ **SigningAlgorithm (obbligatorio): ** l'algoritmo crittografico utilizzato per firmare il token. I valori validi sono ES384 e RS256. Utilizzate ES384 per sicurezza e prestazioni ottimali o RS256 per una maggiore compatibilità con i sistemi che non supportano l'ECDSA.
+ **DurationSeconds (opzionale): ** la durata del token in secondi. I valori validi vanno da 60 a 3600. Il valore predefinito è 300 (5 minuti). Consigliamo una durata più breve dei token per una maggiore sicurezza.
+ **Tag (opzionale): ** un elenco di coppie chiave-valore da includere come attestazioni personalizzate nel token. I servizi esterni possono utilizzare queste attestazioni per un'autorizzazione dettagliata.

L'API restituisce i seguenti campi:
+ **IdentityToken: ** il JWT firmato come stringa codificata in base64url. Includi questo token nelle richieste a servizi esterni.
+ **Scadenza: ** il timestamp UTC relativo alla scadenza del token.

### Utilizzo di AWS CLI
<a name="using-aws-cli"></a>

```
aws sts get-web-identity-token \
    --audience "https://api.example.com" \
    --signing-algorithm ES384 \
    --duration-seconds 300 \
    --tags Key=team,Value=data-engineering \
           Key=environment,Value=production \
           Key=cost-center,Value=analytics
```

### Utilizzo AWS SDK for Python
<a name="using-aws-sdk-python"></a>

```
import boto3

sts_client = boto3.client('sts')

response = sts_client.get_web_identity_token(
    Audience=['https://api.example.com'],
    DurationSeconds=300,
    SigningAlgorithm='RS256',
    Tags=[
        {'Key': 'team', 'Value': 'data-engineering'},
        {'Key': 'environment', 'Value': 'production'},
        {'Key': 'cost-center', 'Value': 'analytics'}
    ]
)

token = response['WebIdentityToken']
```

Puoi anche decodificare il JWT per controllarne il contenuto utilizzando librerie JWT standard come PyJWT, per Python, Nimbus JOSE\+JWT Python-jose per Java o debugger come jwt.io. [Comprendere le dichiarazioni relative ai token](id_roles_providers_outbound_token_claims.md)Fai riferimento a per ulteriori informazioni sui claim inclusi nel token.

## Usa il token con un servizio esterno
<a name="use-token-with-external-service"></a>

Dopo aver ricevuto il token, includilo nelle richieste al servizio esterno. Il metodo varia in base al servizio, ma la maggior parte dei servizi accetta i token nell'intestazione di autorizzazione. Il servizio esterno dovrebbe implementare una logica di convalida dei token che recupera le chiavi JWKS dal noto endpoint dell'emittente, verifica la firma del token e convalida le attestazioni essenziali prima di concedere l'accesso ai carichi di lavoro. AWS 

## Recupera le chiavi di verifica e i metadati dagli endpoint OpenID Connect (OIDC)
<a name="fetch-verification-keys"></a>

L'URL univoco dell'emittente del tuo AWS account ospita gli endpoint di rilevamento OpenID Connect (OIDC) che contengono le chiavi di verifica e i metadati necessari per la verifica dei token.

L'URL dell'endpoint di rilevamento OIDC contiene metadati utilizzati da alcuni provider per verificare i token. È disponibile all'indirizzo:

```
{issuer_url}/.well-known/openid-configuration
```

L'endpoint JWKS (JSON Web Key Set) contiene le chiavi utilizzate per verificare le firme dei token. È disponibile all'indirizzo:

```
{issuer_url}/.well-known/jwks.json
```

### Recupera JWKS usando curl
<a name="fetch-jwks-curl"></a>

```
curl https://{issuer_url}/.well-known/jwks.json
```

Risposta:

```
{
  "keys": [
    {
      "kty": "EC",
      "use": "sig",
      "kid": "key-id-1",
      "alg": "ES384",
      "crv": "P-384",
      "x": "base64-encoded-x-coordinate",
      "y": "base64-encoded-y-coordinate"
    },
    {
      "kty": "RSA",
      "use": "sig",
      "kid": "key-id-2",
      "n": "base64-encoded-modulus",
      "e": "AQAB"
    }
  ]
}
```

### Utilizzo AWS SDK for Python
<a name="fetch-using-sdk"></a>

```
import requests

# Fetch Openid Configuration
open_id_config_response = requests.get("https://{issuer_url}/.well-known/openid-configuration")
open_id_config = open_id_config_response.json()

# Fetch JWKS
jwks_response = requests.get("https://{issuer_url}/.well-known/jwks.json")
jwks = jwks_response.json()
```

Consigliamo di memorizzare nella cache queste chiavi per evitare di recuperarle per ogni verifica del token.

### Convalide essenziali dei reclami
<a name="essential-claim-validations"></a>
+ **Oggetto (sub): ** verifica che l'oggetto della rivendicazione contenga il modello ARN principale IAM previsto.
+ **Scadenza (exp): ** assicurati che il token non sia scaduto. Le librerie JWT in genere lo gestiscono automaticamente.
+ **Pubblico (aud): ** verifica che il pubblico corrisponda al valore previsto. Ciò impedisce che i token destinati ad altri servizi vengano utilizzati con i tuoi.
+ **Emittente (iss): ** verifica che l'emittente corrisponda agli AWS account di cui ti fidi. Mantieni un elenco di URL degli emittenti attendibili.

Ove possibile, dovresti convalidare ulteriori attestazioni AWS specifiche per implementare un controllo granulare degli accessi nel tuo servizio esterno. Ad esempio, convalida l'attestazione org\_id per limitare l'accesso ai principali IAM nella tua AWS organizzazione, controlla principal\_tags per applicare il controllo degli accessi basato sugli attributi (ad esempio consentendo solo ambienti di produzione o team specifici) o verifica le affermazioni sul contesto della sessione come lambda\_source\_function\_arn o ec2\_instance\_source\_vpc per limitare l'accesso in base alla risorsa di calcolo. Fai riferimento a [ Understanding token claims ](id_roles_providers_outbound_token_claims.md) per un elenco completo dei claim inclusi nel token.