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

如何使用boto3为单个安全组添加多个IP地址?

给单个安全组批量添加IP规则(boto3/AWS CDK实现)

一、用boto3(原生AWS SDK)实现

你提到的IpPermissions模式完全可以用来批量添加安全组规则,不管是单个端口开放给多个IP,还是同时配置多个端口的规则都支持。

示例1:给443端口添加多个IP

import boto3

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

# 定义批量规则:443端口开放给多个指定IP
ip_permissions = [
    {
        'IpProtocol': 'tcp',
        'FromPort': 443,
        'ToPort': 443,
        'IpRanges': [
            {'CidrIp': '192.168.1.1/32', 'Description': 'IP1 access 443'},
            {'CidrIp': '10.0.0.1/32', 'Description': 'IP2 access 443'},
            {'CidrIp': '172.16.0.1/32', 'Description': 'IP3 access 443'}
        ]
    }
]

# 调用API添加规则,替换为你的安全组ID
ec2_client.authorize_security_group_ingress(
    GroupId='sg-xxxxxxxxxxxxxxxxx',
    IpPermissions=ip_permissions
)

示例2:同时添加多端口规则(每个端口对应不同IP范围)

ip_permissions = [
    {
        'IpProtocol': 'tcp',
        'FromPort': 80,
        'ToPort': 80,
        'IpRanges': [
            {'CidrIp': '192.168.1.0/24', 'Description': 'Office subnet access 80'},
            {'CidrIp': '10.0.0.0/24', 'Description': 'VPC subnet access 80'}
        ]
    },
    {
        'IpProtocol': 'tcp',
        'FromPort': 22,
        'ToPort': 22,
        'IpRanges': [
            {'CidrIp': '192.168.1.10/32', 'Description': 'Admin IP access 22'}
        ]
    },
    {
        'IpProtocol': 'tcp',
        'FromPort': 443,
        'ToPort': 443,
        'IpRanges': [{'CidrIp': '0.0.0.0/0', 'Description': 'Public access 443'}]
    }
]

ec2_client.authorize_security_group_ingress(
    GroupId='sg-xxxxxxxxxxxxxxxxx',
    IpPermissions=ip_permissions
)

二、用AWS CDK(你当前代码的环境)实现

你当前的代码是AWS CDK的写法(通过ec2.SecurityGroupIngress资源添加规则),批量添加规则有两种简洁的实现方式:

方式1:循环创建多个SecurityGroupIngress资源

from aws_cdk import aws_ec2 as ec2
from aws_cdk import Stack, Ref
from constructs import Construct

class YourStack(Stack):
    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)
        
        # 假设已定义目标安全组
        self.public_alb_sg = ec2.SecurityGroup(self, "PublicALBSG", 
                                               vpc=your_vpc,
                                               allow_all_outbound=True)
        
        # 要添加的IP列表(CIDR + 描述)
        allowed_ips = [
            ("192.168.1.1/32", "IP1 access 443"),
            ("10.0.0.1/32", "IP2 access 443"),
            ("172.16.0.1/32", "IP3 access 443")
        ]
        
        # 循环生成Ingress规则
        for idx, (cidr, desc) in enumerate(allowed_ips):
            ec2.SecurityGroupIngress(
                self, f"443Access-{idx}",
                group_id=Ref(self.public_alb_sg),
                cidr_ip=cidr,
                description=desc,
                ip_protocol="tcp",
                from_port=443,
                to_port=443
            )

方式2:使用安全组内置的add_ingress_rule方法批量添加

这种方式无需手动创建SecurityGroupIngress资源,更符合CDK的最佳实践:

from aws_cdk import aws_ec2 as ec2
from constructs import Construct

class YourStack(Stack):
    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)
        
        # 创建或引用目标安全组
        self.public_alb_sg = ec2.SecurityGroup(self, "PublicALBSG", 
                                               vpc=your_vpc,
                                               allow_all_outbound=True)
        
        # 批量添加443端口的IP规则
        allowed_ips = [
            ec2.Peer.ipv4("192.168.1.1/32"),
            ec2.Peer.ipv4("10.0.0.1/32"),
            ec2.Peer.ipv4("172.16.0.1/32")
        ]
        
        for peer in allowed_ips:
            self.public_alb_sg.add_ingress_rule(
                peer=peer,
                connection=ec2.Port.tcp(443),
                description="443 access"
            )
        
        # 额外添加其他端口规则
        self.public_alb_sg.add_ingress_rule(
            peer=ec2.Peer.ipv4("192.168.1.0/24"),
            connection=ec2.Port.tcp(80),
            description="Office subnet access 80"
        )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:20:26