如何使用Boto3在Python中多次扮演AWS IAM角色(跨账号场景)
如何通过Boto3实现AWS角色的链式扮演(SSO登录→账号A角色→账号B角色)
因为账号B的信任关系仅允许账号A的角色进行扮演,所以不能直接从SSO登录后的身份跳转至账号B,必须通过**链式调用STS的assume_role**来实现:先拿到账号A的临时凭证,再用这个凭证去申请账号B的角色权限。
修改后的完整代码
import boto3 from botocore.exceptions import ClientError def lambda_handler(event, context): # 第一步:用当前身份(SSO登录后的身份/Lambda执行角色)扮演账号A的角色 sts_client = boto3.client('sts') account_a_creds = None try: response = sts_client.assume_role( RoleArn='arn:aws:iam::<账号A的ID>:role/<账号A的角色名>', RoleSessionName='assume-account-a-session' ) account_a_creds = response['Credentials'] print("成功获取账号A的临时凭证") except ClientError as error: print(f"扮演账号A角色失败:{error}") return str(error) # 第二步:用账号A的临时凭证创建STS客户端,再扮演账号B的角色 account_b_creds = None try: sts_account_a = boto3.client( 'sts', aws_access_key_id=account_a_creds['AccessKeyId'], aws_secret_access_key=account_a_creds['SecretAccessKey'], aws_session_token=account_a_creds['SessionToken'] ) response_b = sts_account_a.assume_role( RoleArn='arn:aws:iam::<账号B的ID>:role/<账号B的角色名>', RoleSessionName='assume-account-b-session' ) account_b_creds = response_b['Credentials'] print("成功获取账号B的临时凭证") except ClientError as error: print(f"扮演账号B角色失败:{error}") return str(error) # 第三步:用账号B的临时凭证创建业务客户端(示例为IAM客户端) try: iam_client_b = boto3.client( 'iam', aws_access_key_id=account_b_creds['AccessKeyId'], aws_secret_access_key=account_b_creds['SecretAccessKey'], aws_session_token=account_b_creds['SessionToken'] ) # 这里可以添加账号B下的业务操作,比如列出IAM用户 users = iam_client_b.list_users() print(f"账号B下的IAM用户:{users['Users']}") return "链式角色扮演完成" except ClientError as error: print(f"创建账号B的IAM客户端失败:{error}") return str(error)
关键说明
- 信任关系验证:确保账号B的角色信任策略中,已添加账号A角色的ARN作为可信实体,允许
sts:AssumeRole动作。示例信任策略片段:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<账号A的ID>:role/<账号A的角色名>" }, "Action": "sts:AssumeRole" } ] } - 临时凭证有效期:默认情况下,
assume_role获取的临时凭证有效期为1小时,最长可设置为12小时(需角色允许)。 - 权限传递:账号A的角色必须拥有
sts:AssumeRole权限,目标为账号B的角色ARN。
内容的提问来源于stack exchange,提问作者qabootar
相关产品推荐
相关产品推荐

