我们对 AWS 使用身份验证流程,您可以通过该流程进行身份验证、执行 MFA 步骤,然后获得有效期为一小时的凭证。通常这些然后放入~/.aws/credentials
。但是,在执行长时间运行的 awscli 操作(例如通过 复制大文件)时aws s3 cp ...
,凭据会过期并且命令不会成功完成。
我们已尝试重新运行命令以重新进行身份验证并因此重新填充,~/.aws/credentials
但是正在进行的命令不会“看到”这一点,并且在原始凭据到期时仍然会失败。
这个应该怎么处理?
我们对 AWS 使用身份验证流程,您可以通过该流程进行身份验证、执行 MFA 步骤,然后获得有效期为一小时的凭证。通常这些然后放入~/.aws/credentials
。但是,在执行长时间运行的 awscli 操作(例如通过 复制大文件)时aws s3 cp ...
,凭据会过期并且命令不会成功完成。
我们已尝试重新运行命令以重新进行身份验证并因此重新填充,~/.aws/credentials
但是正在进行的命令不会“看到”这一点,并且在原始凭据到期时仍然会失败。
这个应该怎么处理?
你有几个选择...
更长的会话持续时间
您可以将最长会话持续时间设置为最长12 小时- 这对于您的长时间运行的任务可能已经足够了。
不确定您是如何获取临时凭证的,您可能必须将会话持续时间设置为 12 小时,并且某些工具请求令牌的默认有效期为 1 小时。
另请查看可能有助于您的工作流程的
get-credentials
脚本。也许,我不知道你现在到底在做什么,但是写临时信用~/.aws/credentials
通常不是最好的做法。先复制到EC2
如果您无法增加最大持续时间设置,您可以通过以下方式解决限制:
首先将数据复制到 EC2 实例,例如使用
rsync
.然后从 EC2 上传到 S3,利用自动更新的实例EC2 Instance Role。此外,从 EC2 复制到 S3可能会更快。
在本地使用 EC2 凭证
您还可以“窃取” EC2 角色凭证并在本地使用它。看看这个
get-instance-credentials
脚本。这些信用通常可以持续 6 小时。
现在将这些行复制并粘贴到您的本地非 EC2 机器上。
并验证凭据是否有效:
如您所见,您的本地非 EC2 服务器现在具有与您从中检索凭证的 EC2 实例相同的权限。
使用
aws
CLI多部分上传文件您可以将大文件拆分为较小的块(参见
split
手册页)并使用aws s3api
multipart-upload 子命令。见和。aws s3api create-multipart-upload
_ 如果您的凭据中途过期,您可以刷新每个部分之间的凭据并重试失败的部分。complete-multipart-upload
part-upload
创建自定义脚本
您可以使用出色的
boto3
Python AWS 开发工具包库来构建您自己的文件上传器。编写一个小的多部分上传器应该非常简单,它将在每次到期时请求新凭据,包括请求 MFA。如您所见,您有很多选择。
希望有帮助:)