如何在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
相关产品推荐
相关产品推荐

