In che modo è possibile risolvere l'errore "Il token di sicurezza incluso nella richiesta è scaduto" quando si eseguono applicazioni Java su Amazon EC2?
Le mie applicazioni Java che utilizzano AWS SDK per Java su un'istanza di Amazon Elastic Compute Cloud (Amazon EC2) ricevono un messaggio di errore simile al seguente: “com.amazonaws.AmazonServiceException: Il token di sicurezza incluso nella richiesta è scaduto (Servizio: AmazonSQS; Codice stato: 403; Codice errore: ExpiredToken; Request ID: 12a345b6-78cd-901e-fg23-45hi67890jkl)".
Breve descrizione
AWS richiede che tutte le richieste API delle applicazioni siano firmate digitalmente con le credenziali fornite da AWS. Quando l'applicazione utilizza credenziali temporanee per creare un client AWS, è necessario rinnovare queste credenziali prima che scadano. Se le credenziali scadono, si riceve un errore simile a il token di sicurezza incluso nella richiesta è scaduto. Per risolvere questo errore, verificare il riferimento temporale, aggiornare le credenziali temporanee scadute e controllare le configurazioni di AWS Identity and Access Management (AWS IAM).
Risoluzione
Accertarsi che l'istanza disponga di un riferimento temporale coerente
Le credenziali scadono se utilizzano un orario errato, quindi assicurati che il server sia preciso. L'istanza EC2 deve avere un riferimento di data e ora coerente e preciso. Configura il servizio di sincronizzazione oraria di Amazon o un'altra origine NTP (Network Time Protocol) sulla tua istanza. Per ulteriori informazioni, consulta Change the time zone of your instance (Modifica del fuso orario dell'istanza).
Accertarsi che le credenziali temporanee non siano scadute
Se utilizzi credenziali temporanee, assicurati che non siano scadute. Se le credenziali temporanee sono scadute, è necessario generare un nuovo set di credenziali temporanee e utilizzarle. Come best practice, aggiorna le credenziali temporanee cinque minuti prima della loro scadenza.
Verifica della configurazione IAM
Per le applicazioni eseguite su un'istanza EC2, è una best practice utilizzare un ruolo IAM assegnato all'istanza. Se utilizzi un ruolo IAM, verifica che la configurazione sia impostata correttamente.
Con un ruolo IAM, un costruttore di servizi predefinito utilizza una catena di fornitori di credenziali predefinita per cercare le credenziali nel seguente ordine:
- Nelle variabili ambiente di sistema AWS_ACCESS\ _KEY\ _ID e AWS\ _SECRET\ _ACCESS\ _KEY.
- Nelle proprietà del sistema Java aws.accessKeyId e aws.secretKey.
- Nel file delle credenziali predefinito.
- Nelle credenziali del profilo dell'istanza nei metadati dell'istanza associati al ruolo IAM.
Per ulteriori informazioni, consulta Use an IAM role to grant permissions to applications running on Amazon EC2 instances (Utilizzo di un ruolo IAM per concedere le autorizzazioni alle applicazioni in esecuzione su istanze Amazon EC2).
Se si elencano le credenziali in un punto diverso dal profilo dell'istanza, il costruttore del client predefinito trova prima tali credenziali. Questa configurazione blocca le credenziali del ruolo IAM. Per ulteriori informazioni, consulta Provide temporary credentials to the AWS SDK for Java (Fornire credenziali temporanee a AWS SDK per Java).
Per visualizzare le credenziali per il ruolo IAM, esegui i seguenti comandi da Windows PowerShell versione 3.0 o successiva o da una shell Linux. Se utilizzi credenziali temporanee, i seguenti comandi Windows e Linux mostrano le ultime credenziali temporanee per l'istanza.
Nota: nei comandi seguenti, sostituisci examplerole con il nome del ruolo IAM.
Windows:
PS C:\> Invoke-RestMethod http://169.254.169.254/latest/meta-data/iam/security-credentials/examplerole
Riceverai un output simile a quello nell'esempio seguente:
Code : SuccessLastUpdated : 2016-07-18T18:09:47Z Type : AWS-HMAC AccessKeyId : AKIAIOSFODNN7EXAMPLE SecretAccessKey : wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY Token : token Expiration : 2016-04-27T22:39:16Z
Linux:
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/examplerole
Riceverai un output simile a quello nell'esempio seguente:
{ "Code" : "Success", "LastUpdated" : "2016-04-26T16:39:16Z", "Type" : "AWS-HMAC", "AccessKeyId" : "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "Token" : "token", "Expiration" : "2016-04-27T22:39:16Z" }
Se ricevi un errore 404 quando esegui il comando curl precedente, verifica che il proxy HTTP sia disattivato per l'indirizzo IP dei metadati. Inoltre, assicurati che il profilo dell'istanza sia collegato all'istanza.
Se il problema persiste, verifica che l'istanza non stia effettuando più richieste simultanee o eseguendo più sessioni in parallelo. Questo scenario può indurre il Servizio di metadati dell'istanza (IMDS) a limitare la query. Per attenuare questo problema, utilizza il modello di nuovo tentativo con backoff esponenziale.
Per configurare i nuovi tentativi, modifica AWS_METADATA_SERVICE_NUM_ATTEMPTS. Per impostare le opzioni, utilizza le variabili di ambiente, il file ~/.aws/config o la sessione botocore dell'utente. Per ulteriori informazioni, consulta Configuration sul sito web della documentazione di Boto3.
Esempio:
AWS_METADATA_SERVICE_TIMEOUT = 10 AWS_METADATA_SERVICE_NUM_ATTEMPTS = 5
Se esegui il comando curl in un container Docker, aumenta il valore http-put-response-hop-limit a 2. Esegui il comando modify-instance-metadata-options dell'interfaccia della linea di comando AWS (AWS CLI):
aws ec2 modify-instance-metadata-options --instance-id instance --http-put-response-hop-limit 2 --http-endpoint enabled
Nota: sostituisci instance con l'ID istanza. Se ricevi messaggi di errore quando esegui i comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta Troubleshooting errors for the AWS CLI (Risoluzione degli errori per AWS CLI). Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Per ulteriori informazioni, consulta Add defense in depth against open firewalls, reverse proxies, and SSRF vulnerabilities with enhancements to the EC2 Instance Metadata Service.
Le credenziali del ruolo ruotano o si aggiornano automaticamente cinque minuti prima della scadenza delle credenziali temporanee assegnate.
Informazioni correlate
Configure SDK authentication (Configurazione dell'autenticazione SDK)
Video correlati
Contenuto pertinente
- AWS UFFICIALEAggiornata 4 anni fa
- AWS UFFICIALEAggiornata 3 anni fa
- AWS UFFICIALEAggiornata 3 anni fa