Ejemplo n.º 1
0
def attach_acl(template, vpc, subnet):
    acl = NetworkAcl("sgdemoacl", VpcId = Ref(vpc))
    template.add_resource(acl)
    acl1 = NetworkAclEntry("sgdemoacl1", NetworkAclId = Ref(acl), CidrBlock = "0.0.0.0/0", Egress = True, Protocol = "-1", RuleAction = "allow", RuleNumber = "100")
    template.add_resource(acl1)
    acl2 = NetworkAclEntry("sgdemoacl2", NetworkAclId = Ref(acl), CidrBlock = "0.0.0.0/0", Protocol = "-1", RuleAction = "allow", RuleNumber = "100")
    template.add_resource(acl2)
    aclassoc = SubnetNetworkAclAssociation("sgdemosubnetacl1", NetworkAclId = Ref(acl), SubnetId = Ref(subnet))
    template.add_resource(aclassoc)
    return acl
Ejemplo n.º 2
0
    def sg_subnet_vpc(self, t):
        from troposphere import Base64
        from troposphere import Ref, Tags, Template
        from troposphere.ec2 import PortRange, NetworkAcl, Route, \
            VPCGatewayAttachment, SubnetRouteTableAssociation, Subnet, RouteTable, \
            VPC, NetworkInterfaceProperty, NetworkAclEntry, \
            SubnetNetworkAclAssociation, EIP, Instance, InternetGateway, \
            SecurityGroupRule, SecurityGroup
        from troposphere.policies import CreationPolicy, ResourceSignal
        from troposphere.cloudformation import Init, InitFile, InitFiles, \
            InitConfig, InitService, InitServices
        ref_stack_id = Ref('AWS::StackId')
        ref_region = Ref('AWS::Region')
        ref_stack_name = Ref('AWS::StackName')

        if 'aws_vpc_id' in self.app.config['provision']:
            use_vpc = self.app.config['provision']['aws_vpc_id']
            use_subnet = self.app.config['provision']['aws_subnet_id']
            use_sg = self.app.config['provision']['aws_sg_id']
            self.app.log.info(
                'Using your AWS subnet, make sure the routes and ports are configured correctly'
            )
        else:
            VPC = t.add_resource(
                VPC('VPC',
                    CidrBlock='10.0.0.0/16',
                    Tags=Tags(Application=ref_stack_id)))
            use_vpc = Ref(VPC)
            internetGateway = t.add_resource(
                InternetGateway('InternetGateway',
                                Tags=Tags(Application=ref_stack_id)))

            gatewayAttachment = t.add_resource(
                VPCGatewayAttachment('AttachGateway',
                                     VpcId=use_vpc,
                                     InternetGatewayId=Ref(internetGateway)))

            routeTable = t.add_resource(
                RouteTable('RouteTable',
                           VpcId=use_vpc,
                           Tags=Tags(Application=ref_stack_id)))

            subnet = t.add_resource(
                Subnet('Subnet',
                       CidrBlock='10.0.0.0/24',
                       VpcId=use_vpc,
                       Tags=Tags(Application=ref_stack_id)))

            route = t.add_resource(
                Route(
                    'Route',
                    DependsOn='AttachGateway',
                    GatewayId=Ref('InternetGateway'),
                    DestinationCidrBlock='0.0.0.0/0',
                    RouteTableId=Ref(routeTable),
                ))

            subnetRouteTableAssociation = t.add_resource(
                SubnetRouteTableAssociation(
                    'SubnetRouteTableAssociation',
                    SubnetId=Ref(subnet),
                    RouteTableId=Ref(routeTable),
                ))

            networkAcl = t.add_resource(
                NetworkAcl(
                    'NetworkAcl',
                    VpcId=use_vpc,
                    Tags=Tags(Application=ref_stack_id),
                ))

            inBoundPrivateNetworkAclEntry = t.add_resource(
                NetworkAclEntry(
                    'InboundHTTPNetworkAclEntry',
                    NetworkAclId=Ref(networkAcl),
                    RuleNumber='100',
                    Protocol='6',
                    PortRange=PortRange(To='46656', From='46656'),
                    Egress='false',
                    RuleAction='allow',
                    CidrBlock='0.0.0.0/0',
                ))

            inboundSSHNetworkAclEntry = t.add_resource(
                NetworkAclEntry(
                    'InboundSSHNetworkAclEntry',
                    NetworkAclId=Ref(networkAcl),
                    RuleNumber='101',
                    Protocol='6',
                    PortRange=PortRange(To='22', From='22'),
                    Egress='false',
                    RuleAction='allow',
                    CidrBlock='0.0.0.0/0',
                ))

            inboundResponsePortsNetworkAclEntry = t.add_resource(
                NetworkAclEntry(
                    'InboundResponsePortsNetworkAclEntry',
                    NetworkAclId=Ref(networkAcl),
                    RuleNumber='102',
                    Protocol='6',
                    PortRange=PortRange(To='65535', From='1024'),
                    Egress='false',
                    RuleAction='allow',
                    CidrBlock='0.0.0.0/0',
                ))

            outBoundHTTPNetworkAclEntry = t.add_resource(
                NetworkAclEntry(
                    'OutBoundHTTPNetworkAclEntry',
                    NetworkAclId=Ref(networkAcl),
                    RuleNumber='100',
                    Protocol='6',
                    PortRange=PortRange(To='80', From='80'),
                    Egress='true',
                    RuleAction='allow',
                    CidrBlock='0.0.0.0/0',
                ))

            outBoundHTTPSNetworkAclEntry = t.add_resource(
                NetworkAclEntry(
                    'OutBoundHTTPSNetworkAclEntry',
                    NetworkAclId=Ref(networkAcl),
                    RuleNumber='101',
                    Protocol='6',
                    PortRange=PortRange(To='443', From='443'),
                    Egress='true',
                    RuleAction='allow',
                    CidrBlock='0.0.0.0/0',
                ))

            outBoundResponsePortsNetworkAclEntry = t.add_resource(
                NetworkAclEntry(
                    'OutBoundResponsePortsNetworkAclEntry',
                    NetworkAclId=Ref(networkAcl),
                    RuleNumber='102',
                    Protocol='6',
                    PortRange=PortRange(To='65535', From='1024'),
                    Egress='true',
                    RuleAction='allow',
                    CidrBlock='0.0.0.0/0',
                ))
            outBoundLoomNetworkAclEntry = t.add_resource(
                NetworkAclEntry(
                    'OutBoundLoomNetworkAclEntry',
                    NetworkAclId=Ref(networkAcl),
                    RuleNumber='103',
                    Protocol='6',
                    PortRange=PortRange(To='46656', From='46656'),
                    Egress='true',
                    RuleAction='allow',
                    CidrBlock='0.0.0.0/0',
                ))

            subnetNetworkAclAssociation = t.add_resource(
                SubnetNetworkAclAssociation(
                    'SubnetNetworkAclAssociation',
                    SubnetId=Ref(subnet),
                    NetworkAclId=Ref(networkAcl),
                ))
            use_subnet = Ref(subnet)

            instanceSecurityGroup = t.add_resource(
                SecurityGroup(
                    'InstanceSecurityGroup',
                    GroupDescription='Enable SSH access via port 22',
                    SecurityGroupIngress=[
                        SecurityGroupRule(IpProtocol='tcp',
                                          FromPort='22',
                                          ToPort='22',
                                          CidrIp='0.0.0.0/0'),
                        SecurityGroupRule(IpProtocol='tcp',
                                          FromPort='46657',
                                          ToPort='46657',
                                          CidrIp='0.0.0.0/0'),
                        SecurityGroupRule(IpProtocol='tcp',
                                          FromPort='46656',
                                          ToPort='46656',
                                          CidrIp='0.0.0.0/0')
                    ],
                    VpcId=use_vpc,
                ))
            use_sg = Ref(instanceSecurityGroup)

        return use_sg, use_subnet, use_vpc
Ejemplo n.º 3
0
# aws ec2 create-route --route-table-id $routeTableId --destination-cidr-block 0.0.0.0/0 --gateway-id $internetGatewayId

publicRoute = t.add_resource(
    Route(
        'Route',
        DependsOn='InternetGatewayAttachment',
        GatewayId=Ref(internetGateway),
        DestinationCidrBlock='0.0.0.0/0',
        RouteTableId=Ref(publicRouteTable),
    ))

publicNetworkACL = t.add_resource(
    NetworkAcl('NetworkAcl',
               VpcId=Ref(vpc),
               Tags=Tags(
                   Application=ref_stack_id,
                   Network="Public",
               )))

inboundHTTPPublicNetworkAclEntry = t.add_resource(
    NetworkAclEntry('InboundHTTPNetworkAclEntry',
                    NetworkAclId=Ref(publicNetworkACL),
                    RuleNumber=100,
                    Protocol=-1,
                    RuleAction="allow",
                    Egress=False,
                    CidrBlock="0.0.0.0/0",
                    PortRange=PortRange(From=80, To=80)))

inboundHTTPSPublicNetworkAclEntry = t.add_resource(
    NetworkAclEntry('InboundHTTPSNetworkAclEntry',
Ejemplo n.º 4
0
           CidrBlock=VPC_PUBLIC_C,
           MapPublicIpOnLaunch=True,
           Tags=Tags(Name=Join("",
                               [Ref("AWS::StackName"), " public subnet C"]), ),
           VpcId=Ref(vpc)))

t.add_resource(
    SubnetRouteTableAssociation("PublicSubnetCRouteTable",
                                RouteTableId=Ref(publicRouteTable),
                                SubnetId=Ref(subnetPublicC)))

# network ACL for private subnets
privateNetworkAcl = t.add_resource(
    NetworkAcl(
        "PrivateNetworkAcl",
        VpcId=Ref(vpc),
        Tags=Tags(Name=Join("", [Ref("AWS::StackName"), "-private-nacl"]), ),
    ))

t.add_resource(
    SubnetNetworkAclAssociation("PrivateNetworkAAclAss",
                                SubnetId=Ref(subnetPrivateA),
                                NetworkAclId=Ref(privateNetworkAcl)))

t.add_resource(
    SubnetNetworkAclAssociation("PrivateNetworkBAclAss",
                                SubnetId=Ref(subnetPrivateB),
                                NetworkAclId=Ref(privateNetworkAcl)))

t.add_resource(
    SubnetNetworkAclAssociation("PrivateNetworkCAclAss",
Ejemplo n.º 5
0
)) 
accessibility = ["Private", "Public"] 
names = ["A", "B", "C"] 
count = 0 
for a in accessibility: 
    t.add_resource(RouteTable( 
        "{}RouteTable".format(a), 
        VpcId=Ref("VPC"), 
        Tags=Tags( 
            Name=Sub("${{AWS::StackName}} {}".format(a)), 
        ) 
    )) 
    t.add_resource(NetworkAcl( 
        "{}NetworkAcl".format(a), 
        VpcId=Ref("VPC"), 
        Tags=Tags( 
            Name=Sub("${{AWS::StackName}} {}".format(a)) 
        ) 
    )) 
    for n in names: 
        t.add_resource(Subnet( 
            "{}Subnet{}".format(a, n), 
            VpcId=Ref("VPC"), 
            AvailabilityZone=Select(count % 3, GetAZs()), 
            CidrBlock=Sub("10.${{ClassB}}.{}.0/20".format(count * 16)), 
            MapPublicIpOnLaunch="true" if a == "Public" else "false", 
            Tags=Tags( 
                Name=Sub("${{AWS::StackName}} {} {}".format(a, n)), 
            ) 
        )) 
        count += 1 
