Мы используем процесс аутентификации для AWS, при котором вы аутентифицируетесь, выполняете этап MFA, а затем получаете учетные данные, действительные в течение часа. Обычно они вставляются ~/.aws/credentials
. Однако при выполнении длительных операций awscli, таких как копирование большого файла через aws s3 cp ...
, срок действия учетных данных истекает, и команда не выполняется успешно.
Мы попытались повторно запустить команду для повторной аутентификации и, таким образом, повторного заполнения ~/.aws/credentials
однако выполняющаяся команда не «видит» это и по-прежнему не работает, когда срок действия исходных учетных данных истекает.
Как с этим справиться?
У вас есть несколько вариантов ...
Вы можете установить максимальную продолжительность сеанса на до 12 часов - этого может быть достаточно для ваших длительных задач.
Не знаете, как вы получаете свои временные учетные данные, возможно, вам придется установить продолжительность сеанса на 12 часов, а также некоторые инструменты запрашивают токены, действительные до 1 часа по умолчанию.
Также проверьте get-credentials
сценарий это может облегчить ваш рабочий процесс. Может быть, я не знаю, чем именно вы сейчас занимаетесь, но пишу временные кредиты на ~/.aws/credentials
обычно не лучшая практика.
Если вы не можете увеличить настройку максимальной продолжительности, вы можете обойти ограничение:
первый копирование данные к экземпляру EC2, например с помощью rsync
.
затем из EC2 загрузить в S3, воспользовавшись экземпляром Роль экземпляра EC2 который автоматически обновляется. Помимо копирования из EC2 в S3 может быть быстрее.
Вы также можете «украсть» учетные данные роли 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.
Как видите, у вас есть много вариантов.
Надеюсь, это поможет :)