首页 > 解决方案 > 如何解决 AWS Bad String 上的 JSON 错误?

问题描述

不知道这里的坏字符串在哪里,有人可以帮助我吗?它在 AWS 控制台上看起来像是一条错误消息,但我在这里找不到我缺少的东西。

该脚本用于创建 VPC、路由、IGW 和 Palo Alto 防火墙,认为问题是我缺少的一些 ] 或 }。

我们是否有一个工具来分析它,而不是手动搜索?

{
  "AWSTemplateFormatVersion": "2010-09-09",

  "Description": "PANW Firewall (sample-cft).",

 "Parameters": {
    "BootstrapBucketName":{
        "Description": "Bucket name for FW bootstrap configuration",
        "Type": "String"
    },
    "ServerKeyName": {
      "Description": "Name of an existing EC2 KeyPair to enable SSH access to the FW (Hint: You MUST have its private key)",
      "Type": "AWS::EC2::KeyPair::KeyName"
    }
  },

  "Mappings": {
    "PANFWRegionMap" : {
        "us-west-2"      :  { "AMI": "ami-d28992ab"},
        "ap-northeast-1" :  { "AMI": "ami-ab04e7cd"},
        "us-west-1"      :  { "AMI": "ami-0f88a16f"},
        "ap-northeast-2" :  { "AMI": "ami-6cbd6402"},
        "ap-southeast-1" :  { "AMI": "ami-1897057b"},
        "ap-southeast-2" :  { "AMI": "ami-8ed3cced"},
        "eu-central-1"   :  { "AMI": "ami-6df35f02"},
        "eu-west-1"      :  { "AMI": "ami-86d63eff"},
        "eu-west-2"      :  { "AMI": "ami-3c170658"},
        "sa-east-1"      :  { "AMI": "ami-15651279"},
        "us-east-1"      :  { "AMI": "ami-0d7ef242edccdad95"},
        "us-east-2"      :  { "AMI": "ami-f1200094"},
        "ca-central-1"   :  { "AMI": "ami-0f08b76b"},
        "ap-south-1"     :  { "AMI": "ami-1ffc8470"}
    },

  "Resources": {
    "BootstrapRole": {
        "Type": "AWS::IAM::Role",
        "Properties": {
            "AssumeRolePolicyDocument": {
                "Version": "2012-10-17",
                "Statement": [ {
                    "Effect": "Allow",
                    "Principal": {
                        "Service": "ec2.amazonaws.com"
                    },
                "Action": "sts:AssumeRole"
                } ]
            },
            "Path":"/",
            "Policies": [ {
                "PolicyName" : "BootstrapRolePolicy",
                "PolicyDocument": {
                    "Version" : "2012-10-17",
                    "Statement": [{
                        "Effect": "Allow",
                        "Action": "s3:ListBucket",
                         "Resource": { "Fn::Join" : ["", [ "arn:aws:s3:::", { "Ref" : "BootstrapBucketName" }]]}
                    },
                    {
                        "Effect": "Allow",
                        "Action": "s3:GetObject",
                         "Resource": { "Fn::Join" : ["", [ "arn:aws:s3:::", { "Ref" : "BootstrapBucketName" } , "/*" ]]}
                    }]
                }
            }]
        }
    },
    "BootstrapInstanceProfile":{
        "Type": "AWS::IAM::InstanceProfile",
        "Properties": {
          "Path": "/",
          "Roles": [ {
              "Ref": "BootstrapRole"
            }]
        }
    },

    "NewVPC": {
      "Type": "AWS::EC2::VPC",
      "Properties": {
        "CidrBlock": "10.0.0.0/16",
        "InstanceTenancy": "default",
        "EnableDnsSupport": "true",
        "EnableDnsHostnames": "true",
        "Tags": [{ "Key": "Name", "Value": "PAN Sample CFT" }]
      }
    },

    "PublicElasticIP": {
       "Type" : "AWS::EC2::EIP",
       "Properties" : {
          "Domain" : "vpc"
       },
       "DependsOn": [ "NewVPC" ]
    },

    "ManagementElasticIP": {
       "Type" : "AWS::EC2::EIP",
       "Properties" : {
          "Domain" : "vpc"
       },
       "DependsOn": [ "NewVPC" ]
    },

    "NewDBSubnet": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "CidrBlock": "10.0.2.0/24",
        "VpcId": {"Ref": "NewVPC"},
        "AvailabilityZone": "" ,
        "Tags": [{ "Key": "Name", "Value": "PAN Sample CFT" }]
      },
      "DependsOn": "NewVPC"
    },

    "NewPublicSubnet": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "CidrBlock": "10.0.0.0/24",
        "VpcId": {"Ref": "NewVPC"},
        "AvailabilityZone": { "Fn::GetAtt" : [ "NewDBSubnet", "AvailabilityZone" ] },
        "Tags": [{ "Key": "Name", "Value": "PAN Sample CFT" }]
      },
      "DependsOn": [ "NewVPC", "NewDBSubnet" ]
    },

    "NewWebSubnet": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "CidrBlock": "10.0.1.0/24",
        "AvailabilityZone": { "Fn::GetAtt" : [ "NewDBSubnet", "AvailabilityZone" ] },
        "VpcId": {"Ref": "NewVPC"},
        "Tags": [{ "Key": "Name", "Value": "PAN Sample CFT" }]
      },
      "DependsOn":[ "NewVPC", "NewDBSubnet" ]
    },

    "igweb3def8e": {
      "Type": "AWS::EC2::InternetGateway",
      "Properties": {
        "Tags": [{ "Key": "Name", "Value": "PAN Sample CFT" }]
      }
    },

    "dopt21c7d043": {
      "Type": "AWS::EC2::DHCPOptions",
      "Properties": {
        "DomainName": "us-west-2.compute.internal",
        "DomainNameServers": [
          "AmazonProvidedDNS"
        ]
      }
    },

    "aclb765d6d2": {
      "Type": "AWS::EC2::NetworkAcl",
      "Properties": {
        "VpcId": {"Ref": "NewVPC"}
      }
    },

    "rtb059a2460": {
      "Type": "AWS::EC2::RouteTable",
      "Properties": {
        "VpcId": {"Ref": "NewVPC"}
      }
    },

    "rtb049a2461": {
      "Type": "AWS::EC2::RouteTable",
      "Properties": {
        "VpcId": {"Ref": "NewVPC"}
      }
    },

    "FWManagementNetworkInterface": {
      "Type": "AWS::EC2::NetworkInterface",
      "Properties": {
        "Description": "AWS FW1 MGMT",
        "SubnetId": {"Ref": "NewPublicSubnet"},
        "SourceDestCheck": "false",
        "PrivateIpAddresses": [
          {
            "PrivateIpAddress": "10.0.0.99",
            "Primary": "true"
          }
        ],
        "GroupSet": [{"Ref": "sgWideOpen"}],
        "Tags": [{"Key": "Name","Value": "WP AWS FW1 MGMT"}]
      },
      "DependsOn": [ "sgWideOpen" ]
    },

    "FWPublicNetworkInterface": {
      "Type": "AWS::EC2::NetworkInterface",
      "Properties": {
        "Description": "AWS FW1 E1/1",
        "SubnetId": {"Ref": "NewPublicSubnet"},
        "SourceDestCheck": "false",
        "PrivateIpAddresses": [
          {
            "PrivateIpAddress": "10.0.0.100",
            "Primary": "true"
          }
        ],
        "GroupSet": [{"Ref": "sgWideOpen"}],
        "Tags": [{"Key": "Name","Value": "WP AWS FW1 E1/1"}]
      },
      "DependsOn": [ "sgWideOpen" ]
    },

    "FWPrivate12NetworkInterface": {
      "Type": "AWS::EC2::NetworkInterface",
      "Properties": {
        "Description": "AWS FW1 E1/2",
        "SubnetId": {"Ref": "NewWebSubnet"},
        "SourceDestCheck": "false",
        "PrivateIpAddresses": [
          {
            "PrivateIpAddress": "10.0.1.11",
            "Primary": "true"
          }
        ],
        "GroupSet": [{"Ref": "sgWideOpen"}],
        "Tags": [{"Key": "Name","Value": "WP AWS FW1 E1/2"}]
      },
      "DependsOn": [ "sgWideOpen" ]
    },

    "FWPrivate13NetworkInterface": {
      "Type": "AWS::EC2::NetworkInterface",
      "Properties": {
        "Description": "AWS FW1 E1/3",
        "SubnetId": {"Ref": "NewDBSubnet"},
        "SourceDestCheck": "false",
        "PrivateIpAddresses": [
          {
            "PrivateIpAddress": "10.0.2.11",
            "Primary": "true"
          }
        ],
        "GroupSet": [{"Ref": "sgWideOpen"}],
        "Tags": [{"Key": "Name", "Value": "WP AWS FW1 E1/3"}]
      },
      "DependsOn": [ "sgWideOpen" ]
    },

    "FWEIPMAnagementAssociation": {
       "Type": "AWS::EC2::EIPAssociation",
       "Properties": {
          "AllocationId": { "Fn::GetAtt": [ "ManagementElasticIP", "AllocationId" ] },
          "NetworkInterfaceId": { "Ref": "FWManagementNetworkInterface" }
       },
       "DependsOn": [ "FWManagementNetworkInterface", "ManagementElasticIP" ]
    },

    "FWEIPPublicAssociation": {
       "Type": "AWS::EC2::EIPAssociation",
       "Properties": {
          "AllocationId": { "Fn::GetAtt": [ "PublicElasticIP", "AllocationId" ] },
          "NetworkInterfaceId": { "Ref": "FWPublicNetworkInterface" }
       },
       "DependsOn": [ "FWPublicNetworkInterface", "PublicElasticIP" ]
    },

    "sgWideOpen": {
      "Type": "AWS::EC2::SecurityGroup",
      "Properties": {
        "GroupDescription": "Wide open security group",
        "VpcId": {"Ref": "NewVPC"},
         "Tags": [{"Key": "Name","Value": "Lab External SG"}],
        "SecurityGroupIngress" : [
          {
            "IpProtocol": "-1",
            "CidrIp": "0.0.0.0/0"
          }
        ],
        "SecurityGroupEgress" : [
          {
            "IpProtocol": "-1",
            "CidrIp": "0.0.0.0/0"
          }
          ]
      }
    },

    "acl1": {
      "Type": "AWS::EC2::NetworkAclEntry",
      "Properties": {
        "CidrBlock": "0.0.0.0/0",
        "Egress": "true",
        "Protocol": "-1",
        "RuleAction": "allow",
        "RuleNumber": "100",
        "NetworkAclId": {
          "Ref": "aclb765d6d2"
        }
      }
    },

    "acl2": {
      "Type": "AWS::EC2::NetworkAclEntry",
      "Properties": {
        "CidrBlock": "0.0.0.0/0",
        "Protocol": "-1",
        "RuleAction": "allow",
        "RuleNumber": "100",
        "NetworkAclId": {
          "Ref": "aclb765d6d2"
        }
      }
    },

    "subnetacl1": {
      "Type": "AWS::EC2::SubnetNetworkAclAssociation",
      "Properties": {
        "NetworkAclId": {"Ref": "aclb765d6d2"},
        "SubnetId": {"Ref": "NewDBSubnet"}
      }
    },
    "subnetacl2": {
      "Type": "AWS::EC2::SubnetNetworkAclAssociation",
      "Properties": {
        "NetworkAclId": {"Ref": "aclb765d6d2"},
        "SubnetId": {"Ref": "NewPublicSubnet"}
      }
    },
    "subnetacl3": {
      "Type": "AWS::EC2::SubnetNetworkAclAssociation",
      "Properties": {
        "NetworkAclId": {"Ref": "aclb765d6d2"},
        "SubnetId": {"Ref": "NewWebSubnet"}
      }
    },

    "gw1": {
      "Type": "AWS::EC2::VPCGatewayAttachment",
      "Properties": {
        "VpcId": {"Ref": "NewVPC"},
        "InternetGatewayId": {"Ref": "igweb3def8e"}
      }
    },

    "subnetroute2": {
      "Type": "AWS::EC2::SubnetRouteTableAssociation",
      "Properties": {
        "RouteTableId": {"Ref": "rtb049a2461"},
        "SubnetId": {"Ref": "NewPublicSubnet"}
      }
    },

    "route1": {
      "Type": "AWS::EC2::Route",
      "Properties": {
        "DestinationCidrBlock": "0.0.0.0/0",
        "RouteTableId": {"Ref": "rtb059a2460"},
        "GatewayId": {"Ref": "igweb3def8e"}
      },
      "DependsOn": "gw1"
    },

    "route2": {
      "Type": "AWS::EC2::Route",
      "Properties": {
        "DestinationCidrBlock": "0.0.0.0/0",
        "RouteTableId": {"Ref": "rtb049a2461"},
        "GatewayId": {"Ref": "igweb3def8e"}
      },
      "DependsOn": "gw1"
    },

    "dchpassoc1": {
      "Type": "AWS::EC2::VPCDHCPOptionsAssociation",
      "Properties": {
        "VpcId": {"Ref": "NewVPC"},
        "DhcpOptionsId": {"Ref": "dopt21c7d043"}
      }
    },

    "FWInstance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "DisableApiTermination": "false",
        "IamInstanceProfile": {"Ref": "BootstrapInstanceProfile"},
        "InstanceInitiatedShutdownBehavior": "stop",
        "EbsOptimized": "true",
        "ImageId": { "Fn::FindInMap" : [ "PANFWRegionMap", { "Ref" : "AWS::Region" }, "AMI" ] },
        "InstanceType": "m4.xlarge",
        "BlockDeviceMappings" :
        [
            {
              "DeviceName" : "/dev/xvda",
              "Ebs" :
              {
                "VolumeType" : "gp2",
                "DeleteOnTermination" : "true",
                "VolumeSize" : "60"
              }
            }
        ],
        "KeyName":  { "Ref" : "ServerKeyName" },
        "Monitoring": "false",
        "Tags": [{ "Key": "Name", "Value": "WP VM-Series Firewall" }],
        "NetworkInterfaces": [
          {
            "NetworkInterfaceId": { "Ref": "FWManagementNetworkInterface"},
            "DeviceIndex": 0
          },
          {
            "NetworkInterfaceId": { "Ref": "FWPublicNetworkInterface"},
            "DeviceIndex": 1
          },
          {
            "NetworkInterfaceId": { "Ref": "FWPrivate12NetworkInterface"},
            "DeviceIndex": 2
          },
          {
            "NetworkInterfaceId": { "Ref": "FWPrivate13NetworkInterface"},
            "DeviceIndex": 3
          }
        ],
        "UserData":  { "Fn::Base64" : { "Fn::Join" : ["", [
            "vmseries-bootstrap-aws-s3bucket=",  { "Ref" : "BootstrapBucketName" }
        ]]}}
      },
      "DependsOn": [ "FWPublicNetworkInterface", "FWPrivate12NetworkInterface", "FWPrivate13NetworkInterface", "NewPublicSubnet" ]
    },

  "Outputs": {
    "FirewallManagementURL": {
      "Description": "VM-Series management interface URL",
      "Value": { "Fn::Join" : ["", [
        "https://",
        { "Ref": "ManagementElasticIP"}
      ]]}}
    },
    }]]
    }  
  }
}

