You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何获取AWS私有子网中已分配私有IP列表及关联AWS服务?

没问题!我来给你梳理几种适配你需求的方法——涵盖你熟悉的AWS控制台、CLI和Boto3,帮你拿到私有子网里所有已分配的私有IP,还能关联对应的AWS服务:

通过AWS控制台查询

操作步骤很直观,适合快速查看:

  • 打开VPC控制台,找到目标私有子网,先记下它的CIDR块(比如10.0.1.0/24),方便后续核对范围。
  • 切换到EC2控制台,在左侧导航栏找到「网络接口」选项,进入页面。
  • 添加两个过滤条件:
    • 第一个选「子网ID」,输入目标子网的ID;
    • 第二个选「私有IP地址状态」,选择「已分配」。
  • 此时列表里会展示该子网下所有已分配的私有IP,你可以通过「附加到」或「描述」列,快速识别关联的AWS服务(比如EC2实例、RDS数据库、Lambda弹性网络接口等)。
  • 小提示:AWS子网的5个预留IP(子网网络地址、VPC路由器、DNS服务器、预留地址、广播地址)会自动被排除,不用手动筛选。
使用AWS CLI查询

CLI适合批量操作或自动化场景,直接用describe-network-interfaces命令就能搞定:

aws ec2 describe-network-interfaces \
  --filters "Name=subnet-id,Values=your-subnet-id" "Name=private-ip-address-association.status,Values=associated" \
  --query 'NetworkInterfaces[*].PrivateIpAddresses[*].[PrivateIpAddress, Description, Association.AssociatedResourceId]' \
  --output table

参数说明:

  • your-subnet-id替换成你的目标子网ID;
  • query参数帮你提取核心信息:私有IP、接口描述、关联的资源ID(比如EC2实例IDi-xxxxxx、RDS资源IDdb-xxxxxx);
  • 这个命令返回的结果已经自动排除了子网的5个预留IP,而且不管关联的资源(比如EC2实例)是运行还是停止状态,已分配的IP都会被保留并显示。

如果想先确认子网的CIDR和剩余可用IP数,可以先执行这条命令:

aws ec2 describe-subnets --subnet-ids your-subnet-id --query 'Subnets[*].[CidrBlock, AvailableIpAddressCount]'
使用Boto3查询

用Python的Boto3可以更灵活地处理结果,比如把数据导出到文件或者做自定义统计,下面是一个实用的示例脚本:

import boto3

# 初始化EC2客户端
ec2 = boto3.client('ec2')

# 替换成你的目标子网ID
target_subnet_id = 'your-subnet-id'

# 先获取子网的CIDR块,确认IP范围
subnet_response = ec2.describe_subnets(SubnetIds=[target_subnet_id])
subnet_cidr = subnet_response['Subnets'][0]['CidrBlock']
print(f"目标私有子网CIDR: {subnet_cidr}")
print("\n已分配的私有IP及关联服务信息:")

# 查询子网下所有已分配IP的网络接口
ni_response = ec2.describe_network_interfaces(
    Filters=[
        {'Name': 'subnet-id', 'Values': [target_subnet_id]},
        {'Name': 'private-ip-address-association.status', 'Values': ['associated']}
    ]
)

# 遍历结果并输出
for interface in ni_response['NetworkInterfaces']:
    for ip_detail in interface['PrivateIpAddresses']:
        private_ip = ip_detail['PrivateIpAddress']
        # 获取关联的资源ID,没有的话显示"无关联资源"
        associated_resource = ip_detail['Association'].get('AssociatedResourceId', '无关联资源')
        interface_desc = interface.get('Description', '无描述信息')
        print(f"- IP地址: {private_ip} | 关联资源ID: {associated_resource} | 接口描述: {interface_desc}")

脚本说明:

  • 会先打印子网的CIDR块,然后逐个输出已分配的私有IP、关联的资源ID和接口描述;
  • 同样自动排除了子网的5个预留IP,不管资源状态如何,只要IP已分配就会被列出。

额外注意事项

  • 确保你的IAM账号拥有ec2:DescribeSubnetsec2:DescribeNetworkInterfaces权限,否则会出现权限不足的错误;
  • 部分服务(比如Lambda的弹性网络接口)可能不会直接显示为“附加到实例”,但通过接口描述或关联资源ID可以识别出来;
  • 如果需要统计已分配IP的总数,直接数结果里的条目数就行,因为预留IP已经被排除了。

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

火山引擎 最新活动