Ejemplo n.º 6
0
Archivo: vpc.py Proyecto: danpilch/aws
    def __init__(self, parameters):
        super(Vpc, self).__init__()

        # Virtual Private Cloud
        self.vpc = VPC(
            "VPC",
            CidrBlock=Ref(parameters.VPCCIDR),
            EnableDnsHostnames=True,
            Tags=Tags(
                Name=Ref(AWS_STACK_NAME),
            )
        )
        
        # Public NACL
        self.GeneralPublicNACL = NetworkAcl(
            "GeneralPublicNACL",
            VpcId=Ref(self.vpc),
            Tags=Tags(
                Name=Join("-", [Ref(AWS_STACK_NAME), "public"]),
            ),
        )

        # Private NACL
        self.GeneralPrivateNACL = NetworkAcl(
            "GeneralPrivateNACL",
            VpcId=Ref(self.vpc),
            Tags=Tags(
                Name=Join("-", [Ref(AWS_STACK_NAME), "private"]),
            ),
        )

        # NACL Rules
        self.PublicNACLIngressRule100 = NetworkAclEntry(
            "PublicNACLIngressRule100",
            NetworkAclId=Ref(self.GeneralPublicNACL),
            RuleNumber="100",
            Protocol="-1",
            Egress=False,
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        )

        self.PublicNACLEgressRule100 = NetworkAclEntry(
            "PublicNACLEgressRule100",
            NetworkAclId=Ref(self.GeneralPublicNACL),
            RuleNumber="100",
            Protocol="-1",
            Egress=True,
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        )

        self.PrivateNACLEgressRule100 = NetworkAclEntry(
            "PrivateNACLEgressRule100",
            NetworkAclId=Ref(self.GeneralPrivateNACL),
            RuleNumber="100",
            Protocol="-1",
            Egress=True,
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        )
        
        self.PrivateNACLIngressRule100 = NetworkAclEntry(
            "PrivateNACLIngressRule100",
            NetworkAclId=Ref(self.GeneralPrivateNACL),
            RuleNumber="100",
            Protocol="-1",
            Egress=False,
            RuleAction="allow",
            CidrBlock=Ref(parameters.VPCCIDR),
        )

        self.PrivateNACLIngressRule220 = NetworkAclEntry(
            "PrivateNACLIngressRule220",
            NetworkAclId=Ref(self.GeneralPrivateNACL),
            RuleNumber="220",
            Protocol="-1",
            Egress=False,
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        )

        self.PrivateNACLIngressRule400 = NetworkAclEntry(
            "PrivateNACLIngressRule400",
            NetworkAclId=Ref(self.GeneralPrivateNACL),
            RuleNumber="400",
            Protocol="6",
            PortRange=PortRange(To="65535", From="1024"),
            Egress=False,
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        )

        self.PrivateNACLIngressRule420 = NetworkAclEntry(
            "PrivateNACLIngressRule420",
            NetworkAclId=Ref(self.GeneralPrivateNACL),
            RuleNumber="420",
            Protocol="1",
            Egress=False,
            RuleAction="allow",
            Icmp=ICMP(
                Code="-1",
                Type="-1"
            ),
            CidrBlock="0.0.0.0/0",
        )

        self.PrivateNACLIngressRule440 = NetworkAclEntry(
            "PrivateNACLIngressRule440",
            NetworkAclId=Ref(self.GeneralPrivateNACL),
            RuleNumber="440",
            Protocol="17",
            PortRange=PortRange(To="65535", From="1024"),
            Egress=False,
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        )

        # Shared services 
        self.GeneralPrivateSubnetA = Subnet(
            "GeneralPrivateSubnetA",
            Tags=Tags(
                Name=Join("-", [Ref(AWS_STACK_NAME), "general-private-a"]),
            ),
            VpcId=Ref(self.vpc),
            MapPublicIpOnLaunch=False,
            CidrBlock=Ref(parameters.GeneralPrivateSubnetACIDR),
            AvailabilityZone=Ref(parameters.AvailabilityZoneA),
        )

        self.GeneralPrivateSubnetB = Subnet(
            "GeneralPrivateSubnetB",
            Tags=Tags(
                Name=Join("-", [Ref(AWS_STACK_NAME), "general-private-b"]),
            ),
            VpcId=Ref(self.vpc),
            MapPublicIpOnLaunch=False,
            CidrBlock=Ref(parameters.GeneralPrivateSubnetBCIDR),
            AvailabilityZone=Ref(parameters.AvailabilityZoneB),
        )

        self.SharedServicesPublicSubnetA = Subnet(
            "SharedServicesPublicSubnetA",
            VpcId=Ref(self.vpc),
            AvailabilityZone=Ref(parameters.AvailabilityZoneA),
            CidrBlock=Ref(parameters.SharedServicesPublicSubnetACIDR),
            MapPublicIpOnLaunch=False,
            Tags=Tags(
                Name=Join("-", [Ref(AWS_STACK_NAME), "shared-public-a"]),
            )
        )
        
        self.SharedServicesPublicSubnetB = Subnet(
            "SharedServicesPublicSubnetB",
            VpcId=Ref(self.vpc),
            AvailabilityZone=Ref(parameters.AvailabilityZoneB),
            CidrBlock=Ref(parameters.SharedServicesPublicSubnetBCIDR),
            MapPublicIpOnLaunch=False,
            Tags=Tags(
                Name=Join("-", [Ref(AWS_STACK_NAME), "shared-public-b"]),
            )
        )
        
        self.SharedServicesPrivateSubnetA = Subnet(
            "SharedServicesPrivateSubnetA",
            VpcId=Ref(self.vpc),
            AvailabilityZone=Ref(parameters.AvailabilityZoneA),
            CidrBlock=Ref(parameters.SharedServicesPrivateSubnetACIDR),
            MapPublicIpOnLaunch=False,
            Tags=Tags(
                Name=Join("-", [Ref(AWS_STACK_NAME), "shared-private-a"]),
            )
        )
        
        self.SharedServicesPrivateSubnetB = Subnet(
            "SharedServicesPrivateSubnetB",
            VpcId=Ref(self.vpc),
            AvailabilityZone=Ref(parameters.AvailabilityZoneB),
            CidrBlock=Ref(parameters.SharedServicesPrivateSubnetBCIDR),
            MapPublicIpOnLaunch=False,
            Tags=Tags(
                Name=Join("-", [Ref(AWS_STACK_NAME), "shared-private-b"]),
            )
        )

        self.SharedServicesPublicNACLSubnetAAssocation = SubnetNetworkAclAssociation(
            "SharedServicesPublicNACLSubnetAAssocation",
            SubnetId=Ref(self.SharedServicesPublicSubnetA),
            NetworkAclId=Ref(self.GeneralPublicNACL),
        )

        self.SharedServicesPublicNACLSubnetBAssocation = SubnetNetworkAclAssociation(
            "SharedServicesPublicNACLSubnetBAssocation",
            SubnetId=Ref(self.SharedServicesPublicSubnetB),
            NetworkAclId=Ref(self.GeneralPublicNACL),
        )
        
        self.SharedServicesPrivateNACLSubnetAAssocation = SubnetNetworkAclAssociation(
            "SharedServicesPrivateNACLSubnetAAssocation",
            SubnetId=Ref(self.SharedServicesPrivateSubnetA),
            NetworkAclId=Ref(self.GeneralPrivateNACL),
        )

        self.SharedServicesPrivateNACLSubnetBAssocation = SubnetNetworkAclAssociation(
            "SharedServicesPrivateNACLSubnetBAssocation",
            SubnetId=Ref(self.SharedServicesPrivateSubnetB),
            NetworkAclId=Ref(self.GeneralPrivateNACL),
        )

        self.GeneralPrivateNACLSubnetAAssocation = SubnetNetworkAclAssociation(
            "GeneralPrivateNACLSubnetAAssocation",
            SubnetId=Ref(self.GeneralPrivateSubnetA),
            NetworkAclId=Ref(self.GeneralPrivateNACL),
        )
        
        self.GeneralPrivateNACLSubnetBAssocation = SubnetNetworkAclAssociation(
            "GeneralPrivateNACLSubnetBAssocation",
            SubnetId=Ref(self.GeneralPrivateSubnetB),
            NetworkAclId=Ref(self.GeneralPrivateNACL),
        )

        # Route tables
        self.PublicRouteTable = RouteTable(
            "PublicRouteTable",
            VpcId=Ref(self.vpc),
            Tags=Tags(
                Name=Join("-", [Ref(AWS_STACK_NAME), "public"]),
            ),  
        )

        self.PrivateARouteTable = RouteTable(
            "PrivateARouteTable",
            VpcId=Ref(self.vpc),
            Tags=Tags(
                Name=Join("-", [Ref(AWS_STACK_NAME), "private-a"]),
            ),
        )

        self.PrivateBRouteTable = RouteTable(
            "PrivateBRouteTable",
            VpcId=Ref(self.vpc),
            Tags=Tags(
                Name=Join("-", [Ref(AWS_STACK_NAME), "private-b"]),
            ),
        )

        # Internet Gateway
        self.InternetGateway = InternetGateway(
            "InternetGateway",
            Tags=Tags(
                Name=Join("-", [Ref(AWS_STACK_NAME)]),
            ),
        )

        self.VPNAttachment = VPCGatewayAttachment(
            "VPNAttachment",
            VpcId=Ref(self.vpc),
            InternetGatewayId=Ref(self.InternetGateway)
        )

        # NAT Gateways
        self.NATGatewayAEIP = EIP(
            "NATGatewayAEIP",
            Domain=Ref(self.vpc),
            Condition="DeployNATGateways"
        )
        
        self.NATGatewayBEIP = EIP(
            "NATGatewayBEIP",
            Domain=Ref(self.vpc),
            Condition="DeployNATGateways"
        )

        self.NATGatewayA = NatGateway(
            "NATGatewayA",
            SubnetId=Ref(self.SharedServicesPublicSubnetA),
            AllocationId=GetAtt(self.NATGatewayAEIP, "AllocationId"),
            Condition="DeployNATGateways"
        )
        
        self.NATGatewayB = NatGateway(
            "NATGatewayB",
            SubnetId=Ref(self.SharedServicesPublicSubnetB),
            AllocationId=GetAtt(self.NATGatewayBEIP, "AllocationId"),
            Condition="DeployNATGateways"
        )

        # S3 VPC enpoint connection 
        self.VPCS3Endpoint = VPCEndpoint(
            "VPCS3Endpoint",
            VpcId=Ref(self.vpc),
            ServiceName=Join("", ["com.amazonaws.", Ref(AWS_REGION), ".s3"]),
            RouteTableIds=[Ref(self.PublicRouteTable), Ref(self.PrivateARouteTable), Ref(self.PrivateBRouteTable)],
        )

        # Security Groups
        self.ICMPSecurityGroup = SecurityGroup(
            "ICMPSecurityGroup",
            SecurityGroupIngress=[{ "ToPort": "-1", "IpProtocol": "icmp", "CidrIp": "0.0.0.0/0", "FromPort": "-1" }],
            VpcId=Ref(self.vpc),
            GroupDescription="Allows servers to be reached by ICMP",
            Tags=Tags(
                Name=Join("-", [Ref(AWS_STACK_NAME), "icmp"]),
            ),
        )

        self.OpenPublicSSHSecurityGroup = SecurityGroup(
            "OpenPublicSSHSecurityGroup",
            SecurityGroupIngress=[{ "ToPort": "22", "IpProtocol": "tcp", "CidrIp": "0.0.0.0/0", "FromPort": "22" }],
            VpcId=Ref(self.vpc),
            GroupDescription="Allows instance to be publically managed over SSH from anywhere, probably a bad idea",
            Tags=Tags(
                Name=Join("-", [Ref(AWS_STACK_NAME), "open-public-ssh"]),
            ),
        )

        # Route Tables
        self.GeneralPrivateSubnetARouteTable = SubnetRouteTableAssociation(
            "GeneralPrivateSubnetARouteTable",
            SubnetId=Ref(self.GeneralPrivateSubnetA),
            RouteTableId=Ref(self.PrivateARouteTable),
        )
        
        self.GeneralPrivateSubnetBRouteTable = SubnetRouteTableAssociation(
            "GeneralPrivateSubnetBRouteTable",
            SubnetId=Ref(self.GeneralPrivateSubnetB),
            RouteTableId=Ref(self.PrivateBRouteTable),
        )
        
        self.SharedServicesPublicSubnetARouteTable = SubnetRouteTableAssociation(
            "SharedServicesPublicSubnetARouteTable",
            SubnetId=Ref(self.SharedServicesPublicSubnetA),
            RouteTableId=Ref(self.PublicRouteTable),
        )

        self.SharedServicesPublicSubnetBRouteTable = SubnetRouteTableAssociation(
            "SharedServicesPublicSubnetBRouteTable",
            SubnetId=Ref(self.SharedServicesPublicSubnetB),
            RouteTableId=Ref(self.PublicRouteTable),
        )

        self.SharedServicesPrivateSubnetARouteTable = SubnetRouteTableAssociation(
            "SharedServicesPrivateSubnetARouteTable",
            SubnetId=Ref(self.SharedServicesPrivateSubnetA),
            RouteTableId=Ref(self.PrivateARouteTable),
        )

        self.SharedServicesPrivateSubnetBRouteTable = SubnetRouteTableAssociation(
            "SharedServicesPrivateSubnetBRouteTable",
            SubnetId=Ref(self.SharedServicesPrivateSubnetB),
            RouteTableId=Ref(self.PrivateBRouteTable),
        )
        
        # Routes
        self.PublicSharedRoute = Route(
            "PublicSharedRoute",
            DestinationCidrBlock="0.0.0.0/0",
            GatewayId=Ref(self.InternetGateway),
            RouteTableId=Ref(self.PublicRouteTable),
        )
    
        self.PrivateANATRoute = Route(
            "PrivateANATRoute",
            DestinationCidrBlock="0.0.0.0/0",
            RouteTableId=Ref(self.PrivateARouteTable),
            NatGatewayId=Ref(self.NATGatewayB),
            #DependsOn=self.NATGatewayA,
            Condition="DeployNATGateways"
        )

        self.PrivateBNATRoute = Route(
            "PrivateBNATRoute",
            DestinationCidrBlock="0.0.0.0/0",
            RouteTableId=Ref(self.PrivateBRouteTable),
            NatGatewayId=Ref(self.NATGatewayB),
            #DependsOn=self.NATGatewayB,
            Condition="DeployNATGateways"
        )

        # Internal Zone standard
        self.InternalZone = HostedZone(
            "InternalZone",
            VPCs=[
                HostedZoneVPCs(
                    VPCId=Ref(self.vpc), 
                    VPCRegion=Ref("AWS::Region"),
            )],
            HostedZoneConfig=HostedZoneConfiguration(
                Comment="Internal (private) zone for name resolution"
            ),
            HostedZoneTags=Tags(
                Name=Join("-", [Ref(AWS_STACK_NAME), "internal"]),
            ),
            Name=Ref(parameters.DomainName),
        )
        
        # Internal Zone production website
        self.InternalZoneProductionWebsite = HostedZone(
            "InternalZoneProductionWebsite",
            VPCs=[
                HostedZoneVPCs(
                    VPCId=Ref(self.vpc), 
                    VPCRegion=Ref("AWS::Region"),
            )],
            HostedZoneConfig=HostedZoneConfiguration(
                Comment="Internal (private) zone for name resolution for public website"
            ),
            HostedZoneTags=Tags(
                Name=Join("-", [Ref(AWS_STACK_NAME), "internal-public-site"]),
            ),
            Name="sharpe.capital",
            Condition="CreateProductionZone"
        )

        # Custom Security Groups
        self.OpenPublicSSHSecurityGroup = SecurityGroup(
            "OpenPublicSSHSecurityGroup",
            GroupDescription="Allows server to be publically managed over SSH from anywhere",
            SecurityGroupIngress=[
                SecurityGroupRule(
                    IpProtocol="tcp", 
                    FromPort="22",
                    ToPort="22",
                    CidrIp="0.0.0.0/0"
                ),
            ],
            VpcId=Ref(self.vpc),
            Tags=Tags(
                Name=Join("-", [Ref(AWS_STACK_NAME), "open-public-ssh-access"]),
            ),
        )

        # Public Load Balancer NACL 
        self.PublicLBNACL = NetworkAcl(
            "PublicLBNACL",
            VpcId=Ref(self.vpc),
            Tags=Tags(
                Name=Ref(AWS_STACK_NAME),
            ),
        )
        
        self.PublicLBRouteTable = RouteTable(
            "PublicLBRouteTable",
            VpcId=Ref(self.vpc),
            Tags=Tags(
                Name=Ref(AWS_STACK_NAME),
            ),
        )
        
        self.LBPublicSubnetA = Subnet(
            "LBPublicSubnetA",
            VpcId=Ref(self.vpc),
            AvailabilityZone=Ref(parameters.AvailabilityZoneA),
            CidrBlock=Ref(parameters.LBSubnetACIDR),
            Tags=Tags(
                Name=Join("-", [Ref(AWS_STACK_NAME), "lb-public-a"]),
            ),
        )
        
        self.LBPublicSubnetB = Subnet(
            "LBPublicSubnetB",
            VpcId=Ref(self.vpc),
            AvailabilityZone=Ref(parameters.AvailabilityZoneB),
            CidrBlock=Ref(parameters.LBSubnetBCIDR),
            Tags=Tags(
                Name=Join("-", [Ref(AWS_STACK_NAME), "lb-public-b"]),
            ),
        )
        
        self.LBNACLIn100 = NetworkAclEntry(
            "LBNACLIn100",
            NetworkAclId=Ref(self.PublicLBNACL),
            RuleNumber=100,
            Protocol=6,
            PortRange=PortRange(To=443, From=443),
            Egress=False,
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        )

        self.LBNACLIn200 = NetworkAclEntry(
            "LBNACLIn200",
            NetworkAclId=Ref(self.PublicLBNACL),
            RuleNumber=200,
            Protocol=6,
            PortRange=PortRange(To=80, From=80),
            Egress=False,
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        )
        
        self.LBNACLIn300 = NetworkAclEntry(
            "LBNACLIn300",
            NetworkAclId=Ref(self.PublicLBNACL),
            RuleNumber=300,
            Protocol=6,
            PortRange=PortRange(To=65535, From=1024),
            Egress=False,
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        )
        
        self.LBNACLOut100 = NetworkAclEntry(
            "LBNACLOut100",
            NetworkAclId=Ref(self.PublicLBNACL),
            RuleNumber=100,
            Protocol=6,
            PortRange=PortRange(To=65535, From=1024),
            Egress=True,
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        )
        
        self.LBRouteTableAssociationA = SubnetRouteTableAssociation(
            "LBRouteTableAssociationA",
            SubnetId=Ref(self.LBPublicSubnetA),
            RouteTableId=Ref(self.PublicLBRouteTable),
        )
        
        self.LBRouteTableAssociationB = SubnetRouteTableAssociation(
            "LBRouteTableAssociationB",
            SubnetId=Ref(self.LBPublicSubnetB),
            RouteTableId=Ref(self.PublicLBRouteTable),
        )
        
        self.LBNACLAssociationB = SubnetNetworkAclAssociation(
            "LBNACLAssociationB",
            SubnetId=Ref(self.LBPublicSubnetB),
            NetworkAclId=Ref(self.PublicLBNACL),
        )
        
        self.LBNACLAssociationA = SubnetNetworkAclAssociation(
            "LBNACLAssociationA",
            SubnetId=Ref(self.LBPublicSubnetA),
            NetworkAclId=Ref(self.PublicLBNACL),
        )
        
        self.LBInternetGatewayRoute = Route(
            "LBInternetGatewayRoute",
            GatewayId=Ref(self.InternetGateway),
            DestinationCidrBlock="0.0.0.0/0",
            RouteTableId=Ref(self.PublicLBRouteTable),
        )
        
        self.LBICMPSecurityGroup = SecurityGroup(
            "LBICMPSecurityGroup",
            SecurityGroupIngress=[{ "ToPort": "-1", "IpProtocol": "icmp", "CidrIp": "0.0.0.0/0", "FromPort": "-1" }],
            VpcId=Ref(self.vpc),
            GroupDescription="Allows servers to be reached by ICMP",
            Tags=Tags(
                Name=Join("-", [Ref(AWS_STACK_NAME), "icmp"]),
            ),
        )
        
        self.LBSecurityGroup = SecurityGroup(
            "LBSecurityGroup",
            SecurityGroupIngress=[{ "ToPort": 80, "FromPort": 80, "IpProtocol": "tcp", "CidrIp": "0.0.0.0/0" }, 
                { "ToPort": 443, "FromPort": 443, "IpProtocol": "tcp", "CidrIp": "0.0.0.0/0" }],
            VpcId=Ref(self.vpc),
            GroupDescription="Securty group for public facing web load balancers",
            Tags=Tags(
                Name=Ref(AWS_STACK_NAME),
            ),
        )
        GatewayId=Ref('InternetGateway'),
        DestinationCidrBlock='0.0.0.0/0',
        RouteTableId=Ref(routeTable),
    ))

