刷新AWS临时凭证

Fri*_*sen 9 amazon-web-services aws-cli

我们使用 AWS 身份验证流程,您可以通过该流程进行身份验证、执行 MFA 步骤,然后获得有效期一小时的凭证。通常这些都会被放入~/.aws/credentials。但是,当执行长时间运行的 awscli 操作(例如通过 复制大文件)时aws s3 cp ...,凭证会过期并且命令无法成功完成。

我们已尝试重新运行命令来重新进行身份验证,从而重新填充,~/.aws/credentials但是正在进行的命令不会“看到”这一点,并且在原始凭据过期时仍然会失败。

这件事应该如何处理?

MLu*_*MLu 10

你有几个选择......

\n\n
\n\n

更长的会话持续时间

\n\n

您可以将最大会话持续时间设置为最多 12 小时- 这对于长时间运行的任务来说可能足够了。

\n\n

凭证有效性

\n\n

不确定您如何获取临时凭据,您可能必须将会话持续时间设置为 12 小时,并且某些工具默认请求有效期为 1 小时的令牌。

\n\n

另请查看可以促进您的工作流程的get-credentials脚本。也许,我不知道您现在到底在做什么,但是写入临时信用~/.aws/credentials通常不是最佳实践。

\n\n
\n\n

先复制到EC2

\n\n

如果您可以\xe2\x80\x99t 增加最大持续时间设置,您可以通过以下方式解决该限制:

\n\n
    \n
  1. 首先将数据复制到 EC2 实例,例如使用rsync.

  2. \n
  3. 然后从 EC2 上传到 S3,利用自动续订的实例EC2 实例角色。此外,从 EC2 复制到 S3可能会更快。

  4. \n
\n\n
\n\n

在本地使用 EC2 凭证

\n\n

您还可以“窃取”EC2 角色凭证并在本地使用它。看看这个get-instance-credentials脚本。

\n\n
[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\n
user@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\n
user@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\n
\n\n

使用awsCLI分段上传文件

\n\n

您可以将大文件拆分为较小的块(请参阅split手册页)并使用aws s3api分段上传子命令。参见aws s3api create-multipart-uploadcomplete-multipart-uploadpart-upload。您可以刷新每个部分之间的凭据,如果您的凭据中途过期,则可以重试失败的部分。

\n\n
\n\n

创建自定义脚本

\n\n

你可以使用辉煌boto3Python AWS SDK 库来构建您自己的文件上传器。编写一个小型分段上传器应该非常简单,每次凭证过期时都会请求新的凭证,包括请求 MFA。

\n\n
\n\n

正如您所看到的,您有很多选择。

\n\n

希望有帮助:)

\n