标签: amazon-web-servicesamazon-cloudformation

解决方案


是的,你有缺失}和一些额外的,。下面是有效的 json。该模板可能还有其他问题,但您当前的错误是关于无效的 json,所以我只修复了它。对于新问题,请提出新问题。

{
    "AWSTemplateFormatVersion": "2010-09-09",

    "Description": "PANW Firewall (sample-cft).",

    "Parameters": {
        "BootstrapBucketName": {
            "Description": "Bucket name for FW bootstrap configuration",
            "Type": "String"
        },
        "ServerKeyName": {
            "Description": "Name of an existing EC2 KeyPair to enable SSH access to the FW (Hint: You MUST have its private key)",
            "Type": "AWS::EC2::KeyPair::KeyName"
        }
    },
    "Mappings": {
        "PANFWRegionMap": {
            "us-west-2": {
                "AMI": "ami-d28992ab"
            },
            "ap-northeast-1": {
                "AMI": "ami-ab04e7cd"
            },
            "us-west-1": {
                "AMI": "ami-0f88a16f"
            },
            "ap-northeast-2": {
                "AMI": "ami-6cbd6402"
            },
            "ap-southeast-1": {
                "AMI": "ami-1897057b"
            },
            "ap-southeast-2": {
                "AMI": "ami-8ed3cced"
            },
            "eu-central-1": {
                "AMI": "ami-6df35f02"
            },
            "eu-west-1": {
                "AMI": "ami-86d63eff"
            },
            "eu-west-2": {
                "AMI": "ami-3c170658"
            },
            "sa-east-1": {
                "AMI": "ami-15651279"
            },
            "us-east-1": {
                "AMI": "ami-0d7ef242edccdad95"
            },
            "us-east-2": {
                "AMI": "ami-f1200094"
            },
            "ca-central-1": {
                "AMI": "ami-0f08b76b"
            },
            "ap-south-1": {
                "AMI": "ami-1ffc8470"
            }
        }
    },
    "Resources": {
        "BootstrapRole": {
            "Type": "AWS::IAM::Role",
            "Properties": {
                "AssumeRolePolicyDocument": {
                    "Version": "2012-10-17",
                    "Statement": [{
                        "Effect": "Allow",
                        "Principal": {
                            "Service": "ec2.amazonaws.com"
                        },
                        "Action": "sts:AssumeRole"
                    }]
                },
                "Path": "/",
                "Policies": [{
                    "PolicyName": "BootstrapRolePolicy",
                    "PolicyDocument": {
                        "Version": "2012-10-17",
                        "Statement": [{
                                "Effect": "Allow",
                                "Action": "s3:ListBucket",
                                "Resource": {
                                    "Fn::Join": ["", ["arn:aws:s3:::", {
                                        "Ref": "BootstrapBucketName"
                                    }]]
                                }
                            },
                            {
                                "Effect": "Allow",
                                "Action": "s3:GetObject",
                                "Resource": {
                                    "Fn::Join": ["", ["arn:aws:s3:::", {
                                        "Ref": "BootstrapBucketName"
                                    }, "/*"]]
                                }
                            }
                        ]
                    }
                }]
            }
        },
        "BootstrapInstanceProfile": {
            "Type": "AWS::IAM::InstanceProfile",
            "Properties": {
                "Path": "/",
                "Roles": [{
                    "Ref": "BootstrapRole"
                }]
            }
        },

        "NewVPC": {
            "Type": "AWS::EC2::VPC",
            "Properties": {
                "CidrBlock": "10.0.0.0/16",
                "InstanceTenancy": "default",
                "EnableDnsSupport": "true",
                "EnableDnsHostnames": "true",
                "Tags": [{
                    "Key": "Name",
                    "Value": "PAN Sample CFT"
                }]
            }
        },

        "PublicElasticIP": {
            "Type": "AWS::EC2::EIP",
            "Properties": {
                "Domain": "vpc"
            },
            "DependsOn": ["NewVPC"]
        },

        "ManagementElasticIP": {
            "Type": "AWS::EC2::EIP",
            "Properties": {
                "Domain": "vpc"
            },
            "DependsOn": ["NewVPC"]
        },

        "NewDBSubnet": {
            "Type": "AWS::EC2::Subnet",
            "Properties": {
                "CidrBlock": "10.0.2.0/24",
                "VpcId": {
                    "Ref": "NewVPC"
                },
                "AvailabilityZone": "",
                "Tags": [{
                    "Key": "Name",
                    "Value": "PAN Sample CFT"
                }]
            },
            "DependsOn": "NewVPC"
        },

        "NewPublicSubnet": {
            "Type": "AWS::EC2::Subnet",
            "Properties": {
                "CidrBlock": "10.0.0.0/24",
                "VpcId": {
                    "Ref": "NewVPC"
                },
                "AvailabilityZone": {
                    "Fn::GetAtt": ["NewDBSubnet", "AvailabilityZone"]
                },
                "Tags": [{
                    "Key": "Name",
                    "Value": "PAN Sample CFT"
                }]
            },
            "DependsOn": ["NewVPC", "NewDBSubnet"]
        },

        "NewWebSubnet": {
            "Type": "AWS::EC2::Subnet",
            "Properties": {
                "CidrBlock": "10.0.1.0/24",
                "AvailabilityZone": {
                    "Fn::GetAtt": ["NewDBSubnet", "AvailabilityZone"]
                },
                "VpcId": {
                    "Ref": "NewVPC"
                },
                "Tags": [{
                    "Key": "Name",
                    "Value": "PAN Sample CFT"
                }]
            },
            "DependsOn": ["NewVPC", "NewDBSubnet"]
        },

        "igweb3def8e": {
            "Type": "AWS::EC2::InternetGateway",
            "Properties": {
                "Tags": [{
                    "Key": "Name",
                    "Value": "PAN Sample CFT"
                }]
            }
        },

        "dopt21c7d043": {
            "Type": "AWS::EC2::DHCPOptions",
            "Properties": {
                "DomainName": "us-west-2.compute.internal",
                "DomainNameServers": [
                    "AmazonProvidedDNS"
                ]
            }
        },

        "aclb765d6d2": {
            "Type": "AWS::EC2::NetworkAcl",
            "Properties": {
                "VpcId": {
                    "Ref": "NewVPC"
                }
            }
        },

        "rtb059a2460": {
            "Type": "AWS::EC2::RouteTable",
            "Properties": {
                "VpcId": {
                    "Ref": "NewVPC"
                }
            }
        },

        "rtb049a2461": {
            "Type": "AWS::EC2::RouteTable",
            "Properties": {
                "VpcId": {
                    "Ref": "NewVPC"
                }
            }
        },

        "FWManagementNetworkInterface": {
            "Type": "AWS::EC2::NetworkInterface",
            "Properties": {
                "Description": "AWS FW1 MGMT",
                "SubnetId": {
                    "Ref": "NewPublicSubnet"
                },
                "SourceDestCheck": "false",
                "PrivateIpAddresses": [{
                    "PrivateIpAddress": "10.0.0.99",
                    "Primary": "true"
                }],
                "GroupSet": [{
                    "Ref": "sgWideOpen"
                }],
                "Tags": [{
                    "Key": "Name",
                    "Value": "WP AWS FW1 MGMT"
                }]
            },
            "DependsOn": ["sgWideOpen"]
        },

        "FWPublicNetworkInterface": {
            "Type": "AWS::EC2::NetworkInterface",
            "Properties": {
                "Description": "AWS FW1 E1/1",
                "SubnetId": {
                    "Ref": "NewPublicSubnet"
                },
                "SourceDestCheck": "false",
                "PrivateIpAddresses": [{
                    "PrivateIpAddress": "10.0.0.100",
                    "Primary": "true"
                }],
                "GroupSet": [{
                    "Ref": "sgWideOpen"
                }],
                "Tags": [{
                    "Key": "Name",
                    "Value": "WP AWS FW1 E1/1"
                }]
            },
            "DependsOn": ["sgWideOpen"]
        },

        "FWPrivate12NetworkInterface": {
            "Type": "AWS::EC2::NetworkInterface",
            "Properties": {
                "Description": "AWS FW1 E1/2",
                "SubnetId": {
                    "Ref": "NewWebSubnet"
                },
                "SourceDestCheck": "false",
                "PrivateIpAddresses": [{
                    "PrivateIpAddress": "10.0.1.11",
                    "Primary": "true"
                }],
                "GroupSet": [{
                    "Ref": "sgWideOpen"
                }],
                "Tags": [{
                    "Key": "Name",
                    "Value": "WP AWS FW1 E1/2"
                }]
            },
            "DependsOn": ["sgWideOpen"]
        },

        "FWPrivate13NetworkInterface": {
            "Type": "AWS::EC2::NetworkInterface",
            "Properties": {
                "Description": "AWS FW1 E1/3",
                "SubnetId": {
                    "Ref": "NewDBSubnet"
                },
                "SourceDestCheck": "false",
                "PrivateIpAddresses": [{
                    "PrivateIpAddress": "10.0.2.11",
                    "Primary": "true"
                }],
                "GroupSet": [{
                    "Ref": "sgWideOpen"
                }],
                "Tags": [{
                    "Key": "Name",
                    "Value": "WP AWS FW1 E1/3"
                }]
            },
            "DependsOn": ["sgWideOpen"]
        },

        "FWEIPMAnagementAssociation": {
            "Type": "AWS::EC2::EIPAssociation",
            "Properties": {
                "AllocationId": {
                    "Fn::GetAtt": ["ManagementElasticIP", "AllocationId"]
                },
                "NetworkInterfaceId": {
                    "Ref": "FWManagementNetworkInterface"
                }
            },
            "DependsOn": ["FWManagementNetworkInterface", "ManagementElasticIP"]
        },

        "FWEIPPublicAssociation": {
            "Type": "AWS::EC2::EIPAssociation",
            "Properties": {
                "AllocationId": {
                    "Fn::GetAtt": ["PublicElasticIP", "AllocationId"]
                },
                "NetworkInterfaceId": {
                    "Ref": "FWPublicNetworkInterface"
                }
            },
            "DependsOn": ["FWPublicNetworkInterface", "PublicElasticIP"]
        },

        "sgWideOpen": {
            "Type": "AWS::EC2::SecurityGroup",
            "Properties": {
                "GroupDescription": "Wide open security group",
                "VpcId": {
                    "Ref": "NewVPC"
                },
                "Tags": [{
                    "Key": "Name",
                    "Value": "Lab External SG"
                }],
                "SecurityGroupIngress": [{
                    "IpProtocol": "-1",
                    "CidrIp": "0.0.0.0/0"
                }],
                "SecurityGroupEgress": [{
                    "IpProtocol": "-1",
                    "CidrIp": "0.0.0.0/0"
                }]
            }
        },

        "acl1": {
            "Type": "AWS::EC2::NetworkAclEntry",
            "Properties": {
                "CidrBlock": "0.0.0.0/0",
                "Egress": "true",
                "Protocol": "-1",
                "RuleAction": "allow",
                "RuleNumber": "100",
                "NetworkAclId": {
                    "Ref": "aclb765d6d2"
                }
            }
        },

        "acl2": {
            "Type": "AWS::EC2::NetworkAclEntry",
            "Properties": {
                "CidrBlock": "0.0.0.0/0",
                "Protocol": "-1",
                "RuleAction": "allow",
                "RuleNumber": "100",
                "NetworkAclId": {
                    "Ref": "aclb765d6d2"
                }
            }
        },

        "subnetacl1": {
            "Type": "AWS::EC2::SubnetNetworkAclAssociation",
            "Properties": {
                "NetworkAclId": {
                    "Ref": "aclb765d6d2"
                },
                "SubnetId": {
                    "Ref": "NewDBSubnet"
                }
            }
        },
        "subnetacl2": {
            "Type": "AWS::EC2::SubnetNetworkAclAssociation",
            "Properties": {
                "NetworkAclId": {
                    "Ref": "aclb765d6d2"
                },
                "SubnetId": {
                    "Ref": "NewPublicSubnet"
                }
            }
        },
        "subnetacl3": {
            "Type": "AWS::EC2::SubnetNetworkAclAssociation",
            "Properties": {
                "NetworkAclId": {
                    "Ref": "aclb765d6d2"
                },
                "SubnetId": {
                    "Ref": "NewWebSubnet"
                }
            }
        },

        "gw1": {
            "Type": "AWS::EC2::VPCGatewayAttachment",
            "Properties": {
                "VpcId": {
                    "Ref": "NewVPC"
                },
                "InternetGatewayId": {
                    "Ref": "igweb3def8e"
                }
            }
        },

        "subnetroute2": {
            "Type": "AWS::EC2::SubnetRouteTableAssociation",
            "Properties": {
                "RouteTableId": {
                    "Ref": "rtb049a2461"
                },
                "SubnetId": {
                    "Ref": "NewPublicSubnet"
                }
            }
        },

        "route1": {
            "Type": "AWS::EC2::Route",
            "Properties": {
                "DestinationCidrBlock": "0.0.0.0/0",
                "RouteTableId": {
                    "Ref": "rtb059a2460"
                },
                "GatewayId": {
                    "Ref": "igweb3def8e"
                }
            },
            "DependsOn": "gw1"
        },

        "route2": {
            "Type": "AWS::EC2::Route",
            "Properties": {
                "DestinationCidrBlock": "0.0.0.0/0",
                "RouteTableId": {
                    "Ref": "rtb049a2461"
                },
                "GatewayId": {
                    "Ref": "igweb3def8e"
                }
            },
            "DependsOn": "gw1"
        },

        "dchpassoc1": {
            "Type": "AWS::EC2::VPCDHCPOptionsAssociation",
            "Properties": {
                "VpcId": {
                    "Ref": "NewVPC"
                },
                "DhcpOptionsId": {
                    "Ref": "dopt21c7d043"
                }
            }
        },

        "FWInstance": {
            "Type": "AWS::EC2::Instance",
            "Properties": {
                "DisableApiTermination": "false",
                "IamInstanceProfile": {
                    "Ref": "BootstrapInstanceProfile"
                },
                "InstanceInitiatedShutdownBehavior": "stop",
                "EbsOptimized": "true",
                "ImageId": {
                    "Fn::FindInMap": ["PANFWRegionMap", {
                        "Ref": "AWS::Region"
                    }, "AMI"]
                },
                "InstanceType": "m4.xlarge",
                "BlockDeviceMappings": [{
                    "DeviceName": "/dev/xvda",
                    "Ebs": {
                        "VolumeType": "gp2",
                        "DeleteOnTermination": "true",
                        "VolumeSize": "60"
                    }
                }],
                "KeyName": {
                    "Ref": "ServerKeyName"
                },
                "Monitoring": "false",
                "Tags": [{
                    "Key": "Name",
                    "Value": "WP VM-Series Firewall"
                }],
                "NetworkInterfaces": [{
                        "NetworkInterfaceId": {
                            "Ref": "FWManagementNetworkInterface"
                        },
                        "DeviceIndex": 0
                    },
                    {
                        "NetworkInterfaceId": {
                            "Ref": "FWPublicNetworkInterface"
                        },
                        "DeviceIndex": 1
                    },
                    {
                        "NetworkInterfaceId": {
                            "Ref": "FWPrivate12NetworkInterface"
                        },
                        "DeviceIndex": 2
                    },
                    {
                        "NetworkInterfaceId": {
                            "Ref": "FWPrivate13NetworkInterface"
                        },
                        "DeviceIndex": 3
                    }
                ],
                "UserData": {
                    "Fn::Base64": {
                        "Fn::Join": ["", [
                            "vmseries-bootstrap-aws-s3bucket=", {
                                "Ref": "BootstrapBucketName"
                            }
                        ]]
                    }
                }
            },
            "DependsOn": ["FWPublicNetworkInterface", "FWPrivate12NetworkInterface", "FWPrivate13NetworkInterface", "NewPublicSubnet"]
        },

        "Outputs": {
            "FirewallManagementURL": {
                "Description": "VM-Series management interface URL",
                "Value": {
                    "Fn::Join": ["", [
                        "https://",
                        {
                            "Ref": "ManagementElasticIP"
                        }
                    ]]
                }
            }
        }
    }
}

推荐阅读