Usando AWS re:Post, accetti AWS re:Post Termini di utilizzo

Come posso risolvere l'errore di AWS STS "the security token included in the request is expired" quando uso AWS CLI per assumere un ruolo IAM?

6 minuti di lettura
0

Ho provato ad assumere un ruolo AWS Identity and Access Management (IAM) utilizzando l'interfaccia della linea di comando AWS (AWS CLI). Ho ricevuto il messaggio di errore "security token included in the request is expired".

Breve descrizione

Per richiedere credenziali di sicurezza temporanee per gli utenti IAM si utilizza il Servizio di token di sicurezza AWS (AWS STS). Per impostazione predefinita, le credenziali temporanee create con l'operazione API AssumeRole durano un'ora. Una volta scadute, le credenziali temporanee non possono essere riutilizzate. Per ulteriori informazioni, consulta Temporary security credentials in IAM.

Risoluzione

Segui i passaggi sotto indicati per risolvere l'errore, in base al tuo caso d'uso.

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta Troubleshooting errors for the AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Assicurati che le tue richieste di credenziali di sicurezza temporanee raggiungano gli endpoint AWS

La creazione delle credenziali per un ruolo richiede un ID chiave di accesso, una chiave di accesso segreta e un token di sessione. Le richieste inviate devono raggiungere l'endpoint AWS entro cinque minuti dal timestamp della richiesta, altrimenti questa viene rifiutata. Per ulteriori informazioni, consulta Why requests are signed.

Uso di profili per assumere un ruolo IAM

Un profilo denominato è una raccolta di impostazioni e credenziali che puoi applicare a un comando AWS CLI. Verifica di utilizzare le credenziali corrette.

Il comando AWS CLI seguente utilizza le credenziali del profilo predefinito:

aws s3 ls

Questo comando di esempio utilizza le credenziali del profilo project1 configurate nel file .config:

aws s3 ls --profile project1

Esempio di output quando si usano credenziali scadute:

"An error occurred (ExpiredToken) when calling the ListBuckets operation: The provided token has expired."

Questi profili sono definiti nella cartella .aws contenente i file .credentials e .config.

Il file di configurazione si trova nel percorso ~/.aws/config per Linux/macOS e nel percorso C:\Users\%USERPROFILE%\.aws\config per Windows. Il file delle credenziali si trova nel percorso ~/.aws/credentials per Linux/macOS e nel percorso C:\Users\%USERPROFILE%\.aws\credentials per Windows.

Per verificare le credenziali del tuo profilo predefinito, esegui il comando seguente:

aws configure list --profile default

Esempio di output:

Name Value Type Location
---- ----- ---- --------
profile default manual —profile
access_key TGN7 shared-credentials-file
secret_key SbXb shared-credentials-file
region us-east-1 config-file ~/.aws/config

Per verificare che le stesse credenziali siano usate per il profilo project1, esegui il comando seguente:

aws configure list --profile project1

Esempio di output:

Name Value Type Location
---- ----- ---- --------
profile project1 manual —profile
access_key QN2X config-file
secret_key LPYI config-file
region eu-west-1 config-file ~/.aws/config

Nell'output di esempio, nota che potrebbero essere configurate credenziali diverse per il profilo predefinito e il profilo project1.

Puoi creare un profilo nel tuo file .aws/config utilizzando il formato seguente:

[profile project1]
region = eu-west-1
aws_access_key_id = <access-Key-for-an-IAM-role>
aws_secret_access_key = <secret-access-Key-for-an-IAM-role>
aws_session_token = <session-token>

Queste credenziali ti vengono fornite quando esegui il comando assume-role di AWS STS, in modo simile al seguente:

aws sts assume-role --role-arn arn:aws:iam::<account-number>:role/Prod-Role --role-session-name environment-prod

Esempio di output:

{
"AssumedRoleUser": {
"AssumedRoleId": "AROAXXXXXXXXXXXX:environment-prod",
"Arn": "arn:aws:sts::<account-number>:assumed-role/Prod-Role/environment-prod"
},
"Credentials": {
"SecretAccessKey": "<secret-access-Key-for-an-IAM-role>,
"SessionToken": "<session-token>",
"Expiration": "2020-03-31T17:17:53Z",
"AccessKeyId": "<access-Key-for-an-IAM-role>"
}

Nota: puoi aumentare la durata massima della sessione per le credenziali temporanee per i ruoli IAM usando il parametro DurationSeconds per il tuo caso d'uso.

La nuova chiamata API assume-role recupera quindi un nuovo set di credenziali valide. Dopo la chiamata API, devi aggiornare manualmente il file ~/.aws/config con le nuove credenziali temporanee.

Puoi evitare di aggiornare il file di configurazione ogni volta che scade una sessione. Definisci un profilo per il ruolo IAM insieme all'utente che assume il ruolo nel file ~/.aws/config o ~/.aws/credentials, in modo simile al seguente:

[profile project1]
role_arn = <arn-of-IAM-role>
source_profile = user1
region = <region>

Nota che user1 è definito nel tuo file ~/.aws/credentials in modo simile al seguente:

[user1]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

La definizione di source_profile ti consente di evitare di aggiornare le credenziali temporanee nel file ~/.aws/config o ~/.aws/credentials.

Il comando AWS CLI seguente elenca i bucket Amazon Simple Storage Service (Amazon S3) con le credenziali per user1 che si trovano nel file ~/.aws/credentials.

aws s3 ls --profile project1

Se usi AWS CLI con un elemento source\ _profile, la chiamata API assume-role inserisce le credenziali nel file .aws/cli/cache. Le credenziali scadute vengono aggiornate automaticamente nel file .aws/cli/cache. Se ricevi un errore di credenziali scadute, puoi cancellare la cache con i comandi seguenti:

Linux/macOS:

$ rm -r ~/.aws/cli/cache

Windows:

C:\> del /s /q %UserProfile%\.aws\cli\cache

AWS CLI crea nuove credenziali nella cache.

Crea variabili di ambiente per assumere il ruolo IAM e quindi verifica l'accesso

Puoi usare credenziali del ruolo IAM per creare tre variabili di ambiente per assumere il ruolo IAM, in modo simile al seguente:

Linux/macOS:

export AWS_ACCESS_KEY_ID=RoleAccessKeyID
export AWS_SECRET_ACCESS_KEY=RoleSecretKey
export AWS_SESSION_TOKEN=RoleSessionToken

Windows:

C:\> setx AWS_ACCESS_KEY_ID RoleAccessKeyID
C:\> setx AWS_SECRET_ACCESS_KEY RoleSecretKey
C:\> setx AWS_SESSION_TOKEN RoleSessionToken

Esegui il comando seguente per verificare di aver assunto il ruolo IAM:

aws sts get-caller-identity

Il comando get-caller-identity visualizza informazioni sull'identità IAM utilizzata per autenticare la richiesta. Per ulteriori informazioni, consulta Come posso assumere un ruolo IAM utilizzando AWS CLI?

Le variabili di ambiente mantengono le credenziali temporanee nella cache anche dopo la loro scadenza e in assenza di rinnovo automatico. Usa i comandi seguenti per verificare se sono impostate variabili di ambiente delle credenziali:

Linux/macOS:

$ printenv | grep AWS

Windows:

C:\>set AWS

Puoi rimuovere le variabili di ambiente scadute con i comandi seguenti:

Linux/macOS:

$ unset AWS_ACCESS_KEY_ID
$ unset AWS_SECRET_ACCESS_KEY
$ unset AWS_SESSION_TOKEN

Windows:

C:\>set AWS_ACCESS_KEY_ID=
C:\>set AWS_SECRET_ACCESS_KEY=
C:\>set AWS_SESSION_TOKEN=

Ora puoi usare nuovamente la chiamata API assume-role per ottenere nuove credenziali valide e impostare di nuovo le variabili di ambiente.

Importante: i file .aws/credentials e .aws/config contengono i dettagli delle credenziali per le tue entità IAM. Quando gestisci le credenziali, assicurati di seguire le best practice di sicurezza in IAM.

Informazioni correlate

Request temporary security credentials

In che modo è possibile risolvere l'errore "Il token di sicurezza incluso nella richiesta è scaduto" quando si eseguono applicazioni Java su Amazon EC2?

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 mesi fa