You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过boto3轮换AWS IAM用户的访问密钥和秘密访问密钥

AWS S3 单次使用即过期凭证实现方案

可实现的两种路径

  • 路径1:基于STS临时凭证+内部凭证分发服务(推荐)
    AWS STS服务默认支持生成最短15分钟有效期的临时访问凭证,你可以自行搭建一个内部的凭证分发服务,该服务部署在安全环境中,持有有权限调用STS AssumeRole接口的身份凭证,你在不安全网络环境中仅需要和这个内部服务交互:
    1. 每次发起S3请求前,调用内部服务的凭证刷新接口,拿到新的临时凭证
    2. 使用该凭证初始化boto3客户端完成S3操作
    3. 操作完成后调用内部服务的凭证作废接口,服务侧将该凭证加入黑名单,即使15分钟有效期未到也不会被二次使用
      示例交互逻辑和代码如下:
import requests
import boto3

# 调用内部服务拿新凭证,和你期望的curl请求逻辑一致
resp = requests.get("https://your-internal-service/refresh/token")
credential = resp.json()
# 响应示例:{"new_access_token":"xxxx", "new_secret_token":"yyyy", "session_token":"zzzz"}

# 初始化S3客户端
s3_client = boto3.client(
    "s3",
    aws_access_key_id=credential["new_access_token"],
    aws_secret_access_key=credential["new_secret_token"],
    aws_session_token=credential.get("session_token") # STS临时凭证需要带session token
)

# 执行你的S3操作
s3_client.put_object(Bucket="your-bucket", Key="test.txt", Body=b"test content")

# 操作完成后调用接口作废凭证,实现立即过期
requests.post("https://your-internal-service/revoke/token", json={"access_token": credential["new_access_token"]})
  • 路径2:基于IAM用户静态密钥轮换(仅适合极低请求频率场景)
    IAM用户最多可同时持有2组访问密钥,你可以在安全侧维护一个IAM身份,每次需要发起S3请求时生成新的静态密钥,请求完成后立刻删除该密钥,即可实现使用后立即过期的效果。但该方案存在IAM接口调用频率限制,且高并发下会触发超过2组密钥的报错,仅适合单线程低频次的使用场景,示例代码如下:
import boto3

# 该IAM客户端部署在安全侧,不要暴露到不安全网络
iam_client = boto3.client("iam")

# 生成新的访问密钥
new_key = iam_client.create_access_key(UserName="your-s3-iam-user")["AccessKey"]

# 用新密钥初始化S3客户端
s3_client = boto3.client(
    "s3",
    aws_access_key_id=new_key["AccessKeyId"],
    aws_secret_access_key=new_key["SecretAccessKey"]
)

# 执行S3操作
s3_client.get_object(Bucket="your-bucket", Key="test.txt")

# 操作完成后立即删除密钥,实现立即过期
iam_client.delete_access_key(
    UserName="your-s3-iam-user",
    AccessKeyId=new_key["AccessKeyId"]
)

注意:如果你的请求频率较高,不要使用第二种方案,IAM接口的限流阈值很低,频繁创建删除密钥会导致请求失败。

内容的提问来源于stack exchange,提问作者User12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:39:02