Richiedere credenziali di sicurezza temporanee
Per richiedere le credenziali di sicurezza provvisorie, è possibile utilizzare le operazioni AWS Security Token Service (AWS STS) nell'API di AWS. Queste includono le operazioni per creare e fornire agli utenti attendibili le credenziali di sicurezza provvisorie per controllare l'accesso alle risorse di AWS. Per ulteriori informazioni su AWS STS, consulta Credenziali di sicurezza temporanee in IAM. Per informazioni sui diversi metodi che si possono utilizzare per richiedere credenziali di sicurezza temporanee assumendo un ruolo, consultare Metodi per assumere un ruolo.
Per chiamare le operazioni API, è possibile utilizzare uno degli SDK AWS
Le operazioni API di AWS STS creano una nuova sessione con credenziali di sicurezza temporanee che consistono in una coppia di chiavi di accesso e in un token di sessione. La coppia di chiavi di accesso è composta da un ID chiave di accesso e da una chiave segreta. Gli utenti (o un'applicazione che l'utente esegue) possono utilizzare queste credenziali per accedere alle risorse. Utilizzando le operazioni API di AWS STS è possibile creare una sessione per il ruolo e passare policy e tag di sessione in modo programmatico. Le autorizzazioni della sessione risultanti sono l'intersezione tra le policy basate sull'identità del ruolo e le policy di sessione. Per ulteriori informazioni sulle policy di sessione, consulta Policy di sessione. Per ulteriori informazioni sui tag di sessione, consultare Passare i tag di sessione in AWS STS.
Nota
La dimensione del token di sessione che le operazioni API AWS STS restituiscono non è fissa. È consigliabile di non effettuare alcuna supposizione sulle dimensioni massime. La dimensione tipica dei token è inferiore a 4.096 byte, ma essa può variare.
Utilizzo di AWS STS con le regioni AWS
È possibile inviare chiamate API AWS STS a un endpoint globale o a uno degli endpoint regionali. Se si seleziona un endpoint vicino, è possibile ridurre la latenza e migliorare le prestazioni delle chiamate API. Se non è più possibile comunicare con l'endpoint originale è anche possibile scegliere di indirizzare le chiamate verso un endpoint regionale alternativo. Se stai utilizzando uno dei vari SDK AWS, utilizza il metodo dell'SDK per specificare una regione prima di effettuare la chiamata API. Se costruiscono manualmente richieste API HTTP, è necessario indirizzare la richiesta all'endpoint corretto. Per ulteriori informazioni, consulta la sezione AWS STS relativa alle regioni e agli endpoint e la sezione Gestire AWS STS in un Regione AWS.
Di seguito sono elencate le operazioni API che è possibile utilizzare per acquisire le credenziali temporanee da utilizzare nell'ambiente e applicazioni AWS.
Richiesta di credenziali per la delega tra account e federazione tramite un gestore di identità personalizzato
L'operazione API AssumeRole è utile per consentire agli utenti IAM esistenti di accedere alle risorse AWS alle quali non hanno ancora accesso. Ad esempio, l'utente potrebbe aver bisogno di accedere alle risorse in un altro Account AWS. Inoltre, è utile come strumento per ottenere temporaneamente l'accesso privilegiato, ad esempio per fornire l'autenticazione a più fattori (MFA). È necessario chiamare questa API utilizzando le credenziali attive. Per sapere chi può chiamare questa operazione, vedere Confronta le credenziali AWS STS. Per ulteriori informazioni, consulta Creazione di un ruolo per fornire le autorizzazioni a un utente IAM e Accesso sicuro alle API con MFA.
Per richiedere credenziali di sicurezza temporanee per la delega tra account e federazione tramite un gestore di identità personalizzato
-
Effettua l'autenticazione con le tue credenziali di sicurezza AWS. Questa chiamata deve essere effettuata utilizzando le credenziali di sicurezza AWS.
-
Richiama l'operazione
AssumeRole.
L'esempio seguente mostra una richiesta di esempio e la risposta utilizzando AssumeRole. Questa richiesta di esempio assume il ruolo demo per la durata specificata, inclusi policy di sessione, tag di sessione, ID esterno e identità di origine. La sessione risultante è denominata John-session.
Esempio Richiesta di esempio
https://sts.amazonaws.com/ ?Version=2011-06-15 &Action=AssumeRole &RoleSessionName=John-session &RoleArn=arn:aws::iam::123456789012:role/demo &Policy=%7B%22Version%22%3A%222012-10-17 %22%2C%22Statement%22%3A%5B%7B%22Sid%22%3A%20%22Stmt1%22%2C%22Effect%22%3A%20%22Allow%22%2C%22Action%22%3A%20%22s3%3A*%22%2C%22Resource%22%3A%20%22*%22%7D%5D%7D &DurationSeconds=1800 &Tags.member.1.Key=Project &Tags.member.1.Value=Pegasus &Tags.member.2.Key=Cost-Center &Tags.member.2.Value=12345 &ExternalId=123ABC &SourceIdentity=DevUser123 &AUTHPARAMS
Il valore della policy illustrato nell'esempio precedente è la versione di codifica URL della policy seguente:
Il parametro AUTHPARAMS nell'esempio è un segnaposto per la propria firma. Una firma è costituita dalle informazioni di autenticazione che è necessario includere nelle richieste API HTTP di AWS. Per creare le richieste API ti consigliamo di utilizzare gli SDK AWS
Oltre alle credenziali di sicurezza temporanee, la risposta include l'Amazon Resource Name (ARN) per l'utente federato e il periodo di scadenza delle credenziali.
Esempio Risposta di esempio
<AssumeRoleResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/">
<AssumeRoleResult>
<SourceIdentity>DevUser123</SourceIdentity>
<Credentials>
<SessionToken>
AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQW
LWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGd
QrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU
9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz
+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA==
</SessionToken>
<SecretAccessKey>
wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY
</SecretAccessKey>
<Expiration>2019-07-15T23:28:33.359Z</Expiration>
<AccessKeyId>AKIAIOSFODNN7EXAMPLE</AccessKeyId>
</Credentials>
<AssumedRoleUser>
<Arn>arn:aws:sts::123456789012:assumed-role/demo/John</Arn>
<AssumedRoleId>ARO123EXAMPLE123:John</AssumedRoleId>
</AssumedRoleUser>
<PackedPolicySize>8</PackedPolicySize>
</AssumeRoleResult>
<ResponseMetadata>
<RequestId>c6104cbe-af31-11e0-8154-cbc7ccf896c7</RequestId>
</ResponseMetadata>
</AssumeRoleResponse>Nota
Una conversione AWS comprime le policy e i tag di sessione passati in un formato binario compresso con un limite separato. La richiesta può non essere eseguita correttamente a causa di questo limite anche se il testo in chiaro soddisfa gli altri requisiti. L'elemento della risposta PackedPolicySize indica in percentuale la consistenza di policy e tag della richiesta rispetto al limite di dimensione superiore.
Richiesta di credenziali tramite un provider OIDC
L'operazione API AssumeRoleWithWebIdentity restituisce un set di credenziali di sicurezza AWS temporanee in cambio di un JSON Web Token (JWT). Ciò include provider di identità pubblici, come Login with Amazon, Facebook, Google, e provider che emettono JWT compatibili con il rilevamento OpenID Connect (OIDC), come GitHub Actions o Azure Devops. Per ulteriori informazioni, consulta Federazione OIDC.
Nota
Le richieste AssumeRoleWithWebIdentity non sono firmate e non richiedono credenziali AWS.
Richiesta di credenziali tramite un provider OIDC
-
Richiama l'operazione
AssumeRoleWithWebIdentity.Quando effettui una chiamata a
AssumeRoleWithWebIdentity, AWS convalida il token presentato verificando la firma digitale utilizzando le chiavi pubbliche rese disponibili tramite il set di chiavi Web JSON (JWKS) del tuo IdP. Se il token è valido e tutte le condizioni stabilite nella policy di attendibilità dei ruoli IAM sono soddisfatte, AWS restituisce le seguenti informazioni:-
Un set di credenziali di sicurezza temporanee. Consistono in un ID chiave di accesso, in una Secret Access Key e in un token di sessione.
-
l'ID del ruolo e l'ARN del ruolo assunto.
-
Un valore
SubjectFromWebIdentityTokenche contiene l'ID utente univoco.
-
-
L'applicazione può quindi utilizzare le credenziali di sicurezza temporanee restituite nella risposta per effeettuare chiamate API AWS. Questo è lo stesso processo seguito quando si invoca una chiamata API AWS che utilizza credenziali di sicurezza a lungo termine. La differenza è che è necessario includere il token della sessione, che consente ad AWS di verificare che le credenziali di sicurezza provvisorie siano valide.
L'applicazione deve memorizzare nella cache le credenziali restituite da AWS STS e aggiornarle secondo necessità. Se l'applicazione è stata creata utilizzando un SDK AWS, l'SDK dispone di provider di credenziali in grado di gestire le chiamate a AssumeRoleWithWebIdentity e l'aggiornamento delle credenziali AWS prima della scadenza. Per ulteriori informazioni, consulta Provider di credenziali standardizzati di SDK AWS e strumenti nella Guida di riferimento agli SDK AWS e agli strumenti.
Richiesta di credenziali tramite un gestore di identità SAML 2.0
L'operazione API AssumeRoleWithSAML restituisce un set di credenziali di sicurezza temporanee per i principali federati SAML che sono autenticati dal sistema di identità esistente dell'organizzazione. Gli utenti devono utilizzare inoltre SAML
-
Richiama l'operazione
AssumeRoleWithSAML.Si tratta di una chiamata non firmata, il che significa che non è necessario autenticare le credenziali di sicurezza di AWS prima di effettuare la richiesta.
Nota
Una chiamata a
AssumeRoleWithSAMLnon è firmata (crittografata). Pertanto, è opportuno includere le policy di sessione facoltative solo se la richiesta viene trasmessa attraverso un intermediario affidabile. In questo caso, qualcuno potrebbe modificare la policy per rimuovere le limitazioni. -
Quando richiami
AssumeRoleWithSAML, AWS verifica l'autenticità dell'asserzione SAML. Se il provider di identità convalida l'asserzione, AWS restituisce le seguenti informazioni:-
Un set di credenziali di sicurezza temporanee. Consistono in un ID chiave di accesso, in una Secret Access Key e in un token di sessione.
-
l'ID del ruolo e l'ARN del ruolo assunto.
-
Un valore
Audienceche contiene il valore dell'attributoRecipientdell'elementoSubjectConfirmationDatadell'asserzione SAML. -
Un valore
Issuerche contiene il valore dell'attributoIssuerdell'elemento dell'asserzione SAML. -
Un elemento
NameQualifiercontenente un valore hash creato dal valoreIssuer, l'ID dell'Account AWS e il nome descrittivo del provider SAML. In combinazione con l'elementoSubject, permette di identificare in modo univoco il principale federato SAML. -
Un elemento
Subjectche contiene il valore dell'elementoNameIDnell'elementoSubjectdell'asserzione SAML. -
Un elemento
SubjectTypeche indica il formato dell'elementoSubject. Il valore può esserepersistent,transiento il pienoFormatURI dagli elementiSubjecteNameIDutilizzati nell'asserzione SAML. Per ulteriori informazioni sull'attributoNameIDdell'elementoFormat, consulta Configurare le asserzioni SAML per la risposta di autenticazione.
-
-
Utilizzare le credenziali di sicurezza temporanee restituite nella risposta per effettuare chiamate API AWS. Questo è lo stesso processo seguito quando si invoca una chiamata API AWS che utilizza credenziali di sicurezza a lungo termine. La differenza è che è necessario includere il token della sessione, che consente ad AWS di verificare che le credenziali di sicurezza provvisorie siano valide.
L'app deve memorizzare le credenziali. Come impostazione predefinita, le credenziali scadono dopo un'ora. Se non utilizzi l'operazione AmazonSTSCredentialsProviderAssumeRoleWithSAML. Chiamare questa operazione per ottenere un nuovo set di credenziali di sicurezza provvisorie prima che i vecchi scadere.
Richiesta di credenziali tramite un gestore di identità personalizzato
L'operazione API GetFederationToken restituisce un set di credenziali di sicurezza temporanee per i principali degli utenti federati AWS STS. Questa API differisce da AssumeRole per il fatto che il periodo di scadenza predefinito è notevolmente più lungo (12 ore invece di un'ora). Inoltre, è possibile utilizzare il parametro DurationSeconds per specificare una durata per le credenziali di sicurezza temporanee perché rimanga valido. Le credenziali risultanti sono valide per la durata specificata, da 900 secondi (15 minuti) a un massimo di 129.600 secondi (36 ore). Il periodo di scadenza più lungo può aiutare a ridurre il numero di chiamate a AWS perché non è necessario ottenere nuove credenziali con la stessa frequenza.
-
Effettua l'autenticazione con le credenziali di sicurezza AWS del tuo utente IAM specifico. Questa chiamata deve essere effettuata utilizzando le credenziali di sicurezza AWS.
-
Richiama l'operazione
GetFederationToken.
La chiamata GetFederationToken restituisce le credenziali di sicurezza temporanee che consistono nel token di sessione, nella chiave di accesso, nella chiave segreta e nella scadenza. È possibile utilizzare GetFederationToken se si desidera gestire le autorizzazioni nella propria organizzazione (ad esempio, utilizzando l'applicazione proxy per assegnare le autorizzazioni).
L'esempio seguente mostra una richiesta di esempio e la risposta che utilizza GetFederationToken. Questa richiesta di esempio consente di federare l'utente chiamante per la durata specificata tramite l'ARN della policy di sessione e i tag di sessione. La sessione risultante è denominata Jane-session.
Esempio Richiesta di esempio
https://sts.amazonaws.com/ ?Version=2011-06-15 &Action=GetFederationToken &Name=Jane-session &PolicyArns.member.1.arn==arn%3Aaws%3Aiam%3A%3A123456789012%3Apolicy%2FRole1policy &DurationSeconds=1800 &Tags.member.1.Key=Project &Tags.member.1.Value=Pegasus &Tags.member.2.Key=Cost-Center &Tags.member.2.Value=12345 &AUTHPARAMS
L'ARN della policy illustrato nell'esempio precedente include i seguenti ARN URL-encoded:
arn:aws:iam::123456789012:policy/Role1policy
Inoltre, si noti che il parametro &AUTHPARAMS nell'esempio è inteso come segnaposto per le informazioni di autenticazione. Questa è la firma che è necessario includere nelle richieste API HTTP di AWS. Per creare le richieste API ti consigliamo di utilizzare gli SDK AWS
Oltre alle credenziali di sicurezza temporanee, la risposta include l'Amazon Resource Name (ARN) per l'utente federato e il periodo di scadenza delle credenziali.
Esempio Risposta di esempio
<GetFederationTokenResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/">
<GetFederationTokenResult>
<Credentials>
<SessionToken>
AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQW
LWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGd
QrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU
9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz
+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCEXAMPLE==
</SessionToken>
<SecretAccessKey>
wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY
</SecretAccessKey>
<Expiration>2019-04-15T23:28:33.359Z</Expiration>
<AccessKeyId>AKIAIOSFODNN7EXAMPLE;</AccessKeyId>
</Credentials>
<FederatedUser>
<Arn>arn:aws:sts::123456789012:federated-user/Jean</Arn>
<FederatedUserId>123456789012:Jean</FederatedUserId>
</FederatedUser>
<PackedPolicySize>4</PackedPolicySize>
</GetFederationTokenResult>
<ResponseMetadata>
<RequestId>c6104cbe-af31-11e0-8154-cbc7ccf896c7</RequestId>
</ResponseMetadata>
</GetFederationTokenResponse>Nota
Una conversione AWS comprime le policy e i tag di sessione passati in un formato binario compresso con un limite separato. La richiesta può non essere eseguita correttamente a causa di questo limite anche se il testo in chiaro soddisfa gli altri requisiti. L'elemento della risposta PackedPolicySize indica in percentuale la consistenza di policy e tag della richiesta rispetto al limite di dimensione superiore.
AWS raccomanda di concedere le autorizzazioni a livello di risorsa (ad esempio collegando una policy basata su risorse a un bucket Amazon S3), omettendo il parametro Policy. Tuttavia, se non si include una policy per il principale utente federato AWS STS, le credenziali di sicurezza temporanee non concederanno alcuna autorizzazione. In questo caso, è necessario utilizzare le policy delle risorse per concedere all'utente federato l'accesso alle risorse AWS.
Ad esempio, immagina che il numero dell'Account AWS sia 111122223333 e che tu disponga di un bucket Amazon S3 al quale desideri far accedere Susan. Le credenziali di sicurezza temporanee di Susan non includono una policy per il bucket. In questo caso, è necessario accertarsi che il bucket disponga di una policy con un ARN corrisponda all'ARN di Susan, ad esempio arn:aws:sts::111122223333:federated-user/Susan.
Richiesta di credenziali per gli utenti in ambienti non attendibili
L'operazione API GetSessionToken restituisce un set di credenziali di sicurezza temporanee a un utente IAM esistente. Si tratta di una funzione utile per fornire maggiore sicurezza, ad esempio per limitare le richieste AWS solo a quando l'autenticazione MFA è abilitata per l'utente IAM. Poiché le credenziali sono temporanee, forniscono maggiore sicurezza quando hai un utente IAM che accede alle risorse tramite un ambiente meno sicuro. Esempi di ambienti meno protetti includono dispositivi mobili o browser web.
-
Effettua l'autenticazione con le credenziali di sicurezza AWS del tuo utente IAM specifico. Questa chiamata deve essere effettuata utilizzando le credenziali di sicurezza AWS.
-
Richiama l'operazione
GetSessionToken. -
GetSessionTokenrestituisce le credenziali di sicurezza temporanee, ossia un token di sessione, l'ID chiave di accesso e una chiave di accesso segreta.
Per impostazione predefinita, le credenziali di sicurezza temporanee per un utente IAM sono valide per un massimo di 12 ore. Tuttavia, è possibile richiedere una durata di soli 15 minuti o fino a 36 ore utilizzando il parametro DurationSeconds. Per motivi di sicurezza, un token per un Utente root dell'account AWS è limitato a una durata di un'ora.
L'esempio seguente mostra una richiesta di esempio e la risposta utilizzando GetSessionToken. La risposta include inoltre il periodo di scadenza delle credenziali di sicurezza temporanee.
Esempio Richiesta di esempio
https://sts.amazonaws.com/ ?Version=2011-06-15 &Action=GetSessionToken &DurationSeconds=1800 &AUTHPARAMS
Il parametro AUTHPARAMS nell'esempio è un segnaposto per la propria firma. Una firma è costituita dalle informazioni di autenticazione che è necessario includere nelle richieste API HTTP di AWS. Per creare le richieste API ti consigliamo di utilizzare gli SDK AWS
Esempio Risposta di esempio
<GetSessionTokenResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/">
<GetSessionTokenResult>
<Credentials>
<SessionToken>
AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/L
To6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3z
rkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtp
Z3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE
</SessionToken>
<SecretAccessKey>
wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY
</SecretAccessKey>
<Expiration>2011-07-11T19:55:29.611Z</Expiration>
<AccessKeyId>AKIAIOSFODNN7EXAMPLE</AccessKeyId>
</Credentials>
</GetSessionTokenResult>
<ResponseMetadata>
<RequestId>58c5dbae-abef-11e0-8cfe-09039844ac7d</RequestId>
</ResponseMetadata>
</GetSessionTokenResponse>Eventualmente, la richiesta GetSessionToken può includere i valori SerialNumber e TokenCode per la verifica Multi-Factor Authentication (MFA) di AWS. Se i valori forniti sono validi, AWS STS fornisce le credenziali di sicurezza temporanee che includono lo stato dell'autenticazione MFA. Le credenziali di sicurezza temporanee possono essere utilizzate per accedere alle operazioni API o ai siti Web AWS protetti mediante MFA fino a quando l'autenticazione MFA è valida.
L'esempio seguente mostra una richiesta GetSessionToken, che include un codice di verifica MFA e il numero di serie del dispositivo.
https://sts.amazonaws.com/ ?Version=2011-06-15 &Action=GetSessionToken &DurationSeconds=7200 &SerialNumber=YourMFADeviceSerialNumber &TokenCode=123456 &AUTHPARAMS
Nota
La chiamata a AWS STS può essere riferita all'endpoint globale o a uno qualsiasi degli endpoint regionali per i quali è stato attivato l'Account AWS. Per ulteriori informazioni, consulta la sezione di AWS STS relativa alle regioni e agli endpoint.
Il parametro AUTHPARAMS nell'esempio è un segnaposto per la propria firma. Una firma è costituita dalle informazioni di autenticazione che è necessario includere nelle richieste API HTTP di AWS. Per creare le richieste API ti consigliamo di utilizzare gli SDK AWS