具有 50 个 CIDR IP(入口)的安全组的 Cloudformation 模板 (JSON)

Posted

技术标签:

【中文标题】具有 50 个 CIDR IP(入口)的安全组的 Cloudformation 模板 (JSON)【英文标题】:Cloudformation template(JSON) for security group with 50 CIDR IPs (Ingress) 【发布时间】:2022-01-05 02:26:53 【问题描述】:

我正在为具有超过 50 个 CIDR IP 的入口规则的安全组创建云形成模板。 在参数中,我对多个 CIDR IP 使用了 Commadelimited 列表。 与其在 SecurityGroupIngress 中为每个 CIDR IP 创建单独的值,是否可以在单个代码中包含多个 CidrIps。

                    
                        "IpProtocol" : "tcp",
                        "CidrIp" : "54.183.255.128/26",
                        "FromPort" : "443",
                        "ToPort" : "443"
                    ,
                    
                        "IpProtocol" : "tcp",
                        "CidrIp" : "54.228.16.0/26", 
                        "FromPort" : "443",
                        "ToPort" : "443"
                    ,
                    
                        "IpProtocol" : "tcp",
                        "CidrIp" :  "54.232.40.64/26", 
                        "FromPort" : "443",
                        "ToPort" : "443"
                    ,
                    
                        "IpProtocol" : "tcp",
                        "CidrIp" : "54.241.32.64/26", 
                        "FromPort" : "443",
                        "ToPort" : "443"
                    ,

我想使用的模板如下。但在这里我只能获得 1 个位置的 CIDR IP。


    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "HTTPS - Security Group",
    "Parameters": 
        "VPC": 
            "Type": "AWS::EC2::VPC::Id",
            "Description": "VPC where the Security Group will belong"
        ,
        "Name": 
            "Type": "String",
            "Description": "Name Tag of the Security Group"
        ,
        "DbSubnetIpBlocks": 
            "Description": "Comma-delimited list of CIDR blocks",
            "Type": "CommaDelimitedList"
        
    ,
    "Resources": 
        "MySG": 
            "Type": "AWS::EC2::SecurityGroup",
            "Properties": 
                "GroupDescription": 
                    "Ref": "Description"
                ,
                "VpcId": 
                    "Ref": "VPC"
                ,
                "SecurityGroupIngress": [
                    
                        "IpProtocol": "tcp",
                        "CidrIp": 
                            "Fn::Select": [
                                "1",
                                
                                    "Ref": "DbSubnetIpBlocks"
                                
                            ]
                        ,
                        "FromPort": "443",
                        "ToPort": "443"
                    
                ]
            
        
    ,
    "Outputs": 
        "SecurityGroupID": 
            "Description": "Security Group ID",
            "Value": 
                "Ref": "MySG"
            
        

【问题讨论】:

【参考方案1】:

很遗憾,这是不可能的。一个安全组 (SG) 规则仅适用于一个 CIDR 范围。

SG 中有60 规则的限制,您可以请求增加。

虽然单个 SG 规则可以引用单个 CIDR,但您可以创建 CloudFormation macro 或 custom resource 来自动为您创建所有这些规则。

【讨论】:

谢谢马尔辛。由于有超过 50 个 CIDR IP,如果我为每个 CIDR 范围包含单独的安全组规则,CF 模板将会很长。所以在参数中定义 Commadelimited 是没有用的。 @Gnay 我更新了答案。如果你觉得它有帮助,它的acceptance 将不胜感激。

以上是关于具有 50 个 CIDR IP(入口)的安全组的 Cloudformation 模板 (JSON)的主要内容,如果未能解决你的问题,请参考以下文章

在实例安全组的入站部分使用 VPC 的 CIDR 会阻止负载均衡器到达它

为啥数据库安全组中的 CIDR/IP 可能与实例弹性 IP 不同?

这个子网划分用CIDR怎么实现?

如何使用 Terraform 附加或删除安全组的入口/出口规则?

PowerShell:如何将 1 个用户添加到多个 Active Directory 安全组 - 具有写入权限的安全组的安全选项卡

具有相同 CIDR 块的多个 VPC 和子网