He asumido un rol de AWS Identity and Access Management (IAM) y mi llamada a la API ha devuelto el error: «An error occurred (AuthFailure) when calling the DescribeInstances operation: AWS was not able to validate the provided access credentials».
Descripción corta
De forma predeterminada, AWS no activa nuevas regiones de AWS y las nuevas regiones solo aceptan los tokens de la versión 2. Cuando los tokens de la versión 1 solicitan servicios a los puntos de enlace de una región que AWS no activa, se produce el siguiente error:
«An error occurred (AuthFailure) when calling the DescribeInstances operation: AWS was not able to validate the provided access credentials».
Se recomienda utilizar los puntos de enlace regionales de AWS Security Token Service (AWS STS) ya que los tokens de sesión de un punto de enlace regional de STS son de la versión 2 y son válidos en todas las regiones. O bien, puedes cambiar la configuración de compatibilidad regional para los tokens de sesión desde el punto de enlace global.
Resolución
Obtención de tokens desde un punto de enlace regional
Importante: Para las regiones que AWS activa de forma predeterminada, debes activar el punto de enlace regional de STS en la cuenta de AWS que genera las credenciales temporales, independientemente de la cuenta que realice 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 activas la región en ambas cuentas, recibirás el error «InvalidClientTokenId».
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Puedes usar un AWS SDK o la AWS CLI para obtener los tokens.
Por ejemplo, puedes ejecutar el siguiente comando de 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 por tu región y endpoint_url por tu punto de enlace.
O bien, ejecuta el siguiente comando assume-role:
aws sts assume-role --role-arn arn:aws:iam::444455556666:role/RoleName --role-session-name RoleName --region your-region --endpoint-url https://sts.your-region.amazonaws.com
Nota: Sustituye your-region por tu región, role-arn por tu nombre de recurso de Amazon (ARN) y endpoint_url por tu punto de enlace.
Cambio de la configuración de compatibilidad regional para los tokens de sesión desde el punto de enlace global
De forma predeterminada, las llamadas STS que realices al punto de enlace global emiten los tokens de la versión 1. Para usar los tokens de sesión en todas las regiones, configura el punto de enlace global de STS para emitir los tokens de la versión 2.
Importante: Los tokens de la versión 2 incluyen más caracteres que los de la versión 1. El aumento del tamaño de los tokens puede afectar a los sistemas existentes que almacenan temporalmente los tokens de sesión. Asegúrate de que el sistema que almacena tus tokens pueda administrar el aumento del tamaño de los tokens.