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

如何在Python脚本中多次(两次)执行AWS Assume Role操作

基于已扮演角色再次执行AWS角色扮演的方法

你只需要重复第一次的角色扮演流程,用已经拿到的new_session创建STS客户端,再调用assume_role获取第二个角色的临时凭证,最后生成新会话即可。前提是第一个角色(s3-readonly-access)拥有扮演第二个目标角色的权限,同时第二个角色的信任策略要允许第一个角色作为可信实体。

完整代码示例

import boto3

# 第一次角色扮演(修正原代码中Session的引用问题)
session = boto3.Session(profile_name="learnaws-test")
sts = session.client("sts")
response = sts.assume_role(
    RoleArn="arn:aws:iam::xxx:role/s3-readonly-access",
    RoleSessionName="learnaws-test-session"
)
new_session = boto3.Session(
    aws_access_key_id=response['Credentials']['AccessKeyId'],
    aws_secret_access_key=response['Credentials']['SecretAccessKey'],
    aws_session_token=response['Credentials']['SessionToken']
)

# 第二次角色扮演:基于已获得的角色会话操作
second_sts = new_session.client("sts")
second_role_response = second_sts.assume_role(
    RoleArn="arn:aws:iam::xxx:role/your-second-target-role",  # 替换为第二个角色的ARN
    RoleSessionName="second-role-session"  # 自定义会话名称
)

# 生成最终会话,用于访问第二个角色对应的资源
final_session = boto3.Session(
    aws_access_key_id=second_role_response['Credentials']['AccessKeyId'],
    aws_secret_access_key=second_role_response['Credentials']['SecretAccessKey'],
    aws_session_token=second_role_response['Credentials']['SessionToken']
)

# 测试示例:用final_session访问目标资源(比如S3)
s3 = final_session.client("s3")
print(s3.list_buckets())

关键配置要求

  • 第一个角色的权限:需要在其IAM策略中添加sts:AssumeRole权限,目标为第二个角色的ARN,示例策略片段:
    {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::xxx:role/your-second-target-role"
    }
    
  • 第二个角色的信任策略:需要将第一个角色的ARN加入可信实体,示例信任策略片段:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::xxx:role/s3-readonly-access"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:11:17