subnetRouteTableAssociation = t.add_resource(
    SubnetRouteTableAssociation(
        'SubnetRouteTableAssociation',
        SubnetId=Ref(subnet),
        RouteTableId=Ref(routeTable),
    ))

networkAcl = t.add_resource(
    NetworkAcl(
        'NetworkAcl',
        VpcId=Ref(VPC),
        Tags=Tags(
            Application=ref_stack_id),
    ))

inBoundPrivateNetworkAclEntry = t.add_resource(
    NetworkAclEntry(
        'InboundHTTPNetworkAclEntry',
        NetworkAclId=Ref(networkAcl),
        RuleNumber='100',
        Protocol='6',
        PortRange=PortRange(To='80', From='80'),
        Egress='false',
        RuleAction='allow',
        CidrBlock='0.0.0.0/0',
    ))
Ejemplo n.º 8
0
        RouteTableId=Ref(routeTable),
    )
)

subnetRouteTableAssociation = t.add_resource(
    SubnetRouteTableAssociation(
        "SubnetRouteTableAssociation",
        SubnetId=Ref(subnet),
        RouteTableId=Ref(routeTable),
    )
)

networkAcl = t.add_resource(
    NetworkAcl(
        "NetworkAcl",
        VpcId=Ref(VPCResource),
        Tags=Tags(Application=ref_stack_id),
    )
)

inBoundPrivateNetworkAclEntry = t.add_resource(
    NetworkAclEntry(
        "InboundHTTPNetworkAclEntry",
        NetworkAclId=Ref(networkAcl),
        RuleNumber="100",
        Protocol="6",
        PortRange=PortRange(To="80", From="80"),
        Egress="false",
        RuleAction="allow",
        CidrBlock="0.0.0.0/0",
    )
        EnableDnsHostnames="true",
        Tags=Tags(Name=Ref(vpcnametag))))

routetablepublic = t.add_resource(
    RouteTable("RouteTablePublic",
               VpcId=Ref(vpc),
               Tags=Tags(Name=Ref(routetablepublicname))))

routetableprivate = t.add_resource(
    RouteTable("RouteTablePrivate",
               VpcId=Ref(vpc),
               Tags=Tags(Name=Ref(routetableprivatename))))

networkaclpublic = t.add_resource(
    NetworkAcl("NetworkAclPublic",
               VpcId=Ref(vpc),
               Tags=Tags(Name=Ref(networkaclpublicname))))

networkaclprivate = t.add_resource(
    NetworkAcl("NetworkAclPrivate",
               VpcId=Ref(vpc),
               Tags=Tags(Name=Ref(networkaclprivatename))))

internetgateway = t.add_resource(
    InternetGateway("InternetGateway",
                    Tags=Tags(Name=Ref(internetgatewayname))))

vpcigattach = t.add_resource(
    VPCGatewayAttachment("VPCtoIG",
                         InternetGatewayId=Ref(internetgateway),
                         VpcId=Ref(vpc)))
