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

如何使用Boto3为AWS组织子账号创建EC2实例?

为AWS组织子账号创建EC2实例的Boto3实现方案

AWS组织的子账号是独立的AWS账号,无法通过主账号的Boto3客户端直接指定子账号创建EC2实例,需通过子账号身份凭证或跨账号角色扮演两种方式实现,现有创建实例的核心逻辑无需改动,仅需调整Boto3资源的初始化部分。

方式一:直接使用子账号凭证

  1. 子账号侧准备:

    • 给子账号的IAM用户(不推荐用根用户)分配EC2实例创建权限,比如附加AmazonEC2FullAccess管理策略,或自定义仅允许RunInstances等必要操作的策略。
    • 生成该IAM用户的Access Key ID和Secret Access Key。
  2. 修改Boto3初始化代码,替换为子账号凭证:

import boto3

# 替换为子账号的凭证信息
sub_account_ak = "子账号Access Key ID"
sub_account_sk = "子账号Secret Access Key"
region = "你的目标区域"

# 用子账号身份初始化EC2资源
ec2 = boto3.resource(
    "ec2",
    region_name=region,
    aws_access_key_id=sub_account_ak,
    aws_secret_access_key=sub_account_sk
)

# 原创建实例的代码完全保留,无需修改
instances = ec2.create_instances(
    ImageId="ami-xxxxxx",  # 替换为你的AMI ID
    MinCount=1,
    MaxCount=1,
    InstanceType="t2.micro"
)

方式二:主账号扮演子账号IAM角色(更安全,无需硬编码凭证)

如果不想在脚本中硬编码子账号凭证,可通过STS服务让主账号扮演子账号中创建的IAM角色,获取临时凭证后操作:

  1. 子账号侧配置:

    • 创建一个IAM角色,信任策略中添加主账号的账号ID,允许主账号扮演该角色。
    • 给该角色分配EC2实例创建权限(同方式一的权限要求)。
  2. 主账号侧Boto3代码调整:

import boto3

# 主账号调用STS服务获取子账号角色的临时凭证
sts_client = boto3.client("sts")
assume_role_response = sts_client.assume_role(
    RoleArn="arn:aws:iam::子账号ID:role/你的角色名称",
    RoleSessionName="CreateEC2Session"  # 自定义会话名称
)

temp_creds = assume_role_response["Credentials"]

# 用临时凭证初始化EC2资源
ec2 = boto3.resource(
    "ec2",
    region_name="你的目标区域",
    aws_access_key_id=temp_creds["AccessKeyId"],
    aws_secret_access_key=temp_creds["SecretAccessKey"],
    aws_session_token=temp_creds["SessionToken"]
)

# 原创建实例代码无改动
instances = ec2.create_instances(...)

关键注意事项

  • 若要让子账号使用独立信用卡付费,需在AWS组织控制台开启成员账户自行付费模式,否则默认由主账号统一承担所有子账号费用。
  • 凭证管理建议:不要硬编码凭证到代码中,优先使用环境变量、AWS Secrets Manager,或在EC2实例上关联IAM角色(若脚本运行在EC2上)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 06:31:04