¿Cómo puedo solucionar el error de AWS STS “the security token included in the request is expired” (el token de seguridad incluido en la solicitud ha caducado) cuando uso AWS CLI para asumir un rol de IAM?
Intenté asumir un rol de AWS Identity and Access Management (IAM) con la AWS Command Line Interface (AWS CLI). Sin embargo, he recibido un error como este: “The security token included in the request is expired” (El token de seguridad incluido en la solicitud ha caducado).
Descripción corta
Las credenciales de seguridad temporales para los usuarios de IAM se solicitan mediante el servicio AWS Security Token Service (AWS STS). Las credenciales temporales creadas con la acción de la API AssumeRole duran una hora de forma predeterminada. Una vez que caducan las credenciales temporales, no se pueden volver a utilizar. Para obtener más información, consulte Credenciales de seguridad temporales en IAM.
Resolución
Siga estos pasos de solución de problemas para su caso de uso.
Si recibe errores al ejecutar comandos de AWS CLI, asegúrese de que utiliza la versión más reciente de AWS CLI.
Asegúrese de que sus solicitudes de credenciales de seguridad temporales puedan llegar a los puntos de conexión de AWS
El establecimiento de credenciales para un rol requiere un ID de clave de acceso, una clave de acceso secreta y un token de sesión. Las solicitudes enviadas deben llegar al punto de conexión de AWS en un plazo de cinco minutos a partir de la marca de tiempo de la solicitud o se denegará la solicitud. Para obtener más información, consulte Por qué se firman las solicitudes.
Uso de perfiles para asumir un rol de IAM
Un perfil con nombre es un conjunto de configuraciones y credenciales que puede aplicar a un comando de AWS CLI. Debe comprobar que está utilizando las credenciales correctas.
El siguiente comando de AWS CLI utiliza las credenciales de perfil predeterminadas:
aws s3 ls
Este comando de ejemplo usa las credenciales de perfil project1 configuradas en el archivo .config:
aws s3 ls --profile project1
Salida de ejemplo con credenciales caducadas:
"An error occurred (ExpiredToken) when calling the ListBuckets operation: The provided token has expired."
Estos perfiles se definen en la carpeta .aws que contiene los archivos .credentials y .config.
El archivo de configuración se encuentra en ~/.aws/config para Linux/macOS y en C:\Users\ %USERPROFILE%\ .aws\config para Windows. El archivo de credenciales se encuentra en ~/.aws/credentials para Linux/macOS y en C:\Users\ %USERPROFILE%.aws\credentials para Windows.
Para comprobar las credenciales de perfil predeterminadas, ejecute el siguiente comando:
aws configure list --profile default
Salida de ejemplo:
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
Para confirmar que se utilizan las mismas credenciales para el perfil project1, ejecute el siguiente comando:
aws configure list --profile project1
Salida de ejemplo:
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
En el resultado del ejemplo, tenga en cuenta que se pueden configurar diferentes credenciales para los perfiles default y project1.
Puede crear un perfil en el archivo .aws/config con el siguiente formato:
[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>
Se le proporcionan estas credenciales cuando ejecuta el comando assume-role de AWS STS de manera similar a la siguiente:
aws sts assume-role --role-arn arn:aws:iam::<account-number>:role/Prod-Role --role-session-name environment-prod
Salida de ejemplo:
{ "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: puede hacer que aumente la duración máxima del vencimiento de la sesión para las credenciales temporales de los roles de IAM mediante el parámetro DurationSeconds para su caso de uso.
La nueva llamada a la API assume-role recupera un nuevo conjunto de credenciales válidas. Tras la llamada a la API, debe actualizar manualmente el archivo ~/.aws/config con las nuevas credenciales temporales.
Puede evitar actualizar el archivo de configuración cada vez que caduque una sesión. Defina un perfil para el rol de IAM junto con el usuario que asume el rol en el archivo ~/.aws/config o ~/.aws/credentials de manera similar a la siguiente:
[profile project1] role_arn = <arn-of-IAM-role> source_profile = user1 region = <region>
Tenga en cuenta que user1 se define en el archivo ~/.aws/credentials de manera similar a la siguiente:
[user1] aws_access_key_id=AKIAIOSFODNN7EXAMPLE aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Definir source_profile significa que no tiene que actualizar sus credenciales temporales en el archivo ~/.aws/config o ~/.aws/credentials.
El siguiente comando de AWS CLI enumera los buckets de Amazon Simple Storage Service (Amazon S3) con credenciales para user1 ubicadas en el archivo ~/.aws/credentials.
aws s3 ls --profile project1
Si usa la CLI de AWS con un elemento source_profile, la llamada a la API assume-role coloca las credenciales en el archivo .aws/cli/cache. Las credenciales caducadas se actualizan automáticamente en el archivo .aws/cli/cache. Si recibe un error por credenciales caducadas, puede borrar la caché con los siguientes comandos:
Linux/macOS:
$ rm -r ~/.aws/cli/cache
Windows:
C:\> del /s /q %UserProfile%\.aws\cli\cache
AWS CLI crea nuevas credenciales en la caché.
Crear variables de entorno para asumir el rol de IAM y luego verificar el acceso
Puede usar las credenciales del rol de IAM para crear tres variables de entorno que asuman el rol de IAM de forma similar a la siguiente:
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
Para comprobar que ha asumido el rol de IAM correcto, ejecute el siguiente comando:
aws sts get-caller-identity
El comando get-caller-identity muestra información sobre la identidad de IAM utilizada para autenticar la solicitud. Para obtener más información, consulte ¿Cómo asumo un rol de IAM con AWS CLI?
Las variables de entorno contienen credenciales almacenadas en caché temporalmente incluso después de que caduquen y no se renuevan automáticamente. Utilice los siguientes comandos para comprobar si las variables de entorno de credenciales están configuradas:
Linux/macOS:
$ printenv | grep AWS
Windows:
C:\>set AWS
Puede eliminar las variables de entorno caducadas con los siguientes comandos:
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=
Ahora puede volver a usar la llamada a la API assume-role para obtener credenciales nuevas y válidas y volver a configurar las variables de entorno.
Importante: los archivos .aws/credentials y .aws/config contienen los detalles de las credenciales de las entidades de IAM. Cuando administre sus credenciales, asegúrese de seguir las prácticas recomendadas de seguridad en IAM.
Información relacionada

Contenido relevante
- OFICIAL DE AWSActualizada hace 2 meses
- OFICIAL DE AWSActualizada hace 10 meses