更长的会话持续时间

更长的会话持续时间

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

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

这该如何处理?

答案1

您有几个选择...


更长的会话持续时间

您可以将最大会话持续时间设置为长达 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 实例相同的权限。


使用awsCLI分段上传文件

您可以将大文件分割成较小的块(请参阅split请参阅man page) 并使用aws s3apimultipart-upload 子命令。请参阅和aws s3api create-multipart-upload。您可以在每个部分之间刷新凭证,并在凭证中途过期时重试失败的部分。complete-multipart-uploadpart-upload


创建自定义脚本

您可以使用出色的boto3Python AWS SDK 库可用于构建您自己的文件上传器。编写一个小型多部分上传器应该非常简单,它会在凭证每次过期时请求新的凭证,包括请求 MFA。


正如您所见,您有很多选择。

希望有帮助:)

相关内容