Guida introduttiva alla federazione delle identità in uscita - AWS Identity and Access Management

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

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 Attiverai la funzionalità, stabilirai una relazione di fiducia con un servizio esterno, configurerai le autorizzazioni IAM e richiederai un token utilizzando AWS CLI AWS o SDK for Python (Boto3).

Prerequisiti

Prima di iniziare, assicurati di disporre dei seguenti elementi:

  • Ultima versione della AWS CLI o Python 3.8 (o successiva) e Boto3 installata (per esempi SDK) AWS

  • Un account di servizio esterno in cui è possibile configurare relazioni di fiducia (ad esempio un provider cloud esterno, un provider SaaS o un'applicazione di test)

Nota
  • L'GetWebIdentityTokenAPI non è disponibile sull'endpoint STS Global.

  • I JSON Web Tokens (JWTs) generati dall'GetWebIdentityTokenAPI non possono essere utilizzati per la federazione di OpenID Connect (OIDC) in AWS (tramite l'API). AssumeRoleWithWebIdentity

Abilita la federazione delle identità in uscita per il tuo account

È necessario abilitare la federazione delle identità in uscita prima di poter richiedere i token. È possibile abilitare la funzionalità utilizzando la console di AWS gestione o utilizzando l'API a livello di codice. EnableOutboundWebIdentityFederation

Utilizzo della AWS CLI

aws iam enable-outbound-web-identity-federation

Usare AWS SDK per Python

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 della console AWS

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

Dopo aver abilitato la funzione, prendi nota dell'URL emittente specifico del tuo account. Utilizzerai questo URL per configurare le relazioni di fiducia nei servizi esterni. È inoltre possibile recuperare l'URL dell'emittente, se necessario, utilizzando l'API. GetOutboundWebIdentityFederationInfo

Stabilisci una relazione di fiducia in un servizio esterno

Configura il servizio esterno in modo che consideri attendibili 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 (pubblico, modelli tematici)

  • Il token di mappatura rivendica le autorizzazioni nel servizio esterno

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

Configurazione delle autorizzazioni IAM

Crea una policy IAM che conceda l'autorizzazione a chiamare l'GetWebIdentityTokenAPI e collega la policy a un ruolo IAM che deve generare token.

Questa policy di esempio concede l'accesso alla generazione di token con restrizioni specifiche. Consente di richiedere token solo per "https://api.example.com" come destinatari e impone una durata massima del token di 5 minuti (300 secondi). chiavi contestuali IAM e AWS STS conditionPer un elenco delle chiavi di condizione che è possibile utilizzare per applicare le proprietà dei token, fare riferimento a.

Policy IAM di esempio

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

Richiedi il tuo primo JSON Web Token (JWT)

Puoi richiedere un token Web JSON utilizzando l'API. GetWebIdentityToken È possibile specificare i seguenti parametri quando si chiama l'API:

  • Pubblico (obbligatorio): il destinatario previsto del token. Questo valore compila l'attestazione «aud» nel JWT. I servizi esterni convalidano questa affermazione per garantire che il token fosse destinato a loro.

  • SigningAlgorithm (obbligatorio): L'algoritmo crittografico utilizzato per firmare il token. I valori validi sono ES384 e. RS256 ES384 Utilizzateli per garantire 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 con codifica base64url. Includi questo token nelle richieste a servizi esterni.

  • Scadenza: il timestamp UTC di scadenza del token.

Utilizzo della AWS CLI

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

Usare AWS SDK per Python

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 ispezionarne il contenuto utilizzando librerie JWT standard come PyJWT, Python-JOSE per Python, Nimbus JOSE+JWT per Java o debugger come jwt.io. Per ulteriori informazioni sulle attestazioni incluse nel token, consulta. Comprendere le dichiarazioni relative ai token

Utilizza il token con un servizio esterno

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 deve implementare una logica di convalida dei token che recuperi le chiavi JWKS dall'endpoint noto dell'emittente, verifichi la firma del token e convalidi le richieste essenziali prima di concedere l'accesso ai carichi di lavoro. AWS

Recupera chiavi di verifica e metadati dagli endpoint OpenID Connect (OIDC)

L'URL emittente univoco 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 i 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

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

Usare AWS SDK per Python

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()

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

Convalide essenziali dei reclami

  • Oggetto (secondario): verifica che la rivendicazione relativa all'oggetto contenga il pattern 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/i: verifica che l'emittente corrisponda agli AWS account di cui ti fidi. Mantieni un elenco di emittenti affidabili. URLs

Ove possibile, è necessario convalidare ulteriori attestazioni AWS specifiche per implementare un controllo granulare degli accessi nel servizio esterno. Ad esempio, convalida l'attestazione org_id per limitare l'accesso ai principali IAM nella tua AWS organizzazione, seleziona principal_tags per applicare il controllo degli accessi basato sugli attributi (ad esempio consentire solo ambienti di produzione o team specifici) o verifica le dichiarazioni relative al contesto della sessione come lambda_source_function_arn o ec2_instance_source_vpc per limitare l'accesso in base alla risorsa di calcolo. Per un elenco completo delle attestazioni incluse nel token, consulta Understanding token claims.