Ejemplo n.º 10
0
def create_template(key_pair, region, type_instance):
    """ Create the Cloud Formation Template """

    # Create references for the CFT
    ref_stack_id = Ref('AWS::StackId')
    ref_region = Ref('AWS::Region')
    ref_stack_name = Ref('AWS:StackName')

    # Add the template header
    t = Template()
    t.add_version('2010-09-09')
    t.add_description(PROJECT + ": " +\
        'AWS Cloud Formation Template for creating a custom VPC with '\
        'public subnet to host a simple web server on a single EC2 instance '\
        'with a security group that allows public HTTP and SSH traffic.')

    # Add the VPC
    vpc = t.add_resource(
        VPC('VPC',
            CidrBlock=VPC_CIDR,
            Tags=Tags(Application=ref_stack_id,
                      Name=NAME_PREFIX + 'vpc',
                      Project=PROJECT)))

    # Add a public Subnet for our web server
    public_subnet = t.add_resource(
        Subnet('Subnet',
               CidrBlock=SUBNET_CIDR,
               VpcId=Ref(vpc),
               Tags=Tags(Application=ref_stack_id,
                         Name=NAME_PREFIX + 'public-subnet',
                         Project=PROJECT)))

    # Add an IGW for public access
    internet_gateway = t.add_resource(
        InternetGateway('InternetGateway',
                        Tags=Tags(Application=ref_stack_id,
                                  Name=NAME_PREFIX + 'igw',
                                  Project=PROJECT)))

    # Attach our IGW to our VPC
    gateway_attachment = t.add_resource(
        VPCGatewayAttachment('AttachGateway',
                             VpcId=Ref(vpc),
                             InternetGatewayId=Ref(internet_gateway)))

    # Add a custom Route Table for public access
    route_table = t.add_resource(
        RouteTable('RouteTable',
                   VpcId=Ref(vpc),
                   Tags=Tags(Application=ref_stack_id,
                             Name=NAME_PREFIX + 'publicroutetable',
                             Project=PROJECT)))

    # Add a public Route to our Route Table through our IGW
    public_route = t.add_resource(
        Route('Route',
              DependsOn='AttachGateway',
              GatewayId=Ref(internet_gateway),
              DestinationCidrBlock='0.0.0.0/0',
              RouteTableId=Ref(route_table)))

    # Associate our public Subnet with our public Route Table
    subnet_route_table_assoc = t.add_resource(
        SubnetRouteTableAssociation('SubnetRouteTableAssociation',
                                    SubnetId=Ref(public_subnet),
                                    RouteTableId=Ref(route_table)))

    # Add a new Network ACL for our public Subnet
    network_acl = t.add_resource(
        NetworkAcl('NetworkAcl',
                   VpcId=Ref(vpc),
                   Tags=Tags(Application=ref_stack_id,
                             Name=NAME_PREFIX + 'networkacl',
                             Project=PROJECT)))

    # Inbound ACL Rule for HTTP
    inboundHttpAclEntry = t.add_resource(
        NetworkAclEntry('InboundHTTPNetworkAclEntry',
                        NetworkAclId=Ref(network_acl),
                        RuleNumber='100',
                        Protocol=6,
                        PortRange=PortRange(To='80', From='80'),
                        Egress='false',
                        RuleAction='allow',
                        CidrBlock='0.0.0.0/0'))

    # Inbound ACL Rule for HTTPS
    inboundHttpsAclEntry = t.add_resource(
        NetworkAclEntry('InboundHTTPSNetworkAclEntry',
                        NetworkAclId=Ref(network_acl),
                        RuleNumber='200',
                        Protocol=6,
                        PortRange=PortRange(To='443', From='443'),
                        Egress='false',
                        RuleAction='allow',
                        CidrBlock='0.0.0.0/0'))

    # Inbound ACL Rule for SSH
    inboundSshAclEntry = t.add_resource(
        NetworkAclEntry('InboundSSHNetworkAclEntry',
                        NetworkAclId=Ref(network_acl),
                        RuleNumber='300',
                        Protocol=6,
                        PortRange=PortRange(To='22', From='22'),
                        Egress='false',
                        RuleAction='allow',
                        CidrBlock='0.0.0.0/0'))

    # Inbound ACL Rule for Ephemeral Response Ports
    inboundResponsePortsAclEntry = t.add_resource(
        NetworkAclEntry('InboundResponsePortsNetworkAclEntry',
                        NetworkAclId=Ref(network_acl),
                        RuleNumber='400',
                        Protocol=6,
                        PortRange=PortRange(To='65535', From='1024'),
                        Egress='false',
                        RuleAction='allow',
                        CidrBlock='0.0.0.0/0'))

    # Outbound ACL Rule for HTTP
    outboundHttpAclEntry = t.add_resource(
        NetworkAclEntry('OutboundHTTPNetworkAclEntry',
                        NetworkAclId=Ref(network_acl),
                        RuleNumber='100',
                        Protocol=6,
                        PortRange=PortRange(To='80', From='80'),
                        Egress='true',
                        RuleAction='allow',
                        CidrBlock='0.0.0.0/0'))

    # Outbound ACL Rule for HTTPS
    outboundHttpsAclEntry = t.add_resource(
        NetworkAclEntry('OutboundHTTPSNetworkAclEntry',
                        NetworkAclId=Ref(network_acl),
                        RuleNumber='200',
                        Protocol=6,
                        PortRange=PortRange(To='443', From='443'),
                        Egress='true',
                        RuleAction='allow',
                        CidrBlock='0.0.0.0/0'))

    # Outbound ACL Rule for SSH
    outboundSshAclEntry = t.add_resource(
        NetworkAclEntry('OutboundSSHNetworkAclEntry',
                        NetworkAclId=Ref(network_acl),
                        RuleNumber='300',
                        Protocol=6,
                        PortRange=PortRange(To='22', From='22'),
                        Egress='true',
                        RuleAction='allow',
                        CidrBlock='0.0.0.0/0'))

    # Outbound ACL Rule for Ephemeral Response Ports
    outboundResponsePortsAclEntry = t.add_resource(
        NetworkAclEntry('OutboundResponsePortsNetworkAclEntry',
                        NetworkAclId=Ref(network_acl),
                        RuleNumber='400',
                        Protocol=6,
                        PortRange=PortRange(To='65535', From='1024'),
                        Egress='true',
                        RuleAction='allow',
                        CidrBlock='0.0.0.0/0'))

    # Associate our public Subnet with our new Network ACL
    subnet_network_acl_assoc = t.add_resource(
        SubnetNetworkAclAssociation('SubnetNetworkAclAssociation',
                                    SubnetId=Ref(public_subnet),
                                    NetworkAclId=Ref(network_acl)))

    # Add a Security Group for our Web Server
    webserver_security_group = t.add_resource(
        SecurityGroup('SecurityGroup',
                      GroupDescription='Web Server SG',
                      SecurityGroupIngress=[
                          SecurityGroupRule(IpProtocol='tcp',
                                            ToPort='80',
                                            FromPort='80',
                                            CidrIp='0.0.0.0/0'),
                          SecurityGroupRule(IpProtocol='tcp',
                                            ToPort='22',
                                            FromPort='22',
                                            CidrIp='0.0.0.0/0')
                      ],
                      VpcId=Ref(vpc)))

    # Add the Web Server Instance
    instance = t.add_resource(
        Instance(
            'WebServerInstance',
            ImageId=supported_regions_ami_map[region],
            InstanceType=type_instance,
            KeyName=key_pair,
            NetworkInterfaces=
            [
                NetworkInterfaceProperty(
                    GroupSet=[Ref(webserver_security_group)],
                    AssociatePublicIpAddress='true',
                    DeviceIndex='0',
                    DeleteOnTermination='true',
                    SubnetId=Ref(public_subnet))
            ],
            UserData=Base64(
                Join(
                    '\n',
                    [
                        '#!/bin/bash -x',
                        'yum install httpd -y',
                        'yum update -y',
                        'echo "<html><h1>Automation for the People</h1></html>" ' \
                        '> /var/www/html/index.html',
                        'service httpd start',
                        'chkconfig httpd on'
                    ])),
            Tags=Tags(
                Application=ref_stack_id,
                Name=NAME_PREFIX+'webserver',
                Project=PROJECT)))

    # Add Outputs to the Template for the VPC ID and URL
    t.add_output([
        Output('VPC', Description='VPC ID', Value=Ref(vpc)),
        Output('URL',
               Description='Web Server URL',
               Value=Join('',
                          ['http://',
                           GetAtt('WebServerInstance', 'PublicIp')]))
    ])

    return t
Ejemplo n.º 11
0
from troposphere.sns import Topic
from troposphere import (Output, Ref)
from troposphere.ec2 import (PortRange, NetworkAcl, NetworkAclEntry)

from . import template as t, tags
from vpc import vpc

# Add resources for Network ACL and Network ACL Entries
nacl = t.add_resource(
    NetworkAcl('VpcNetworkAcl', VpcId=Ref(vpc), Tags=tags('NetworkAcl')))

t.add_resource(
    NetworkAclEntry('VpcNetworkAclInboundRulePublic443',
                    CidrBlock="0.0.0.0/0",
                    Egress=False,
                    NetworkAclId=Ref(nacl),
                    PortRange=PortRange(From="443", To="443"),
                    Protocol="6",
                    RuleAction="allow",
                    RuleNumber=20001))

t.add_resource(
    NetworkAclEntry('VpcNetworkAclInboundRulePublic80',
                    CidrBlock="0.0.0.0/0",
                    Egress=False,
                    NetworkAclId=Ref(nacl),
                    PortRange=PortRange(From="80", To="80"),
                    Protocol="6",
                    RuleAction="allow",
                    RuleNumber=20000))
Ejemplo n.º 12
0
def add_vpc_to_template(my_template, ref_stack_id):

    sshlocation_param = my_template.add_parameter(
        Parameter(
            'SSHLocation',
            Description=
            ' The IP address range that can be used to SSH to the EC2 instances',
            Type='String',
            MinLength='9',
            MaxLength='18',
            Default='0.0.0.0/0',
            AllowedPattern=
            "(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})",
            ConstraintDescription=(
                "must be a valid IP CIDR range of the form x.x.x.x/x."),
        ))

    my_vpc = my_template.add_resource(
        VPC('VPC',
            CidrBlock='10.0.0.0/16',
            Tags=Tags(Application=ref_stack_id)))

    subnet = my_template.add_resource(
        Subnet('Subnet',
               CidrBlock='10.0.0.0/24',
               VpcId=Ref(VPC),
               Tags=Tags(Application=ref_stack_id)))

    internetGateway = my_template.add_resource(
        InternetGateway('InternetGateway',
                        Tags=Tags(Application=ref_stack_id)))

    gatewayAttachment = my_template.add_resource(
        VPCGatewayAttachment('AttachGateway',
                             VpcId=Ref(VPC),
                             InternetGatewayId=Ref(internetGateway)))

    routeTable = my_template.add_resource(
        RouteTable('RouteTable',
                   VpcId=Ref(VPC),
                   Tags=Tags(Application=ref_stack_id)))

    route = my_template.add_resource(
        Route(
            'Route',
            DependsOn='AttachGateway',
            GatewayId=Ref('InternetGateway'),
            DestinationCidrBlock='0.0.0.0/0',
            RouteTableId=Ref(routeTable),
        ))

    subnetRouteTableAssociation = my_template.add_resource(
        SubnetRouteTableAssociation(
            'SubnetRouteTableAssociation',
            SubnetId=Ref(subnet),
            RouteTableId=Ref(routeTable),
        ))

    networkAcl = my_template.add_resource(
        NetworkAcl(
            'NetworkAcl',
            VpcId=Ref(VPC),
            Tags=Tags(Application=ref_stack_id),
        ))

    inboundSSHNetworkAclEntry = my_template.add_resource(
        NetworkAclEntry(
            'InboundSSHNetworkAclEntry',
            NetworkAclId=Ref(networkAcl),
            RuleNumber='101',
            Protocol='6',
            PortRange=PortRange(To='22', From='22'),
            Egress='false',
            RuleAction='allow',
            CidrBlock='0.0.0.0/0',
        ))

    subnetNetworkAclAssociation = my_template.add_resource(
        SubnetNetworkAclAssociation(
            'SubnetNetworkAclAssociation',
            SubnetId=Ref(subnet),
            NetworkAclId=Ref(networkAcl),
        ))
Ejemplo n.º 13
0
    InternetGateway(
        'InternetGateway',
        Tags=Tags(Name=Ref("AWS::StackName"),
                  Application=Ref("AWS::StackName")),
    ))

t.add_resource(
    VPCGatewayAttachment('AttachGateway',
                         VpcId=Ref(VPC),
                         InternetGatewayId=Ref(internet_gateway)))

PrivateNetworkAcl = t.add_resource(
    NetworkAcl("PrivateNetworkAcl",
               VpcId=Ref(VPC),
               Tags=Tags(
                   Name=Join("", ["Private", Ref("AWS::StackName")]),
                   Application=Ref("AWS::StackName"),
                   Network="Private",
               )))
PublicNetworkAcl = t.add_resource(
    NetworkAcl("PublicNetworkAcl",
               VpcId=Ref(VPC),
               Tags=Tags(
                   Name=Join("", ["Public", Ref("AWS::StackName")]),
                   Application=Ref("AWS::StackName"),
                   Network="Public",
               )))


def add_acl_entry(t, acl, egress, name, number, proto, port, cidr):
    if egress:
Ejemplo n.º 14
0
Client1Subnet = t.add_resource(
    Subnet(
        'Client1Subnet',
        CidrBlock='10.62.1.0/24',
        VpcId=Ref(VPC),
        Tags=Tags(
            Application=ref_stack_id,
            Name="Client1Subnet")))

Client1SubnetAssociation = t.add_resource(SubnetRouteTableAssociation
                                          ("Client1SubnetAssociation",
                                           SubnetId=Ref(Client1Subnet),
                                           RouteTableId=Ref(ClientRouteTable)))

Client1NetworkAcl = t.add_resource(NetworkAcl("Client1NetworkAcl",
                                              VpcId=Ref(VPC),
                                              ))

Client1NetworkAclAssociation = t.add_resource(SubnetNetworkAclAssociation
                                             ("Client1NetworkAclAssociation",
                                              NetworkAclId=Ref(Client1NetworkAcl),
                                              SubnetId=Ref(Client1Subnet)))

