Share Your AWS re:Post Experience - Quick 3 Question Survey
Help us improve AWS re:Post! We're interested in understanding how you use re:Post and its impact on your AWS journey. Please take a moment to complete our brief 3-question survey.
¿Cómo puedo solucionar el error de AWS STS «the security token included in the request is expired» cuando uso AWS CLI para asumir un rol de IAM?
He intentado asumir un rol de AWS Identity and Access Management (IAM) mediante la Interfaz de la línea de comandos de AWS (AWS CLI). He recibido el error «security token included in the request is expired».
Descripción corta
Las credenciales de seguridad temporales de 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 caducadas las credenciales temporales, no se pueden volver a utilizar. Para obtener más información, consulte Credenciales de seguridad temporales en IAM.
Resolución
Use los siguientes pasos de solución de problemas para su caso de uso.
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Solución de problemas de la AWS CLI. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.
Asegúrese de que sus solicitudes de credenciales de seguridad temporales puedan conectarse a los puntos de enlace de AWS
Para establecer las credenciales de un rol es necesario tener 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 enlace de AWS en un plazo de cinco minutos a partir de la fecha y hora de la solicitud o, de lo contrario, 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 parámetros y credenciales que puede aplicar a un comando de AWS CLI. Compruebe que está utilizando las credenciales correctas.
El siguiente comando de AWS CLI usa las credenciales de perfil predeterminadas:
aws s3 ls
Este comando de ejemplo usa las credenciales del perfil project1 configuradas en el archivo .config:
aws s3 ls --profile project1
Ejemplo de salida mediante 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 en Linux/macOS y en C:\Users\%USERPROFILE%\.aws\config en Windows. El archivo de credenciales se encuentra en ~/.aws/credentials en Linux/macOS y en C:\Users\%USERPROFILE%\.aws\credentials en Windows.
Para comprobar las credenciales de perfil predeterminadas, ejecute el siguiente comando:
aws configure list --profile default
Resultado 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
Resultado 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 de ejemplo, tenga en cuenta que se pueden configurar diferentes credenciales para los perfiles predeterminado y project1.
Puede crear un perfil en su archivo .aws/config mediante 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>
Estas credenciales se proporcionan cuando ejecuta el comando de AWS STS assume-role similar al siguiente:
aws sts assume-role --role-arn arn:aws:iam::<account-number>:role/Prod-Role --role-session-name environment-prod
Resultado 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 de la caducidad de la sesión para las credenciales temporales de los roles de IAM mediante el parámetro DurationSeconds de su caso de uso.
A continuación, 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 asuma ese rol en el archivo ~/.aws/config o en ~/.aws/credentials, similar al siguiente:
[profile project1] role_arn = <arn-of-IAM-role> source_profile = user1 region = <region>
Tenga en cuenta que user1 se define en su archivo ~/.aws/credentials de forma similar a la siguiente:
[user1] aws_access_key_id=AKIAIOSFODNN7EXAMPLE aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Definir el valor source_profile significa que no tiene que actualizar sus credenciales temporales en el archivo ~/.aws/config o en ~/.aws/credentials.
El siguiente comando de AWS CLI muestra los buckets de Amazon Simple Storage Service (Amazon S3) con credenciales para el user1 que se encuentran en el archivo ~/.aws/credentials.
aws s3 ls --profile project1
Si utiliza AWS CLI 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 las credenciales caducadas, puede borrar la memoria 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é.
Creación de variables de entorno para asumir el rol de IAM y comprobar 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 si 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 que se usa para autenticar la solicitud. Para obtener más información, consulte ¿Cómo puedo asumir un rol de IAM mediante la AWS CLI?
Las variables de entorno mantienen las credenciales temporales almacenadas en caché incluso después de que caducan 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 utilizar 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 sus entidades de IAM. Al gestionar sus credenciales, asegúrese de seguir las prácticas recomendadas de seguridad de IAM.
Información relacionada

Contenido relevante
- preguntada hace 2 meseslg...
- preguntada hace 21 díaslg...
- preguntada hace 9 díaslg...
- Como solucionar el error: Supplied Policy document is breaching Cloudwatch Logs policy length limit.Respuesta aceptadapreguntada hace un meslg...
- preguntada hace 2 meseslg...
- OFICIAL DE AWSActualizada hace 10 meses
- OFICIAL DE AWSActualizada hace 3 meses
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 7 meses