Fri*_*sen 9 amazon-web-services aws-cli
我们使用 AWS 身份验证流程,您可以通过该流程进行身份验证、执行 MFA 步骤,然后获得有效期一小时的凭证。通常这些都会被放入~/.aws/credentials
。但是,当执行长时间运行的 awscli 操作(例如通过 复制大文件)时aws s3 cp ...
,凭证会过期并且命令无法成功完成。
我们已尝试重新运行命令来重新进行身份验证,从而重新填充,~/.aws/credentials
但是正在进行的命令不会“看到”这一点,并且在原始凭据过期时仍然会失败。
这件事应该如何处理?
MLu*_*MLu 10
你有几个选择......
\n\n您可以将最大会话持续时间设置为最多 12 小时- 这对于长时间运行的任务来说可能足够了。
\n\n\n\n不确定您如何获取临时凭据,您可能必须将会话持续时间设置为 12 小时,并且某些工具默认请求有效期为 1 小时的令牌。
\n\n另请查看可以促进您的工作流程的get-credentials
脚本。也许,我不知道您现在到底在做什么,但是写入临时信用~/.aws/credentials
通常不是最佳实践。
如果您可以\xe2\x80\x99t 增加最大持续时间设置,您可以通过以下方式解决该限制:
\n\n首先将数据复制到 EC2 实例,例如使用rsync
.
然后从 EC2 上传到 S3,利用自动续订的实例EC2 实例角色。此外,从 EC2 复制到 S3可能会更快。
您还可以“窃取”EC2 角色凭证并在本地使用它。看看这个get-instance-credentials
脚本。
[ec2-user@ip-... ~] ./get-instance-credentials\nexport AWS_ACCESS_KEY_ID="ASIA5G7...R3KG5"\nexport AWS_SECRET_ACCESS_KEY="bzkNi/9YV...FDzzd0"\nexport AWS_SESSION_TOKEN="IQoJb3JpZ2luX2VjEKf....PUtXw=="\n
Run Code Online (Sandbox Code Playgroud)\n\n这些积分的有效期通常为 6 小时。
\n\n现在将这些行复制并粘贴到本地非 EC2 计算机。
\n\nuser@server ~ $ export AWS_ACCESS_KEY_ID="ASIA5G7...R3KG5"\nuser@server ~ $ export AWS_SECRET_ACCESS_KEY="bzkNi/9YV...FDzzd0"\nuser@server ~ $ export AWS_SESSION_TOKEN="IQoJb3JpZ2luX2VjEKf....PUtXw=="\n
Run Code Online (Sandbox Code Playgroud)\n\n并验证凭据是否有效:
\n\nuser@server ~ $ aws sts get-caller-identity\n{\n "UserId": "AROAIA...DNG:i-abcde123456",\n "Account": "987654321098",\n "Arn": "arn:aws:sts::987654321098:assumed-role/EC2-Role/i-abcde123456"\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n正如您所看到的,您的本地非 EC2 服务器现在具有与从中检索凭证的 EC2 实例相同的权限。
\n\naws
CLI分段上传文件您可以将大文件拆分为较小的块(请参阅split
手册页)并使用aws s3api
分段上传子命令。参见aws s3api create-multipart-upload
、complete-multipart-upload
和part-upload
。您可以刷新每个部分之间的凭据,如果您的凭据中途过期,则可以重试失败的部分。
你可以使用辉煌boto3
Python AWS SDK 库来构建您自己的文件上传器。编写一个小型分段上传器应该非常简单,每次凭证过期时都会请求新的凭证,包括请求 MFA。
正如您所看到的,您有很多选择。
\n\n希望有帮助:)
\n 归档时间: |
|
查看次数: |
9879 次 |
最近记录: |