Client1NetworkAclInboundAllowSubnet = t.add_resource(NetworkAclEntry
                                                     ("Client1NetworkAclInboundAllowSubnet",
                                                      NetworkAclId=Ref(Client1NetworkAcl),
                                                      RuleNumber=100,
                                                      CidrBlock="10.62.1.0/24",
                                                      RuleAction="allow",
                                                      PortRange=PortRange(To="-1", From="-1"),
                                                      Protocol="-1",
Ejemplo n.º 15
0
    NetworkAclEntry(
        "RdsTestNaclIngress100",
        NetworkAclId=Ref("RdsTestNacl"),
        RuleNumber="100",
        Protocol="6",
        PortRange=PortRange(To="3306", From="3306"),
        Egress="false",
        RuleAction="allow",
        CidrBlock=FindInMap("SubnetMap", "TEST-PRIVATE-AZ1", "CIDR"),
    ))

RdsTestNacl = t.add_resource(
    NetworkAcl(
        "RdsTestNacl",
        VpcId=Ref(VPC),
        Tags=Tags(
            Name="RdsTest",
            project="ShelterMutual",
        ),
    ))

SubnetTestPrivateAz2Id = t.add_output(
    Output(
        "SubnetTestPrivateAz2Id",
        Description="SubnetTestPrivateAz2 ID",
        Value=Ref(SubnetTestPrivateAz2),
    ))

SubnetTestRdsAz2Id = t.add_output(
    Output(
        "SubnetTestRdsAz2Id",
        Description="SubnetTestRdsAz2 ID",
Ejemplo n.º 16
0
    def __init__(self):
        u""" Infrastructure Class Contructor """
        self.aws = AWS()
        self.ami = AMI()
        self.ref_stack_id = Ref('AWS::StackId')
        self.ami_id = self.ami.minimal_linux_ami()

        # NOTE: Troposphere doesn't have a template feature to make KeyPairs
        #       So handle this ad-hoc for now.
        self.keypair_name = 'test-deploy-keypair'
        if self.keypair_doesnt_exist():
            self.create_keypair(self.keypair_name)

        self.deployment_bucket_prefix = 'test-deploy-bucket-'
        self.deployment_bucket_name = '{}{}'.format(
            self.deployment_bucket_prefix,
            uuid.uuid4().hex[:12].lower())
        self.deployment_bucket_location = None
        if self.deploy_bucket_doesnt_exist():
            self.deployment_bucket_location = self.create_deploy_bucket(
                self.deployment_bucket_name)
        else:
            self.deployment_bucket_location = self.get_bucket_url(
                self.deployment_bucket_name)

        self.server_certificate_name = 'test-deploy-certificate'
        self.server_certificate_arn = None
        if self.server_certificate_doesnt_exist():
            self.server_certificate_arn = self.upload_server_certificate()

        self.template = Template()
        self.template.add_version('2010-09-09')
        self.template.add_description(
            'AWS Cloudformation Template for autoscaled, load balance controlled EC2 service'
        )

        self.template.add_parameter(
            Parameter('KeyName',
                      Description='Name of an existing EC2 KeyPair',
                      Default=self.keypair_name,
                      Type='String'))

        self.template.add_parameter(
            Parameter('AmiId',
                      Description='Lastest Minimal Linux AMI',
                      Default=self.ami_id,
                      Type='String'))

        self.template.add_parameter(
            Parameter('DeployBucketName',
                      Description='Name of the deployment_bucket',
                      Default=self.deployment_bucket_name,
                      Type='String'))

        self.template.add_parameter(
            Parameter('DeployBucketLocation',
                      Description='Location of the deployment_bucket',
                      Default=self.deployment_bucket_location,
                      Type='String'))

        self.template.add_parameter(
            Parameter('ServerCertificateArn',
                      Description='Certificate ARN for the Load Balancer',
                      Default=self.server_certificate_arn,
                      Type='String'))

        self.sshlocation = self.template.add_parameter(
            Parameter(
                'SSHLocation',
                Description=
                'The IP address range that can be used to SSH to the EC2 instances',
                Type='String',
                MinLength='9',
                MaxLength='18',
                Default='0.0.0.0/0',
                AllowedPattern=
                r"(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})",
                ConstraintDescription=(
                    "must be a valid IP CIDR range of the form x.x.x.x/x.")))

        self.vpc = self.template.add_resource(
            VPC('TestDeployVpc',
                CidrBlock='10.0.0.0/16',
                Tags=Tags(Application=self.ref_stack_id)))

        self.subnet = self.template.add_resource(
            Subnet('TestDeploySubnet',
                   VpcId=Ref(self.vpc),
                   CidrBlock='10.0.0.0/24',
                   Tags=Tags(Application=self.ref_stack_id)))

        self.gateway = self.template.add_resource(
            InternetGateway('TestDeployGateway',
                            Tags=Tags(Application=self.ref_stack_id)))

        self.gatewayattach = self.template.add_resource(
            VPCGatewayAttachment('AttachGateway',
                                 VpcId=Ref(self.vpc),
                                 InternetGatewayId=Ref(self.gateway)))

        self.route_table = self.template.add_resource(
            RouteTable('RouteTable',
                       VpcId=Ref(self.vpc),
                       Tags=Tags(Application=self.ref_stack_id)))

        self.route = self.template.add_resource(
            Route('Route',
                  DependsOn='AttachGateway',
                  GatewayId=Ref('TestDeployGateway'),
                  DestinationCidrBlock='0.0.0.0/0',
                  RouteTableId=Ref(self.route_table)))

        self.subnet_route_association = self.template.add_resource(
            SubnetRouteTableAssociation(
                'SubnetRouteTableAssociation',
                SubnetId=Ref(self.subnet),
                RouteTableId=Ref(self.route_table),
                DependsOn=['TestDeploySubnet', 'RouteTable']))

        self.network_acl = self.template.add_resource(
            NetworkAcl('NetworkAcl',
                       VpcId=Ref(self.vpc),
                       Tags=Tags(Application=self.ref_stack_id)))

        self.inbound_private_http = self.template.add_resource(
            NetworkAclEntry('InboundHTTP',
                            NetworkAclId=Ref(self.network_acl),
                            RuleNumber='100',
                            Protocol='6',
                            PortRange=PortRange(To='80', From='80'),
                            Egress='false',
                            RuleAction='allow',
                            CidrBlock='0.0.0.0/0'))

        self.inbound_private_http_alt = self.template.add_resource(
            NetworkAclEntry('InboundHTTPAlt',
                            NetworkAclId=Ref(self.network_acl),
                            RuleNumber='101',
                            Protocol='6',
                            PortRange=PortRange(To='8000', From='8000'),
                            Egress='false',
                            RuleAction='allow',
                            CidrBlock='0.0.0.0/0'))

        self.inbound_private_https = self.template.add_resource(
            NetworkAclEntry('InboundHTTPS',
                            NetworkAclId=Ref(self.network_acl),
                            RuleNumber='102',
                            Protocol='6',
                            PortRange=PortRange(To='443', From='443'),
                            Egress='false',
                            RuleAction='allow',
                            CidrBlock='0.0.0.0/0'))

        self.inbound_ssh = self.template.add_resource(
            NetworkAclEntry('InboundSSH',
                            NetworkAclId=Ref(self.network_acl),
                            RuleNumber='103',
                            Protocol='6',
                            PortRange=PortRange(To='22', From='22'),
                            Egress='false',
                            RuleAction='allow',
                            CidrBlock='0.0.0.0/0'))

        self.inbound_response = self.template.add_resource(
            NetworkAclEntry('InboundResponsePorts',
                            NetworkAclId=Ref(self.network_acl),
                            RuleNumber='104',
                            Protocol='6',
                            PortRange=PortRange(To='65535', From='1024'),
                            Egress='false',
                            RuleAction='allow',
                            CidrBlock='0.0.0.0/0'))

        self.outbound_http = self.template.add_resource(
            NetworkAclEntry('OutboundHTTP',
                            NetworkAclId=Ref(self.network_acl),
                            RuleNumber='100',
                            Protocol='6',
                            PortRange=PortRange(To='80', From='80'),
                            Egress='true',
                            RuleAction='allow',
                            CidrBlock='0.0.0.0/0'))

        self.outbound_https = self.template.add_resource(
            NetworkAclEntry('OutboundHTTPS',
                            NetworkAclId=Ref(self.network_acl),
                            RuleNumber='101',
                            Protocol='6',
                            PortRange=PortRange(To='443', From='443'),
                            Egress='true',
                            RuleAction='allow',
                            CidrBlock='0.0.0.0/0'))

        self.outbound_response = self.template.add_resource(
            NetworkAclEntry('OutboundResponsePorts',
                            NetworkAclId=Ref(self.network_acl),
                            RuleNumber='102',
                            Protocol='6',
                            PortRange=PortRange(To='65535', From='1024'),
                            Egress='true',
                            RuleAction='allow',
                            CidrBlock='0.0.0.0/0'))

        self.subnet_network_association = self.template.add_resource(
            SubnetNetworkAclAssociation(
                'SubnetNetworkACLAssociation',
                SubnetId=Ref(self.subnet),
                NetworkAclId=Ref(self.network_acl),
                DependsOn=['TestDeploySubnet', 'NetworkAcl']))

        self.instance_security_group = self.template.add_resource(
            SecurityGroup('InstanceSecurityGroup',
                          GroupDescription='Open all ports',
                          SecurityGroupIngress=[
                              SecurityGroupRule(IpProtocol='tcp',
                                                FromPort='22',
                                                ToPort='22',
                                                CidrIp='0.0.0.0/0'),
                              SecurityGroupRule(IpProtocol='tcp',
                                                FromPort='1024',
                                                ToPort='65535',
                                                CidrIp='0.0.0.0/0')
                          ],
                          SecurityGroupEgress=[
                              SecurityGroupRule(IpProtocol='tcp',
                                                FromPort='1',
                                                ToPort='65535',
                                                CidrIp='0.0.0.0/0')
                          ],
                          VpcId=Ref(self.vpc)))

        self.instance = self.template.add_resource(
            Instance(
                'TestDeployInstance',
                ImageId=Ref('AmiId'),
                InstanceType='t2.micro',
                KeyName=Ref('KeyName'),
                NetworkInterfaces=[
                    NetworkInterfaceProperty(
                        GroupSet=[Ref('InstanceSecurityGroup')],
                        AssociatePublicIpAddress='true',
                        DeviceIndex='0',
                        DeleteOnTermination='true',
                        SubnetId=Ref('TestDeploySubnet'))
                ],
                UserData=Base64(
                    Join('', [
                        "#!/bin/bash\n",
                        "apt-get update\n",
                        "apt-get -y install python python-pip python-setuptools\n",
                        "mkdir aws-cfn-bootstrap-latest\n",
                        "curl https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz | tar xz -C aws-cfn-bootstrap-latest --strip-components 1\n",
                        "easy_install aws-cfn-bootstrap-latest\n",
                        "/usr/local/bin/cfn-init --stack ",
                        {
                            "Ref": "AWS::StackName"
                        },
                        " --resource TestDeployInstance",
                        " --region ",
                        {
                            "Ref": "AWS::Region"
                        },
                        "\n",
                        "/usr/local/bin/cfn-signal --exit-code $? '",
                        {
                            "Ref": "WaitHandle"
                        },
                        "'\n"
                        "\n",
                        "python -m SimpleHTTPServer 8000 2>&1 >/dev/null &\n",
                    ])),
                DependsOn=['InstanceSecurityGroup', 'TestDeploySubnet'],
                Tags=Tags(Application=self.ref_stack_id)))
Ejemplo n.º 17
0
def generate(env, output):
    """Cloud Platform, Viaplay \n
       Simple program that generates the cloudformation to cloud environment context. \n
       Written by Felipe Ribeiro <*****@*****.**>, April 2019 \n
       Github: https://github.com/gohackfelipe/v-play
    """

    logging.info('Initial configurations to create the cloudformation file.')

    template = Template()
    template.add_description("Service VPC")

    logging.info('Adding description on template')

    template.add_metadata({
        "DependsOn": [],
        "Environment": env,
        "StackName": '{}-{}'.format(env, 'VPC'),
    })

    logging.info('Adding metadata on template')

    internet_gateway = template.add_resource(
        InternetGateway("InternetGateway",
                        Tags=Tags(Environment=env,
                                  Name='{}-{}'.format(env,
                                                      'InternetGateway'))))

    logging.info('Adding InternetGateway on template')

    vpc = template.add_resource(
        VPC('VPC',
            CidrBlock='10.0.0.0/16',
            EnableDnsHostnames="true",
            EnableDnsSupport="true",
            InstanceTenancy="default",
            Tags=Tags(Environment=env, Name='{}-{}'.format(env,
                                                           'ServiceVPC'))))

    logging.info('Adding VPC on template')

    template.add_resource(
        VPCGatewayAttachment(
            "VpcGatewayAttachment",
            VpcId=Ref("VPC"),
            InternetGatewayId=Ref("InternetGateway"),
        ))

    logging.info('Adding VpcGatewayAttachment on template')

    network_acl = template.add_resource(
        NetworkAcl(
            'VpcNetworkAcl',
            VpcId=Ref(vpc),
            Tags=Tags(Environment=env, Name='{}-{}'.format(env, 'NetworkAcl')),
        ))

    logging.info('Creating Network ALC on template')

    template.add_resource(
        NetworkAclEntry(
            'VpcNetworkAclInboundRule',
            NetworkAclId=Ref(network_acl),
            RuleNumber=100,
            Protocol='6',
            PortRange=PortRange(To='443', From='443'),
            Egress='false',
            RuleAction='allow',
            CidrBlock='0.0.0.0/0',
        ))

    logging.info('Adding Network ALC Inbound Rule on template')

    template.add_resource(
        NetworkAclEntry(
            'VpcNetworkAclOutboundRule',
            NetworkAclId=Ref(network_acl),
            RuleNumber=200,
            Protocol='6',
            Egress='true',
            RuleAction='allow',
            CidrBlock='0.0.0.0/0',
        ))

    logging.info('Adding Network ALC Outbound Rule on template')

    # Outputs
    template.add_output([
        Output('InternetGateway', Value=Ref(internet_gateway)),
        Output('VPCID', Value=Ref(vpc))
    ])

    logging.info('Adding Output on template')

    if (not output):
        print(template.to_json())
        logging.info('Printing the cloudformation content on screen.')
    else:
        createFile(output, template.to_json())
Ejemplo n.º 18
0
vpc_gateway_attachment = VPCGatewayAttachment(
    "VpcGatewayAttachment",
    InternetGatewayId=Ref("InternetGateway"),
    VpcId=Ref("VPC"))
template.add_resource(vpc_gateway_attachment)

network_acl = NetworkAcl("VpcNetworkAcl",
                         Tags=[{
                             "Key": "Environment",
                             "Value": "Api{e}".format(e=env)
                         }, {
                             "Key": "Name",
                             "Value": "Api{e}-{e}-NetworkAcl".format(e=env)
                         }, {
                             "Key": "Owner",
                             "Value": "Foo industries"
                         }, {
                             "Key": "Service",
                             "Value": "ServiceVPC"
                         }, {
                             "Key": "VPC",
                             "Value": env
                         }],
                         VpcId=Ref("VPC"))
template.add_resource(network_acl)

network_in_acl_entry443 = NetworkAclEntry("VpcNetworkAclInboundRulePublic443",
                                          CidrBlock="0.0.0.0/0",
                                          Egress=False,
                                          NetworkAclId=Ref("VpcNetworkAcl"),
                                          PortRange=PortRange(To="443",
Ejemplo n.º 19
0
def acl_table(template, name, vpc):
    """Create an acl table in a vpc. Individual entries need to be added using acl_entry()."""
    acl = NetworkAcl(name, template=template)
    acl.Tags = Tags(Name=aws_name(acl.title))
    acl.VpcId = Ref(vpc)
    return acl
Ejemplo n.º 20
0
                        Application=Ref("AWS::StackName"),
                        Network="{0} Spot Instance VPC".format(reg),
                        Name="{0} Spot Instance VPC IGW".format(reg),
                    )))

t.add_resource(
    VPCGatewayAttachment(
        "IGWAttachment",
        VpcId=Ref("VPC"),
        InternetGatewayId=Ref("InternetGateway"),
    ))

t.add_resource(
    NetworkAcl("NetworkAcl",
               VpcId=Ref("VPC"),
               Tags=Tags(
                   Application=Ref("AWS::StackName"),
                   Network="{0} Spot Instance VPC".format(reg),
               )))

t.add_resource(
    NetworkAclEntry(
        "InboundNetworkAclEntry",
        NetworkAclId=Ref("NetworkAcl"),
        RuleNumber="100",
        Protocol="-1",
        PortRange=PortRange(To="65535", From="0"),
        Egress="false",
        RuleAction="allow",
        CidrBlock="0.0.0.0/0",
    ))
Ejemplo n.º 21
0
        "SubnetCIDR",
        ConstraintDescription=("must be a valid IP CIDR range of the form x.x.x.x/x."),
        Description="IP Address range for the VPN connected Subnet",
        Default="10.1.0.0/24",
        MinLength="9",
        AllowedPattern=r"(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})",
        MaxLength="18",
        Type="String",
    )
)

