He asumido un rol de AWS Identity and Access Management (IAM) y mi llamada a la API ha devuelto un error similar al siguiente: «Se ha producido un error (AuthFailure) al llamar a la operación DescribeInstances: AWS no ha podido validar las credenciales de acceso proporcionadas».
Breve descripción
AWS Security Token Service (AWS STS) admite una versión actualizada de los tokens de sesión, la versión 2. Las nuevas regiones de AWS no se activan de forma predeterminada y solo aceptan la versión actualizada de los tokens de sesión. Este error se produce si los tokens de sesión de la versión 1 realizan una solicitud a los puntos de enlace de servicio de una región de AWS que no está activada de forma predeterminada. Para obtener más información, consulta Administración de AWS STS en una región de AWS.
Resolución
Los tokens de sesión obtenidos del punto de enlace regional de AWS STS son de la versión 2 y, por lo tanto, válidos en todas las regiones de AWS. Es una práctica recomendada utilizar puntos de enlace regionales de AWS STS.
Utiliza uno de los métodos siguientes para solucionar este problema.
Obtención de tokens desde un punto de enlace regional
En el siguiente comando de ejemplo se utiliza AWS SDK para Python (Boto3).
# Replace existing code to create STS client with the following:
sts_client = boto3.client('sts', region_name='your-region', endpoint_url='https://sts.your-region.amazonaws.com')
Nota:
- Sustituye your-region, AccountID y RoleName por los valores de tu entorno.
- Es obligatorio definir el valor de endpoint_url para poder configurar el cliente de STS para el punto de enlace regional.
Para usar puntos de enlace regionales, asegúrate de incluir las opciones de URL de región y punto de enlace en el comando bash existente.
Ejemplo de comando:
aws sts assume-role --role-arn arn:aws:iam::AccountID:role/RoleName --role-session-name RoleName --region your-region --endpoint-url https://sts.your-region.amazonaws.com
Importante: Para las regiones que están activadas de forma predeterminada, debes activar el punto de enlace regional de STS en la cuenta en la que se generan las credenciales temporales. No importa si un usuario ha iniciado sesión en la misma cuenta o en una cuenta diferente cuando hace la solicitud. En el caso de las regiones que se activan manualmente, activa la región tanto en la cuenta que realiza la solicitud como en la cuenta en la que se generan las credenciales. Si no lo haces, es posible que recibas el error InvalidClientTokenId. Para obtener más información, consulta Activación y desactivación de AWS STS en una región de AWS.
Modificación de la compatibilidad regional de los tokens de sesión para un punto de enlace global
De forma predeterminada, las llamadas STS de AWS al punto de enlace global emiten tokens de sesión que usan la versión 1. Los tokens de la versión 1 solo son válidos en las regiones de AWS que están activadas de forma predeterminada. Sin embargo, también puedes configurar el punto de enlace global de STS para que emita tokens de la versión 2 que se puedan usar en todas las regiones de AWS.
Para obtener más información, consulta Administración de tokens de sesión de punto de enlace global.
Importante: Los tokens de la versión 2 incluyen más caracteres que los de la versión 1. Esto podría afectar a los sistemas existentes en los que almacenes tokens temporalmente.
Información relacionada
Administración de AWS STS en una región de AWS
Regiones y puntos de enlace