AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
Come posso risolvere l'errore "The security token included in the request is expired" che si verifica quando eseguo applicazioni Java in Amazon EC2?
Le mie applicazioni Java utilizzano AWS SDK per Java nella mia istanza Amazon Elastic Compute Cloud (Amazon EC2). Tuttavia, ricevo il messaggio di errore "com.amazonaws.AmazonServiceException: The security token included in the request is expired (Service: AmazonSQS; Status Code: 403; Error Code: ExpiredToken; Request ID: 12a345b6-78cd-901e-fg23-45hi67890jkl)".
Breve descrizione
Tutte le richieste API delle applicazioni devono essere firmate digitalmente con le credenziali fornite da AWS. Se l'applicazione utilizza credenziali temporanee per creare un client AWS, devo rinnovarle prima che scadano. Se le credenziali scadono, ricevi il messaggio di errore "security token included in the request is expired".
Risoluzione
Verifica che l'istanza disponga di un riferimento temporale coerente
Le credenziali scadono se utilizzano un orario errato, per cui 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) nell'istanza. Per ulteriori informazioni, consulta Modifica del fuso orario dell'istanza.
Verifica che le credenziali temporanee non siano scadute
Se utilizzi credenziali temporanee, verifica che non siano scadute. Se le credenziali temporanee sono scadute, devi generare un nuovo set di credenziali temporanee da utilizzare. È consigliabile aggiornare le credenziali temporanee cinque minuti prima che scadano.
Verifica la configurazione IAM
Per le applicazioni eseguite in un'istanza, è consigliabile utilizzare un ruolo AWS Identity and Access Management (AWS IAM) per l'istanza.
Se utilizzi un ruolo IAM, assicurati di elencare le credenziali del ruolo solo nel profilo dell'istanza. Con un ruolo IAM, il costruttore di servizi predefinito utilizza una catena di provider 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.
Se elenchi le credenziali in un punto diverso dal profilo dell'istanza, il costruttore del client predefinito trova prima quelle credenziali. Questa configurazione blocca le credenziali del ruolo IAM. Per risolvere il problema, controlla le credenziali nelle altre posizioni. Per controllare il file delle credenziali predefinito, controlla la seguente posizione in base al sistema operativo:
- Per Linux, macOS o Unix, controlla * ~/.aws/credentials.
- Per Windows, controlla C:\Users\USERNAME\.aws\credentials.
Nota: sostituisci USERNAME con il tuo nome utente.
Se trovi le credenziali altrove rispetto al profilo dell'istanza, rimuovile. Per ulteriori informazioni sulle configurazioni temporanee delle credenziali, consulta Fornisci credenziali temporanee a AWS SDK per Java.
Per verificare le credenziali per il ruolo IAM, esegui questo comando in base al sistema operativo. Assicurati di utilizzare Windows PowerShell versione 3.0 o successiva o una shell Linux.
Windows:
PS C:\> Invoke-RestMethod http://169.254.169.254/latest/meta-data/iam/security-credentials/examplerole
Nota: sostituisci examplerole con il nome del tuo ruolo IAM. Se utilizzi credenziali temporanee, il comando precedente mostra le credenziali temporanee più recenti per l'istanza.
Esempio di output:
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
Nota: sostituisci examplerole con il nome del tuo ruolo IAM. Se utilizzi credenziali temporanee, il comando precedente mostra le credenziali temporanee più recenti per l'istanza. Se ricevi un errore 404 quando esegui il comando precedente, verifica di aver disattivato il proxy HTTP per l'indirizzo IP dei metadati. Inoltre, assicurati di aver collegato il profilo dell'istanza all'istanza.
Esempio di output:
{ "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" }
Nota: le e credenziali del ruolo ruotano o si aggiornano automaticamente cinque minuti prima della scadenza delle credenziali temporanee assegnate.
Configura la ripetizione
Nota: se ricevi errori quando esegui i comandi dell’Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Se i problemi persistono, verifica che l'istanza non stia effettuando più richieste concorrenti o eseguendo più sessioni in parallelo. Questa situazione può indurre il servizio di metadati di istanza (IMDS) a limitare la larghezza di banda della rete della query. Per mitigare il problema, utilizza il modello di ripetizione con backoff esponenziale.
Per configurare la ripetizione, aumenta il valore di AWS_METADATA_SERVICE_NUM_ATTEMPTS in modo che Boto3 possa riprovare a ottenere le credenziali dal servizio di metadati di istanza. Per impostazione predefinita, Boto3 effettua un solo tentativo prima del timeout. Inoltre, aumenta il valore di AWS_METADATA_SERVICE_TIMEOUT per aumentare il numero di secondi prima che la connessione al servizio di metadati di istanza scada. Per impostazione predefinita, il timeout della connessione si interrompe dopo 1 secondo.
Esempio di configurazione:
AWS_METADATA_SERVICE_TIMEOUT = 10 AWS_METADATA_SERVICE_NUM_ATTEMPTS = 5
Per impostare le opzioni, utilizza le variabili di ambiente, il file ~/.aws/config o la sessione botocore dell'utente. Per istruzioni, consulta Configuration (Configurazione) sul sito web della documentazione di Boto3.
Se esegui il comando curl in un container Docker, esegui questo comando AWS CLI modify-instance-metadata-options per aumentare il limite di hop a 2:
aws ec2 modify-instance-metadata-options --instance-id instance --http-put-response-hop-limit 2 --http-endpoint enabled
Nota: sostituisci instance con l'ID della tua istanza. Per ulteriori informazioni, consulta In un ambiente container, prendi in considerazione la riconfigurazione o l’aumento del limite di hop a 2 in Considerazioni sull'accesso ai metadati dell'istanza.
Informazioni correlate
Autenticazione con AWS utilizzando AWS SDK per Java 2.x
Add defense in depth against open firewalls, reverse proxies, and SSRF vulnerabilities with enhancements to the Amazon EC2 Instance Metadata Service (Aggiunta di una difesa a più livelli contro firewall aperti, proxy inversi e vulnerabilità SSRF grazie ai miglioramenti apportati al servizio di metadati di istanza EC2)
- Argomenti
- Compute
- Lingua
- Italiano
Video correlati

