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

AWS Lambda跨账号查询另一AWS账号EC2实例配置异常咨询

AWS Lambda跨账号查询EC2实例遗漏配置排查

你目前的配置只完成了跨账号授权的半程,遗漏了以下核心配置项:

  • 账号B目标角色的信任策略未正确配置
    仅给账号A的Lambda角色加sts:AssumeRole权限不生效,账号B的MyRoleNameInAccountB角色的信任关系必须显式允许账号A的Lambda执行角色代入,参考信任策略如下:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::AccountA:role/你的Lambda执行角色名称"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
  • Lambda代码未主动切换到账号B的身份执行请求
    默认Lambda会自动用自身关联的执行角色初始化AWS SDK,你没有显式调用STS接口获取账号B角色的临时凭证,也没有用这组凭证重新初始化EC2客户端的话,所有请求默认还是走账号A的身份,自然只能查到账号A的资源。参考Python代码逻辑:
import boto3

# 调用STS获取跨账号临时凭证
sts_client = boto3.client('sts')
assume_res = sts_client.assume_role(
    RoleArn="arn:aws:iam::AccountB:role/MyRoleNameInAccountB",
    RoleSessionName="cross-account-ec2-query"
)
temp_creds = assume_res['Credentials']

# 用临时凭证初始化账号B的EC2客户端
ec2_client_b = boto3.client(
    'ec2',
    aws_access_key_id=temp_creds['AccessKeyId'],
    aws_secret_access_key=temp_creds['SecretAccessKey'],
    aws_session_token=temp_creds['SessionToken']
)

# 查询账号B的EC2实例
res_b = ec2_client_b.describe_instances()
  • 账号B的目标角色未配置EC2查询权限
    你给Lambda角色加的ec2:DescribeInstances权限仅对账号A资源生效,账号B的MyRoleNameInAccountB自身必须附加允许ec2:DescribeInstances的权限策略,否则代入角色后也没有权限查询账号B的EC2资源。
  • 其他常见配置错误
    • 角色ARN填写错误:确认ARN中的AccountB为12位数字账号ID,角色名、角色路径完全匹配
    • 权限限制:如果账号配置了IAM权限边界或者组织SCP(服务控制策略),需要确认策略没有禁止跨账号代入、EC2查询操作
    • 会话时长不匹配:如果Lambda运行时长超过账号B目标角色的最大会话时长,会导致临时凭证失效,需要调整目标角色的最大会话时长适配Lambda运行时间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:45:10