Срок действия токена безопасности, включенного в запрос, истек

У меня есть скрипт, который извлекает множество метрик из Cloudwatch для наших собственных внутренних отчетов.

Сценарий перебирает все инстансы EC2 в определенном регионе и запрашивает 5 метрик cloudwatch (все доступные статистические данные) за последние 2 недели (каждый раз 5 дней назад с 5-минутным интервалом, что точно соответствует квоте 1440). Я использую предполагаемый сеанс:

session = Session(aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY, region_name=regionName)
sts = session.client('sts')
response = sts.assume_role(
    RoleArn=arn, # External role arn
    RoleSessionName='role-name',
    ExternalId='<some-id-here>',
)
tempAccessKeyId = response['Credentials']['AccessKeyId']
tempSecretAccessKey = response['Credentials']['SecretAccessKey']
tempSessionToken = response['Credentials']['SessionToken']
assumedSession = Session(
    aws_access_key_id=tempAccessKeyId,
    aws_secret_access_key=tempSecretAccessKey,
    aws_session_token=tempSessionToken,
    region_name=regionName)

При запуске скрипта я получил это исключение:

botocore.exceptions.ClientError: An error occurred (ExpiredToken) when calling the GetMetricStatistics operation: The security token included in the request is expired

Есть ли способ убедиться, что срок действия токена не истекает при запуске скрипта? Я использую бото3.


person Avi    schedule 28.02.2016    source источник


Ответы (4)


Используемый вами метод accept_role возвращает временные учетные данные безопасности. Следующее взято из официальной документации:

Временные учетные данные безопасности действительны в течение времени, указанного при вызове AssumeRole , которое может составлять от 900 секунд (15 минут) до 3600 секунд (1 час). По умолчанию 1 час.

Поскольку вы не используете аргумент ключевого слова DurationSeconds, возвращенные учетные данные действительны в течение 1 часа по умолчанию. Вы должны убедиться, что получили новые учетные данные, чтобы делать запросы через 1 час. См. следующую информацию в официальной документации по временным учетным данным безопасности:

Когда (или даже раньше) истечет срок действия временных учетных данных безопасности, пользователь может запросить новые учетные данные, если у запрашивающего их пользователя все еще есть разрешения на это.

person Alon    schedule 29.02.2016

Я нашел очень лаконичный ответ службы поддержки AWS Premium и соответствующие

Также важно отметить, что иногда возникает ошибка, когда время сервера отклоняется от правильного времени (10-15 минут вызовут ошибку).

person dovka    schedule 18.06.2020

В моем случае проблема заключалась в том, что у меня были учетные данные в моем .aws/configure, и я пытался настроить их, но чего я не осознавал, так это того, что у меня была другая пара учетных данных AWS_SESSION_TOKEN AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY, установленных в переменных среды.

вы можете сделать это (что удалит учетные данные из среды).

unset AWS_SESSION_TOKEN AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY

Теперь у вас будет только один набор ключей доступа, то есть в .aws/configure, и я смог успешно установить соединение.

aws configure
aws sts get-caller-identity

если вы используете профиль, отличный от профиля по умолчанию, используйте флаг --profile в приведенной выше команде.

person Ranjith Kumar Cheguri    schedule 23.07.2021

Я также сталкиваюсь с этой ошибкой, и даже я проверил свой файл .aws/credential. Он содержит учетные данные, но все же я рекомендую следующий шаг:

прежде чем что-либо делать, первое, что вы должны сделать, выполните следующую команду

aws sts get-caller-identity

если у вас есть более одного профиля в учетных данных aws, используйте этот

Вы можете проверить свой профиль в следующем файле .aws/credential. Если у вас есть только [default], то не нужно указывать профиль

aws --profile NAME_OF_YOUR_PROFILE  sts get-caller-identity

Теперь вопрос в том, что вышеприведенная команда решит проблему?

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

An error occurred (SignatureDoesNotMatch) when calling the GetCallerIdentity operation: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.

Так что, по крайней мере, я узнаю, что использовал неправильные учетные данные. Я просто заменяю учетные данные, и моя проблема решается.

person TechnicalKeera    schedule 12.10.2020