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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:55:27