PrivateNetworkAcl = t.add_resource(
    NetworkAcl(
        "PrivateNetworkAcl",
        VpcId=Ref("VPC"),
        Tags=Tags(
            Application=Ref("AWS::StackName"),
            Network="Private",
        ),
    )
)

PrivateRoute = t.add_resource(
    Route(
        "PrivateRoute",
        GatewayId=Ref("VPNGateway"),
        DestinationCidrBlock="0.0.0.0/0",
        RouteTableId=Ref("PrivateRouteTable"),
    )
)

VPNGatewayAttachment = t.add_resource(
Ejemplo n.º 22
0
def set_cloudformation_settings(cloudformation_template, ref_stack_id):
    my_VPC = cloudformation_template.add_resource(
        VPC('VPC',
            CidrBlock='172.31.0.0/16',
            Tags=Tags(Application=ref_stack_id)))

    subnet = cloudformation_template.add_resource(
        Subnet('Subnet',
               CidrBlock='172.31.0.0/22',
               VpcId=Ref(my_VPC),
               MapPublicIpOnLaunch=True,
               Tags=Tags(Application=ref_stack_id)))

    internetGateway = cloudformation_template.add_resource(
        InternetGateway('InternetGateway',
                        Tags=Tags(Application=ref_stack_id)))

    gatewayAttachment = cloudformation_template.add_resource(
        VPCGatewayAttachment('AttachGateway',
                             VpcId=Ref(my_VPC),
                             InternetGatewayId=Ref(internetGateway)))

    routeTable = cloudformation_template.add_resource(
        RouteTable('RouteTable',
                   VpcId=Ref(my_VPC),
                   Tags=Tags(Application=ref_stack_id)))

    route = cloudformation_template.add_resource(
        Route(
            'Route',
            DependsOn='AttachGateway',
            GatewayId=Ref('InternetGateway'),
            DestinationCidrBlock='0.0.0.0/0',
            RouteTableId=Ref(routeTable),
        ))

    subnetRouteTableAssociation = cloudformation_template.add_resource(
        SubnetRouteTableAssociation(
            'SubnetRouteTableAssociation',
            SubnetId=Ref(subnet),
            RouteTableId=Ref(routeTable),
        ))

    networkAcl = cloudformation_template.add_resource(
        NetworkAcl(
            'NetworkAcl',
            VpcId=Ref(my_VPC),
            Tags=Tags(Application=ref_stack_id),
        ))

    inBoundPrivateNetworkAclEntry = cloudformation_template.add_resource(
        NetworkAclEntry(
            'InboundHTTPNetworkAclEntry',
            NetworkAclId=Ref(networkAcl),
            RuleNumber='100',
            Protocol='6',
            PortRange=PortRange(To='80', From='80'),
            Egress='false',
            RuleAction='allow',
            CidrBlock='0.0.0.0/0',
        ))

    inboundSSHNetworkAclEntry = cloudformation_template.add_resource(
        NetworkAclEntry(
            'InboundSSHNetworkAclEntry',
            NetworkAclId=Ref(networkAcl),
            RuleNumber='101',
            Protocol='6',
            PortRange=PortRange(To='22', From='22'),
            Egress='false',
            RuleAction='allow',
            CidrBlock='0.0.0.0/0',
        ))

    inboundResponsePortsNetworkAclEntry = cloudformation_template.add_resource(
        NetworkAclEntry(
            'InboundResponsePortsNetworkAclEntry',
            NetworkAclId=Ref(networkAcl),
            RuleNumber='102',
            Protocol='6',
            PortRange=PortRange(To='65535', From='1024'),
            Egress='false',
            RuleAction='allow',
            CidrBlock='0.0.0.0/0',
        ))

    outBoundHTTPNetworkAclEntry = cloudformation_template.add_resource(
        NetworkAclEntry(
            'OutBoundHTTPNetworkAclEntry',
            NetworkAclId=Ref(networkAcl),
            RuleNumber='100',
            Protocol='6',
            PortRange=PortRange(To='80', From='80'),
            Egress='true',
            RuleAction='allow',
            CidrBlock='0.0.0.0/0',
        ))

    outBoundHTTPSNetworkAclEntry = cloudformation_template.add_resource(
        NetworkAclEntry(
            'OutBoundHTTPSNetworkAclEntry',
            NetworkAclId=Ref(networkAcl),
            RuleNumber='101',
            Protocol='6',
            PortRange=PortRange(To='443', From='443'),
            Egress='true',
            RuleAction='allow',
            CidrBlock='0.0.0.0/0',
        ))

    outBoundResponsePortsNetworkAclEntry = cloudformation_template.add_resource(
        NetworkAclEntry(
            'OutBoundResponsePortsNetworkAclEntry',
            NetworkAclId=Ref(networkAcl),
            RuleNumber='102',
            Protocol='6',
            PortRange=PortRange(To='65535', From='1024'),
            Egress='true',
            RuleAction='allow',
            CidrBlock='0.0.0.0/0',
        ))

    subnetNetworkAclAssociation = cloudformation_template.add_resource(
        SubnetNetworkAclAssociation(
            'SubnetNetworkAclAssociation',
            SubnetId=Ref(subnet),
            NetworkAclId=Ref(networkAcl),
        ))

    return cloudformation_template, subnet
Ejemplo n.º 23
0
def generate_template(environment):
    '''
    Generates the required template based on the given environment.
    Parameters: 
        environment: str
        The environment for which the template is to be generated.
        Ex: Experimental, Development, Production 
          
    Returns: 
        template: obj
        A Template(troposphere) object with all the requiured attributes.
    '''
    template = Template()

    template.set_description('Service VPC')

    template.set_metadata({
        "DependsOn": [],
        "Environment": environment,
        "StackName": f'{environment}-VPC'
    })

    internet_gateway = template.add_resource(
        InternetGateway("InternetGateway",
                        Tags=Tags(Environment=environment,
                                  Name=f'{environment}-InternetGateway')))

    vpc = template.add_resource(
        VPC("VPC",
            CidrBlock="10.0.0.0/16",
            EnableDnsHostnames=True,
            EnableDnsSupport=True,
            InstanceTenancy="default",
            Tags=Tags(Environment=environment,
                      Name=f'{environment}-ServiceVPC')))

    gateway_attachment = template.add_resource(
        VPCGatewayAttachment("VpcGatewayAttachment",
                             InternetGatewayId=Ref(internet_gateway),
                             VpcId=Ref(vpc)))

    network_acl = template.add_resource(
        NetworkAcl(
            "VpcNetworkAcl",
            VpcId=Ref(vpc),
            Tags=Tags(Environment=environment,
                      Name=f'{environment}-NetworkAcl'),
        ))

    network_acl_inbound_rule = template.add_resource(
        NetworkAclEntry("VpcNetworkAclInboundRule",
                        CidrBlock="0.0.0.0/0",
                        Egress=False,
                        NetworkAclId=Ref(network_acl),
                        PortRange=PortRange(To='443', From='443'),
                        Protocol=6,
                        RuleAction="allow",
                        RuleNumber=100))

    network_acl_outbound_rule = template.add_resource(
        NetworkAclEntry("VpcNetworkAclOutboundRule",
                        CidrBlock="0.0.0.0/0",
                        Egress=True,
                        NetworkAclId=Ref(network_acl),
                        Protocol=6,
                        RuleAction="allow",
                        RuleNumber=200))

    template.add_output([
        Output("InternetGateway", Value=Ref(internet_gateway)),
        Output("VPCID", Value=Ref(vpc))
    ])
    return template
Ejemplo n.º 24
0
def build(ssh_keypair_name):
    template = Template()
    template.set_version("2010-09-09")

    keyname_param = template.add_parameter(
        Parameter(
            "KeyName",
            ConstraintDescription=
            "must be the name of an existing EC2 KeyPair.",
            Description=
            "Name of an existing EC2 KeyPair to enable SSH access to \
    the instance",
            Type="AWS::EC2::KeyPair::KeyName",
            Default=ssh_keypair_name,
        ))

    sshlocation_param = template.add_parameter(
        Parameter(
            "SSHLocation",
            Description=
            " The IP address range that can be used to SSH to the EC2 \
    instances",
            Type="String",
            MinLength="9",
            MaxLength="18",
            Default="0.0.0.0/0",
            AllowedPattern=
            r"(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})",
            ConstraintDescription=(
                "must be a valid IP CIDR range of the form x.x.x.x/x."),
        ))

    vpc = template.add_resource(VPC("VPC", CidrBlock="10.0.0.0/16"))

    subnet = template.add_resource(
        Subnet(
            "Subnet",
            CidrBlock="10.0.0.0/24",
            VpcId=Ref(vpc),
        ))

    internet_gateway = template.add_resource(
        InternetGateway("InternetGateway"))
    attach_gateway = template.add_resource(
        VPCGatewayAttachment("AttachGateway",
                             VpcId=Ref(vpc),
                             InternetGatewayId=Ref(internet_gateway)))
    route_table = template.add_resource(
        RouteTable("RouteTable", VpcId=Ref(vpc)))

    template.add_resource(
        Route(
            "Route",
            DependsOn=attach_gateway,
            GatewayId=Ref(internet_gateway),
            DestinationCidrBlock="0.0.0.0/0",
            RouteTableId=Ref(route_table),
        ))

    template.add_resource(
        SubnetRouteTableAssociation(
            "SubnetRouteTableAssociation",
            SubnetId=Ref(subnet),
            RouteTableId=Ref(route_table),
        ))

    network_acl = template.add_resource(
        NetworkAcl("NetworkAcl", VpcId=Ref(vpc)))

    template.add_resource(
        NetworkAclEntry(
            "InboundSSHNetworkAclEntry",
            NetworkAclId=Ref(network_acl),
            RuleNumber="101",
            Protocol="6",
            PortRange=PortRange(To="22", From="22"),
            Egress="false",
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        ))

    template.add_resource(
        NetworkAclEntry(
            "InboundResponsePortsNetworkAclEntry",
            NetworkAclId=Ref(network_acl),
            RuleNumber="102",
            Protocol="6",
            PortRange=PortRange(To="65535", From="1024"),
            Egress="false",
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        ))

    template.add_resource(
        NetworkAclEntry(
            "OutBoundResponsePortsNetworkAclEntry",
            NetworkAclId=Ref(network_acl),
            RuleNumber="103",
            Protocol="6",
            PortRange=PortRange(To="65535", From="1024"),
            Egress="true",
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        ))

    template.add_resource(
        NetworkAclEntry(
            "OutBoundHTTPPortsNetworkAclEntry",
            NetworkAclId=Ref(network_acl),
            RuleNumber="104",
            Protocol="6",
            PortRange=PortRange(To="80", From="80"),
            Egress="true",
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        ))

    template.add_resource(
        NetworkAclEntry(
            "OutBoundHTTPSPortsNetworkAclEntry",
            NetworkAclId=Ref(network_acl),
            RuleNumber="105",
            Protocol="6",
            PortRange=PortRange(To="443", From="443"),
            Egress="true",
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        ))

    template.add_resource(
        NetworkAclEntry(
            "OutBoundSSHPortsNetworkAclEntry",
            NetworkAclId=Ref(network_acl),
            RuleNumber="106",
            Protocol="6",
            PortRange=PortRange(To="22", From="22"),
            Egress="true",
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        ))

    template.add_resource(
        SubnetNetworkAclAssociation("SubnetNetworkAclAssociation",
                                    SubnetId=Ref(subnet),
                                    NetworkAclId=Ref(network_acl)))

    emr_security_group = template.add_resource(
        SecurityGroup(
            "EMRSecurityGroup",
            GroupDescription="Enable SSH access via port 22",
            SecurityGroupIngress=[
                SecurityGroupRule(IpProtocol="tcp",
                                  FromPort="22",
                                  ToPort="22",
                                  CidrIp=Ref(sshlocation_param)),
            ],
            VpcId=Ref(vpc),
        ))

    emr_service_role = template.add_resource(
        iam.Role(
            "EMRServiceRole",
            AssumeRolePolicyDocument={
                "Statement": [{
                    "Effect": "Allow",
                    "Principal": {
                        "Service": ["elasticmapreduce.amazonaws.com"]
                    },
                    "Action": ["sts:AssumeRole"],
                }]
            },
            ManagedPolicyArns=[
                "arn:aws:iam::aws:policy/service-role/AmazonElasticMapReduceRole"
            ],
        ))

    emr_job_flow_role = template.add_resource(
        iam.Role(
            "EMRJobFlowRole",
            AssumeRolePolicyDocument={
                "Statement": [{
                    "Effect": "Allow",
                    "Principal": {
                        "Service": ["ec2.amazonaws.com"]
                    },
                    "Action": ["sts:AssumeRole"]
                }]
            },
            ManagedPolicyArns=[
                "arn:aws:iam::aws:policy/service-role/AmazonElasticMapReduceforEC2Role"
            ],
        ))

    emr_instance_profile = template.add_resource(
        iam.InstanceProfile("EMRInstanceProfile",
                            Roles=[Ref(emr_job_flow_role)]))

    cluster = template.add_resource(
        emr.Cluster(
            "EMRCluster",
            ReleaseLabel="emr-6.0.0",
            JobFlowRole=Ref(emr_instance_profile),
            ServiceRole=Ref(emr_service_role),
            Instances=emr.JobFlowInstancesConfig(
                Ec2KeyName=Ref(keyname_param),
                Ec2SubnetId=Ref(subnet),
                EmrManagedMasterSecurityGroup=Ref(emr_security_group),
                EmrManagedSlaveSecurityGroup=Ref(emr_security_group),
                MasterInstanceGroup=emr.InstanceGroupConfigProperty(
                    Name="Master Instance",
                    InstanceCount="1",
                    InstanceType=M4_LARGE,
                    Market="ON_DEMAND",
                ),
                CoreInstanceGroup=emr.InstanceGroupConfigProperty(
                    Name="Core Instance",
                    EbsConfiguration=emr.EbsConfiguration(
                        EbsBlockDeviceConfigs=[
                            emr.EbsBlockDeviceConfigs(
                                VolumeSpecification=emr.VolumeSpecification(
                                    SizeInGB="10", VolumeType="gp2"),
                                VolumesPerInstance="1",
                            )
                        ],
                        EbsOptimized="true",
                    ),
                    InstanceCount="1",
                    InstanceType=M4_LARGE,
                ),
            ),
            Applications=[emr.Application(Name="Spark")],
            VisibleToAllUsers="true",
        ))

    template.add_output(
        [Output("MasterPublicDNS", Value=GetAtt(cluster, "MasterPublicDNS"))])
    return template
Ejemplo n.º 25
0
def vpcTemplate(name, app, env, cidrBlock, publicSubnets, privateSubnets):

    template = Template()
    vpc = template.add_resource(
        VPC(
            "VPC" + name + app + env,
            CidrBlock=cidrBlock,
            EnableDnsSupport=True,
            EnableDnsHostnames=True,
            Tags=Tags(
                Env=env,
                Name=name + "-" + env,
            ),
        ))

    internetGateway = template.add_resource(
        InternetGateway(
            "InternetGateway" + name + app + env,
            Tags=Tags(
                Env=env,
                Name="igw-" + env,
            ),
        ))

    gatewayAttachment = template.add_resource(
        VPCGatewayAttachment("InternetGatewayAttachment" + name + app + env,
                             InternetGatewayId=Ref(internetGateway),
                             VpcId=Ref(vpc),
                             DependsOn="VPC" + name + app + env))

    publicRouteTable = template.add_resource(
        RouteTable(
            "PublicRouteTable",
            VpcId=Ref(vpc),
            Tags=Tags(
                Name="rt-public" + env,
                Env=env,
            ),
        ))

    internetGWRoute = template.add_resource(
        Route("RouteToIGW",
              RouteTableId=Ref(publicRouteTable),
              DestinationCidrBlock='0.0.0.0/0',
              GatewayId=Ref(internetGateway)))

    privateNetworkAcl = template.add_resource(
        NetworkAcl(
            "PrivateNetworkAcl",
            VpcId=Ref(vpc),
            Tags=Tags(Name="PrivateNetworkAcl" + env, ),
        ))
    zones = ["a", "b", "c"]

    for index, subnet in enumerate(privateSubnets):

        template.add_resource(
            Subnet("PrivateSubnet" + zones[index],
                   CidrBlock=subnet,
                   AvailabilityZone=Join("",
                                         [Ref("AWS::Region"), zones[index]]),
                   MapPublicIpOnLaunch=False,
                   Tags=Tags(Env=env, Name="Private-Subnet-" + zones[index]),
                   VpcId=Ref(vpc),
                   DependsOn="VPC" + name + app + env))

        template.add_resource(
            RouteTable("PrivateRouteTable" + zones[index],
                       VpcId=Ref(vpc),
                       Tags=Tags(
                           Name="rt-private" + env + "-" + zones[index],
                           Env=env,
                       ),
                       DependsOn="VPC" + name + app + env))

        template.add_resource(EIP("EIP" + zones[index], ))
        template.add_resource(
            NatGateway("NatGWZone" + zones[index],
                       AllocationId=GetAtt("EIP" + zones[index],
                                           'AllocationId'),
                       SubnetId=Ref("PublicSubnet" + zones[index]),
                       DependsOn="PublicSubnet" + zones[index]))
        template.add_resource(
            Route('NatRoute' + zones[index],
                  RouteTableId=Ref("PrivateRouteTable" + zones[index]),
                  DestinationCidrBlock='0.0.0.0/0',
                  NatGatewayId=Ref("NatGWZone" + zones[index]),
                  DependsOn="PrivateRouteTable" + zones[index]))

        template.add_resource(
            SubnetRouteTableAssociation(
                "PrivateSubnetRouteTable" + zones[index],
                RouteTableId=Ref("PrivateRouteTable" + zones[index]),
                SubnetId=Ref("PrivateSubnet" + zones[index]),
                DependsOn="PrivateRouteTable" + zones[index]))

        template.add_resource(
            SubnetNetworkAclAssociation("PrivateNetworkAclAss" + zones[index],
                                        SubnetId=Ref("PrivateSubnet" +
                                                     zones[index]),
                                        NetworkAclId=Ref(privateNetworkAcl),
                                        DependsOn="PrivateNetworkAcl"))
    for index, subnet in enumerate(publicSubnets):

        template.add_resource(
            Subnet("PublicSubnet" + zones[index],
                   CidrBlock=subnet,
                   AvailabilityZone=Join("",
                                         [Ref("AWS::Region"), zones[index]]),
                   MapPublicIpOnLaunch=True,
                   Tags=Tags(Env=env, Name="Public-Subnet-" + zones[index]),
                   VpcId=Ref(vpc),
                   DependsOn="VPC" + name + app + env))

        template.add_resource(
            SubnetRouteTableAssociation(
                "PublicSubnetRouteTable" + zones[index],
                RouteTableId=Ref(publicRouteTable),
                SubnetId=Ref("PublicSubnet" + zones[index]),
                DependsOn="VPC" + name + app + env))

    template.add_resource(
        NetworkAclEntry("PrivateNetworkAclEntryIngress" + env,
                        CidrBlock=cidrBlock,
                        Egress=False,
                        NetworkAclId=Ref(privateNetworkAcl),
                        Protocol=-1,
                        RuleAction="allow",
                        RuleNumber=200,
                        DependsOn="PrivateNetworkAcl"))

    template.add_resource(
        NetworkAclEntry("PrivateNetworkAclEntryEgress" + env,
                        CidrBlock=cidrBlock,
                        Egress=True,
                        NetworkAclId=Ref(privateNetworkAcl),
                        Protocol=-1,
                        RuleAction="allow",
                        RuleNumber=200,
                        DependsOn="PrivateNetworkAcl"))

    for zone in zones:
        template.add_output(
            Output(
                "PublicSubnetOutput" + zone,
                Value=Ref("PublicSubnet" + zone),
                Export=Export("PublicSubnet" + env + zone),
            ))
        template.add_output(
            Output("PrivateSubnetOutput" + zone,
                   Value=Ref("PrivateSubnet" + zone),
                   Export=Export("PrivateSubnet" + env + zone)))

    template.add_output(
        Output("VPCOutput" + env, Value=Ref(vpc), Export=Export("VPC" + env)))

    return (template.to_json())
Ejemplo n.º 26
0
def add_vpc(t):

    t.add_resource(
        VPC("VPC",
            EnableDnsSupport="true",
            CidrBlock="10.100.0.0/16",
            EnableDnsHostnames="true",
            Tags=Tags(
                Application=Ref("AWS::StackName"),
                Network=f"{vpc_name} VPC",
                Name=f"{vpc_name} VPC".format(reg),
            )))

    # Add the internet gateway
    t.add_resource(
        InternetGateway("InternetGateway",
                        Tags=Tags(
                            Application=Ref("AWS::StackName"),
                            Network=f"{vpc_name} Spot Instance VPC",
                            Name=f"{vpc_name} VPC IGW",
                        )))

    t.add_resource(
        VPCGatewayAttachment(
            "IGWAttachment",
            VpcId=Ref("VPC"),
            InternetGatewayId=Ref("InternetGateway"),
        ))

    t.add_resource(
        NetworkAcl("NetworkAcl",
                   VpcId=Ref("VPC"),
                   Tags=Tags(
                       Application=Ref("AWS::StackName"),
                       Network=f"{vpc_name} VPC",
                   )))

    t.add_resource(
        NetworkAclEntry(
            "InboundNetworkAclEntry",
            NetworkAclId=Ref("NetworkAcl"),
            RuleNumber="100",
            Protocol="-1",
            PortRange=PortRange(To="65535", From="0"),
            Egress="false",
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        ))

    t.add_resource(
        NetworkAclEntry(
            "OutboundNetworkAclEntry",
            NetworkAclId=Ref("NetworkAcl"),
            RuleNumber="100",
            Protocol="-1",
            PortRange=PortRange(To="65535", From="0"),
            Egress="true",
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        ))

    t.add_resource(
        RouteTable("RouteTable",
                   VpcId=Ref("VPC"),
                   Tags=Tags(Application=Ref("AWS::StackName"),
                             Network=f"{vpc_name} VPC",
                             Name="Public IGW Routing Table")))

    t.add_resource(
        Route(
            "IGWRoute",
            DependsOn='IGWAttachment',
            GatewayId=Ref("InternetGateway"),
            DestinationCidrBlock="0.0.0.0/0",
            RouteTableId=Ref("RouteTable"),
        ))

    #loop through usable availability zones for the aws account and create a subnet for each zone
    #in the same loop generate subnet associations for the network acl and the route table
    for i, az in list(enumerate(availableazs, start=1)):
        zone = az[-1].upper()
        t.add_resource(
            Subnet(f"PublicSubnet{zone}",
                   VpcId=Ref("VPC"),
                   CidrBlock=f"10.100.{i}.0/24",
                   AvailabilityZone=f"{az}",
                   MapPublicIpOnLaunch=True,
                   Tags=Tags(
                       Application=Ref("AWS::StackName"),
                       Network=f"{vpc_name} VPC",
                       Name=f"Public Subnet {zone}",
                   )))
        t.add_resource(
            Subnet(f"PrivateSubnet{zone}",
                   VpcId=Ref("VPC"),
                   CidrBlock=f"10.100.{i+100}.0/24",
                   AvailabilityZone=f"{az}",
                   Tags=Tags(
                       Application=Ref("AWS::StackName"),
                       Network=f"{vpc_name} VPC",
                       Name=f"Private Subnet {zone}",
                   )))
        t.add_resource(
            SubnetNetworkAclAssociation(
                f"SubnetNetworkAclAssociation{zone}",
                SubnetId=Ref(f"PublicSubnet{zone}"),
                NetworkAclId=Ref("NetworkAcl"),
            ))
        t.add_resource(
            SubnetRouteTableAssociation(
                f"SubnetRouteTableAssociation{zone}",
                SubnetId=Ref(f"PublicSubnet{zone}"),
                RouteTableId=Ref("RouteTable"),
            ))

    add_security_groups(t)
Ejemplo n.º 27
0
def build(ssh_keypair_name):
    template = Template()
    template.set_version("2010-09-09")

    keyname_param = template.add_parameter(
        Parameter(
            "KeyName",
            ConstraintDescription="must be the name of an existing EC2 KeyPair.",
            Description="Name of an existing EC2 KeyPair to enable SSH access to \
    the instance",
            Type="AWS::EC2::KeyPair::KeyName",
            Default=ssh_keypair_name,
        )
    )

    sshlocation_param = template.add_parameter(
        Parameter(
            "SSHLocation",
            Description=" The IP address range that can be used to SSH to the EC2 \
    instances",
            Type="String",
            MinLength="9",
            MaxLength="18",
            Default="0.0.0.0/0",
            AllowedPattern=r"(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})",
            ConstraintDescription=("must be a valid IP CIDR range of the form x.x.x.x/x."),
        )
    )

    instanceType_param = template.add_parameter(
        Parameter(
            "InstanceType",
            Type="String",
            Description="WebServer EC2 instance type",
            Default="t3a.small",
            AllowedValues=[
                "t2.micro",
                "t2.small",
                "t2.medium",
                "t3a.small",
                "m3.medium",
                "m3.large",
                "m3.xlarge",
                "m3.2xlarge",
                "c3.large",
                "c3.xlarge",
                "c3.2xlarge",
                "c3.4xlarge",
                "c3.8xlarge",
                "g2.2xlarge",
                "r3.large",
                "r3.xlarge",
                "r3.2xlarge",
                "r3.4xlarge",
                "r3.8xlarge",
                "i2.xlarge",
                "i2.2xlarge",
                "i2.4xlarge",
                "i2.8xlarge",
                "hi1.4xlarge",
                "hs1.8xlarge",
                "cr1.8xlarge",
                "cc2.8xlarge",
            ],
            ConstraintDescription="must be a valid EC2 instance type.",
        )
    )

    template.add_mapping(
        "AWSRegion2AMI",
        {
            "us-east-1": {"image": "ami-0d915a031cabac0e0"},
            "us-east-2": {"image": "ami-0b97435028ca44fcc"},
            "us-west-1": {"image": "ami-068d0753a46192935"},
            "us-west-2": {"image": "ami-0c457f229774da543"},
            "eu-west-1": {"image": "ami-046c6a0123bf94619"},
            "eu-west-2": {"image": "ami-0dbe8ba0cd21ea12b"},
            "eu-west-3": {"image": "ami-041bf9180061ce7ea"},
            "eu-central-1": {"image": "ami-0f8184e6f30cc0c33"},
            "eu-north-1": {"image": "ami-08dd1b893371bcaac"},
            "ap-south-1": {"image": "ami-0ff23052091536db2"},
            "ap-southeast-1": {"image": "ami-0527e82bae7c51958"},
            "ap-southeast-2": {"image": "ami-0bae8773e653a32ec"},
            "ap-northeast-1": {"image": "ami-060741a96307668be"},
            "ap-northeast-2": {"image": "ami-0d991ac4f545a6b34"},
            "sa-east-1": {"image": "ami-076f350d5a5ec448d"},
            "ca-central-1": {"image": "ami-0071deaa12b66d1bf"},
        },
    )

    vpc = template.add_resource(VPC("VPC", CidrBlock="10.0.0.0/16"))

    subnet = template.add_resource(Subnet("Subnet", CidrBlock="10.0.0.0/24", VpcId=Ref(vpc)))

    internet_gateway = template.add_resource(InternetGateway("InternetGateway"))
    attach_gateway = template.add_resource(
        VPCGatewayAttachment("AttachGateway", VpcId=Ref(vpc), InternetGatewayId=Ref(internet_gateway))
    )
    route_table = template.add_resource(RouteTable("RouteTable", VpcId=Ref(vpc)))

    template.add_resource(
        Route(
            "Route",
            DependsOn=attach_gateway,
            GatewayId=Ref(internet_gateway),
            DestinationCidrBlock="0.0.0.0/0",
            RouteTableId=Ref(route_table),
        )
    )

    template.add_resource(
        SubnetRouteTableAssociation("SubnetRouteTableAssociation", SubnetId=Ref(subnet), RouteTableId=Ref(route_table),)
    )

    network_acl = template.add_resource(NetworkAcl("NetworkAcl", VpcId=Ref(vpc),))
    template.add_resource(
        NetworkAclEntry(
            "InboundHTTPNetworkAclEntry",
            NetworkAclId=Ref(network_acl),
            RuleNumber="100",
            Protocol="6",
            PortRange=PortRange(To="80", From="80"),
            Egress="false",
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        )
    )

    template.add_resource(
        NetworkAclEntry(
            "InboundSSHNetworkAclEntry",
            NetworkAclId=Ref(network_acl),
            RuleNumber="101",
            Protocol="6",
            PortRange=PortRange(To="22", From="22"),
            Egress="false",
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        )
    )

    template.add_resource(
        NetworkAclEntry(
            "InboundResponsePortsNetworkAclEntry",
            NetworkAclId=Ref(network_acl),
            RuleNumber="102",
            Protocol="6",
            PortRange=PortRange(To="65535", From="1024"),
            Egress="false",
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        )
    )

    template.add_resource(
        NetworkAclEntry(
            "OutBoundHTTPNetworkAclEntry",
            NetworkAclId=Ref(network_acl),
            RuleNumber="100",
            Protocol="6",
            PortRange=PortRange(To="80", From="80"),
            Egress="true",
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        )
    )

    template.add_resource(
        NetworkAclEntry(
            "OutBoundHTTPSNetworkAclEntry",
            NetworkAclId=Ref(network_acl),
            RuleNumber="101",
            Protocol="6",
            PortRange=PortRange(To="443", From="443"),
            Egress="true",
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        )
    )

    template.add_resource(
        NetworkAclEntry(
            "OutBoundResponsePortsNetworkAclEntry",
            NetworkAclId=Ref(network_acl),
            RuleNumber="102",
            Protocol="6",
            PortRange=PortRange(To="65535", From="1024"),
            Egress="true",
            RuleAction="allow",
            CidrBlock="0.0.0.0/0",
        )
    )

    template.add_resource(
        SubnetNetworkAclAssociation("SubnetNetworkAclAssociation", SubnetId=Ref(subnet), NetworkAclId=Ref(network_acl),)
    )

    instance_security_group = template.add_resource(
        SecurityGroup(
            "InstanceSecurityGroup",
            GroupDescription="Enable SSH access via port 22",
            SecurityGroupIngress=[
                SecurityGroupRule(IpProtocol="tcp", FromPort="22", ToPort="22", CidrIp=Ref(sshlocation_param)),
                SecurityGroupRule(IpProtocol="tcp", FromPort="80", ToPort="80", CidrIp="0.0.0.0/0"),
            ],
            VpcId=Ref(vpc),
        )
    )

    server_instance = template.add_resource(
        Instance(
            "ServerInstance",
            ImageId=FindInMap("AWSRegion2AMI", Ref("AWS::Region"), "image"),
            InstanceType=Ref(instanceType_param),
            KeyName=Ref(keyname_param),
            NetworkInterfaces=[
                NetworkInterfaceProperty(
                    GroupSet=[Ref(instance_security_group)],
                    AssociatePublicIpAddress="true",
                    DeviceIndex="0",
                    DeleteOnTermination="true",
                    SubnetId=Ref(subnet),
                )
            ],
        )
    )

    template.add_output([Output("ServerIP", Value=GetAtt(server_instance, "PublicIp"))])
    return template
Ejemplo n.º 28
0
### Internet Gateway
internetGateway = t.add_resource(InternetGateway(
    "internetGateway",
    Tags=Tags(Name=Join("",[Ref(ClusterName), " Internet Gateway"]))
))

internetGatewayAttachment = t.add_resource(VPCGatewayAttachment(
    "internetGatewayAttachment",
    VpcId=Ref(AlchemyVPC),
    InternetGatewayId=Ref(internetGateway),
))

### ACLS

alchemyACL = t.add_resource(NetworkAcl(
    "alchemyACL",
    VpcId=Ref(AlchemyVPC)
))

aclEntry1 = t.add_resource(NetworkAclEntry(
    "aclEntry1",
    NetworkAclId=Ref(alchemyACL),
    RuleNumber="100",
    Protocol="-1",
    Egress="true",
    RuleAction="allow",
    CidrBlock="0.0.0.0/0"
))

aclEntry2 = t.add_resource(NetworkAclEntry(
    "aclEntry2",
    Protocol="-1",