如何使用 boto3 轮换我的 AWS IAM 用户访问权限和密钥?

How do I rotate my AWS IAM user access and secret key using boto3?

我们正在使用 Python AWS SDK (boto3) 连接到 S3。

我们有静态访问和秘密令牌,但是我的网络不安全。

我无法使用其他网络发送请求,所以有没有办法在每次请求后更改访问密钥和密钥?

我可以在安全数据库中保存一个新令牌以发送另一个请求,但重要的是在使用该令牌后,它会过期。

我在找什么:

send: curl https://aws.endpoint/refresh/token
response: {“new_access_token”:”blablabla”, “new_secret_token”:”blablablabla”}

如果必须,您可以组合使用 iam.create_access_key, iam.get_access_key_last_used, iam.update_access_key & iam.delete_access_key API 操作来轮换密钥。

请记住,每个用户最多只能有 2 个访问密钥,因此您必须使用 create_access_key 创建一个新访问密钥,disable/make 停用当前(旧)密钥(get_access_key_last_used & update_access_key), 在应用程序代码中将您的访问密钥更改为下一个,然后最后删除当前的 delete_access_key.


但是,AWS 访问密钥是 IAM 用户或 AWS 账户根用户的长期凭证;您可以定期轮换它们,但在这种情况下我不会首先这样做。

您的最佳解决方案将取决于您使用的服务。

例如,如果使用 EC2 实例调用 S3,则不要 use/embed/pass/read 访问密钥,而是使用短期临时安全凭证,这些凭证将通过启动具有 S3 访问角色的 EC2 实例来提供。

如果您在本地使用此脚本,则可以使用 AWS Security Token Service (AWS STS) that enables you to request temporary, limited-privilege credentials for AWS IAM users/federated users (single sign-on etc.). You'd be looking for the GetSessionToken API operation (Boto3 SDK docs here).

在这两种情况下,凭据都包含一个安全令牌,指示凭据何时过期,并且它们的有效期很短,以帮助降低凭据意外暴露的风险。

阅读:Best practices for managing AWS access keys