aws cli выдает ошибку «Маркер безопасности, включенный в запрос, недействителен»

#amazon-web-services #aws-cli

#amazon-web-services #aws-cli

Вопрос:

Я сделал aws configure и проверил, что это работало раньше. Но сегодня это не сработало, я получил ошибку при попытке получить размещенную зону

  $ aws route53 list-hosted-zones

 An error occurred (InvalidClientTokenId) when calling the ListHostedZones operation: The security token included in the request is invalid.
  

Я удалил ~/.aws и сделал aws configure это снова, но все равно получил ту же ошибку.
Не могли бы вы, пожалуйста, помочь? Спасибо!

Ответ №1:

После включения MFA вам нужно будет передать временные учетные данные, полученные при выполнении
aws sts get-session-token при каждом последующем запросе.

С переменными среды:

 export AWS_ACCESS_KEY_ID=XXX
export AWS_SECRET_ACCESS_KEY=YYY
export AWS_DEFAULT_REGION=us-east-2
export AWS_SESSION_TOKEN=ZZZ
  

С именованными профилями:

 [mfa]
aws_access_key_id = XXX
aws_secret_access_key = YYY
aws_session_token = ZZZ
  

Эта An error occurred (InvalidClientTokenId) ... ошибка может возникать снова и снова, если вы забудете удалить предыдущие временные учетные данные.

Итак, если вы используете переменные среды, не забудьте отменить все переменные перед новым выполнением aws sts get-session-token :

 unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset AWS_SESSION_TOKEN
  

Если вы используете именованные профили — не забудьте обновить профиль в разделе .aws/credentials .

Ответ №2:

Включен ли MFA в вашей учетной записи? Возможно, вам придется запустить

 aws sts get-session-token
  

Подробная информация о том, как использовать MFA с cli, задокументирована здесь.

Комментарии:

1. я получаю An error occurred (InvalidClientTokenId) when calling the GetSessionToken operation: The security token included in the request is invalid при попытке запустить aws sts get-session-token

Ответ №3:

Я собрал это вместе, поскольку необходимость делать это все время была очень раздражающей. Я не разработчик оболочки, но это работает для меня, используя source /path/to/this/script.sh

 #!/bin/bash
​
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset AWS_DEFAULT_REGION
unset AWS_SESSION_TOKEN
​
AWS_CREDS=$(aws sts get-session-token)
​
AWS_ACCESS_KEY_ID=$(jq -r '.[].AccessKeyId' <<< "${AWS_CREDS}")
AWS_SECRET_ACCESS_KEY=$(jq -r '.[].SecretAccessKey' <<< "${AWS_CREDS}")
AWS_DEFAULT_REGION='YOUR_REGION'
AWS_SESSION_TOKEN=$(jq -r '.[].SessionToken' <<< "${AWS_CREDS}")
AWS_TOKEN_EXPIRATION=$(jq -r '.[].Expiration' <<< "${AWS_CREDS}")
​
export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
export AWS_DEFAULT_REGION=$AWS_DEFAULT_REGION
export AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN
​
echo "Tokens generated and saved to this terminal session. Tokens will expire on ${AWS_TOKEN_EXPIRATION}"
  

Ответ №4:

После получения этой ошибки и входа в систему через браузер я увидел, что «Ключ доступа» моего пользователя IAM был «неактивным». После его активации (из того же представления) Я смог использовать aws и aws-vault.