Назад | Перейти на главную страницу

Обновление временных учетных данных AWS

Мы используем процесс аутентификации для AWS, при котором вы аутентифицируетесь, выполняете этап MFA, а затем получаете учетные данные, действительные в течение часа. Обычно они вставляются ~/.aws/credentials. Однако при выполнении длительных операций awscli, таких как копирование большого файла через aws s3 cp ..., срок действия учетных данных истекает, и команда не выполняется успешно.

Мы попытались повторно запустить команду для повторной аутентификации и, таким образом, повторного заполнения ~/.aws/credentials однако выполняющаяся команда не «видит» это и по-прежнему не работает, когда срок действия исходных учетных данных истекает.

Как с этим справиться?

У вас есть несколько вариантов ...


Более длительная продолжительность сеанса

Вы можете установить максимальную продолжительность сеанса на до 12 часов - этого может быть достаточно для ваших длительных задач.

Не знаете, как вы получаете свои временные учетные данные, возможно, вам придется установить продолжительность сеанса на 12 часов, а также некоторые инструменты запрашивают токены, действительные до 1 часа по умолчанию.

Также проверьте get-credentials сценарий это может облегчить ваш рабочий процесс. Может быть, я не знаю, чем именно вы сейчас занимаетесь, но пишу временные кредиты на ~/.aws/credentials обычно не лучшая практика.


Сначала скопируйте в EC2

Если вы не можете увеличить настройку максимальной продолжительности, вы можете обойти ограничение:

  1. первый копирование данные к экземпляру EC2, например с помощью rsync.

  2. затем из EC2 загрузить в S3, воспользовавшись экземпляром Роль экземпляра EC2 который автоматически обновляется. Помимо копирования из EC2 в S3 может быть быстрее.


Использовать учетные данные EC2 локально

Вы также можете «украсть» учетные данные роли EC2 и использовать их локально. Проверить это get-instance-credentials сценарий.

[ec2-user@ip-... ~] ./get-instance-credentials
export AWS_ACCESS_KEY_ID="ASIA5G7...R3KG5"
export AWS_SECRET_ACCESS_KEY="bzkNi/9YV...FDzzd0"
export AWS_SESSION_TOKEN="IQoJb3JpZ2luX2VjEKf....PUtXw=="

Эти кредиты обычно хорошо в течение 6 часов.

Теперь скопируйте и вставьте эти строки на локальный компьютер без EC2.

user@server ~ $ export AWS_ACCESS_KEY_ID="ASIA5G7...R3KG5"
user@server ~ $ export AWS_SECRET_ACCESS_KEY="bzkNi/9YV...FDzzd0"
user@server ~ $ export AWS_SESSION_TOKEN="IQoJb3JpZ2luX2VjEKf....PUtXw=="

И убедитесь, что учетные данные работают:

user@server ~ $ aws sts get-caller-identity
{
    "UserId": "AROAIA...DNG:i-abcde123456",
    "Account": "987654321098",
    "Arn": "arn:aws:sts::987654321098:assumed-role/EC2-Role/i-abcde123456"
}

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


Использовать aws CLI для загрузка нескольких частей файл

Вы можете разделить большой файл на более мелкие части (см. split страница руководства) и используйте aws s3api подкоманды multipart-upload. Видеть aws s3api create-multipart-upload, complete-multipart-upload и part-upload. Вы можете обновлять учетные данные между каждой частью и повторять отказавшие части, если срок действия ваших учетных данных истекает на полпути.


Создать собственный сценарий

Вы можете использовать блестящий boto3 Библиотека Python AWS SDK для создания собственного загрузчика файлов. Должно быть очень просто написать небольшую программу загрузки из нескольких частей, которая будет запрашивать новые учетные данные каждый раз, когда срок их действия истекает, включая запрос MFA.


Как видите, у вас есть много вариантов.

Надеюсь, это поможет :)