mirror of
https://github.com/ZwareBear/JFrog-Cloud-Installers.git
synced 2026-01-21 14:06:57 -06:00
1641 lines
63 KiB
YAML
1641 lines
63 KiB
YAML
AWSTemplateFormatVersion: '2010-09-09'
|
|
Description: >-
|
|
This template creates a Multi-AZ, multi-subnet VPC infrastructure with managed NAT gateways in the public subnet for each Availability Zone. You can
|
|
also create additional private subnets with dedicated custom network access control lists (ACLs). If you deploy the Quick Start in a region that
|
|
doesn't support NAT gateways, NAT instances are deployed instead. **WARNING** This template creates AWS resources. You will be billed for the AWS
|
|
resources used if you create a stack from this template. (qs-1qnnspaap)
|
|
Metadata:
|
|
QuickStartDocumentation:
|
|
EntrypointName: 'Launch a New VPC'
|
|
OptionalParameters:
|
|
- PrivateSubnetATag1
|
|
- PrivateSubnetATag2
|
|
- PrivateSubnetATag3
|
|
- PrivateSubnetBTag1
|
|
- PrivateSubnetBTag2
|
|
- PrivateSubnetBTag3
|
|
- PublicSubnetTag1
|
|
- PublicSubnetTag2
|
|
- PublicSubnetTag3
|
|
AWS::CloudFormation::Interface:
|
|
ParameterGroups:
|
|
- Label:
|
|
default: Availability Zone Configuration
|
|
Parameters:
|
|
- AvailabilityZones
|
|
- NumberOfAZs
|
|
- Label:
|
|
default: Network Configuration
|
|
Parameters:
|
|
- VPCCIDR
|
|
- CreatePublicSubnets
|
|
- PublicSubnet1CIDR
|
|
- PublicSubnet2CIDR
|
|
- PublicSubnet3CIDR
|
|
- PublicSubnet4CIDR
|
|
- PublicSubnetTag1
|
|
- PublicSubnetTag2
|
|
- PublicSubnetTag3
|
|
- CreatePrivateSubnets
|
|
- CreateNATGateways
|
|
- PrivateSubnet1ACIDR
|
|
- PrivateSubnet2ACIDR
|
|
- PrivateSubnet3ACIDR
|
|
- PrivateSubnet4ACIDR
|
|
- PrivateSubnetATag1
|
|
- PrivateSubnetATag2
|
|
- PrivateSubnetATag3
|
|
- CreateAdditionalPrivateSubnets
|
|
- PrivateSubnet1BCIDR
|
|
- PrivateSubnet2BCIDR
|
|
- PrivateSubnet3BCIDR
|
|
- PrivateSubnet4BCIDR
|
|
- PrivateSubnetBTag1
|
|
- PrivateSubnetBTag2
|
|
- PrivateSubnetBTag3
|
|
- VPCTenancy
|
|
- Label:
|
|
default: VPC Flow Logs Configuration
|
|
Parameters:
|
|
- CreateVPCFlowLogsToCloudWatch
|
|
- VPCFlowLogsLogFormat
|
|
- VPCFlowLogsLogGroupRetention
|
|
- VPCFlowLogsMaxAggregationInterval
|
|
- VPCFlowLogsTrafficType
|
|
- VPCFlowLogsCloudWatchKMSKey
|
|
ParameterLabels:
|
|
AvailabilityZones:
|
|
default: Availability Zones
|
|
CreateAdditionalPrivateSubnets:
|
|
default: Create additional private subnets with dedicated network ACLs
|
|
CreateNATGateways:
|
|
default: Create NAT Gateways
|
|
CreatePrivateSubnets:
|
|
default: Create private subnets
|
|
CreatePublicSubnets:
|
|
default: Create public subnets
|
|
CreateVPCFlowLogsToCloudWatch:
|
|
default: Create VPC Flow Logs (CloudWatch)
|
|
NumberOfAZs:
|
|
default: Number of Availability Zones
|
|
PrivateSubnet1ACIDR:
|
|
default: Private subnet 1A CIDR
|
|
PrivateSubnet1BCIDR:
|
|
default: Private subnet 1B with dedicated network ACL CIDR
|
|
PrivateSubnet2ACIDR:
|
|
default: Private subnet 2A CIDR
|
|
PrivateSubnet2BCIDR:
|
|
default: Private subnet 2B with dedicated network ACL CIDR
|
|
PrivateSubnet3ACIDR:
|
|
default: Private subnet 3A CIDR
|
|
PrivateSubnet3BCIDR:
|
|
default: Private subnet 3B with dedicated network ACL CIDR
|
|
PrivateSubnet4ACIDR:
|
|
default: Private subnet 4A CIDR
|
|
PrivateSubnet4BCIDR:
|
|
default: Private subnet 4B with dedicated network ACL CIDR
|
|
PrivateSubnetATag1:
|
|
default: Tag for Private A Subnets
|
|
PrivateSubnetATag2:
|
|
default: Tag for Private A Subnets
|
|
PrivateSubnetATag3:
|
|
default: Tag for Private A Subnets
|
|
PrivateSubnetBTag1:
|
|
default: Tag for Private B Subnets
|
|
PrivateSubnetBTag2:
|
|
default: Tag for Private B Subnets
|
|
PrivateSubnetBTag3:
|
|
default: Tag for Private B Subnets
|
|
PublicSubnet1CIDR:
|
|
default: Public subnet 1 CIDR
|
|
PublicSubnet2CIDR:
|
|
default: Public subnet 2 CIDR
|
|
PublicSubnet3CIDR:
|
|
default: Public subnet 3 CIDR
|
|
PublicSubnet4CIDR:
|
|
default: Public subnet 4 CIDR
|
|
PublicSubnetTag1:
|
|
default: Tag for Public Subnets
|
|
PublicSubnetTag2:
|
|
default: Tag for Public Subnets
|
|
PublicSubnetTag3:
|
|
default: Tag for Public Subnets
|
|
VPCCIDR:
|
|
default: VPC CIDR
|
|
VPCFlowLogsCloudWatchKMSKey:
|
|
default: CloudWatch Logs KMS Key for VPC flow logs
|
|
VPCFlowLogsLogFormat:
|
|
default: VPC Flow Logs - Log Format
|
|
VPCFlowLogsLogGroupRetention:
|
|
default: VPC Flow Logs - Log Group Retention
|
|
VPCFlowLogsMaxAggregationInterval:
|
|
default: VPC Flow Logs - Max Aggregation Interval
|
|
VPCFlowLogsTrafficType:
|
|
default: VPC Flow Logs - Traffic Type
|
|
VPCTenancy:
|
|
default: VPC Tenancy
|
|
Parameters:
|
|
AvailabilityZones:
|
|
Description: 'List of Availability Zones to use for the subnets in the VPC. Note: The logical order is preserved.'
|
|
Type: List<AWS::EC2::AvailabilityZone::Name>
|
|
CreateAdditionalPrivateSubnets:
|
|
AllowedValues:
|
|
- 'true'
|
|
- 'false'
|
|
Default: 'false'
|
|
Description: >-
|
|
Set to true to create a network ACL protected subnet in each Availability Zone. If false, the CIDR parameters for those subnets will be ignored.
|
|
If true, it also requires that the 'Create private subnets' parameter is also true to have any effect.
|
|
Type: String
|
|
CreateNATGateways:
|
|
AllowedValues:
|
|
- 'true'
|
|
- 'false'
|
|
Default: 'true'
|
|
Description: Set to false when creating only private subnets. If True, both CreatePublicSubnets and CreatePrivateSubnets must also be true.
|
|
Type: String
|
|
CreatePublicSubnets:
|
|
AllowedValues:
|
|
- 'true'
|
|
- 'false'
|
|
Default: 'true'
|
|
Description:
|
|
Set to false to create only private subnets. If false, CreatePrivateSubnets must be True and the CIDR parameters for ALL public subnets will be
|
|
ignored
|
|
Type: String
|
|
CreatePrivateSubnets:
|
|
AllowedValues:
|
|
- 'true'
|
|
- 'false'
|
|
Default: 'true'
|
|
Description: Set to false to create only public subnets. If false, the CIDR parameters for ALL private subnets will be ignored.
|
|
Type: String
|
|
CreateVPCFlowLogsToCloudWatch:
|
|
AllowedValues:
|
|
- 'true'
|
|
- 'false'
|
|
Default: 'false'
|
|
Description: Set to true to create VPC flow logs for the VPC and publish them to CloudWatch. If false, VPC flow logs will not be created.
|
|
Type: String
|
|
NumberOfAZs:
|
|
AllowedValues:
|
|
- '2'
|
|
- '3'
|
|
- '4'
|
|
Default: '2'
|
|
Description: Number of Availability Zones to use in the VPC. This must match your selections in the list of Availability Zones parameter.
|
|
Type: String
|
|
PrivateSubnet1ACIDR:
|
|
AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
|
|
ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
|
|
Default: 10.0.0.0/19
|
|
Description: CIDR block for private subnet 1A located in Availability Zone 1
|
|
Type: String
|
|
PrivateSubnet1BCIDR:
|
|
AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
|
|
ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
|
|
Default: 10.0.192.0/21
|
|
Description: CIDR block for private subnet 1B with dedicated network ACL located in Availability Zone 1
|
|
Type: String
|
|
PrivateSubnet2ACIDR:
|
|
AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
|
|
ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
|
|
Default: 10.0.32.0/19
|
|
Description: CIDR block for private subnet 2A located in Availability Zone 2
|
|
Type: String
|
|
PrivateSubnet2BCIDR:
|
|
AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
|
|
ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
|
|
Default: 10.0.200.0/21
|
|
Description: CIDR block for private subnet 2B with dedicated network ACL located in Availability Zone 2
|
|
Type: String
|
|
PrivateSubnet3ACIDR:
|
|
AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
|
|
ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
|
|
Default: 10.0.64.0/19
|
|
Description: CIDR block for private subnet 3A located in Availability Zone 3
|
|
Type: String
|
|
PrivateSubnet3BCIDR:
|
|
AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
|
|
ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
|
|
Default: 10.0.208.0/21
|
|
Description: CIDR block for private subnet 3B with dedicated network ACL located in Availability Zone 3
|
|
Type: String
|
|
PrivateSubnet4ACIDR:
|
|
AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
|
|
ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
|
|
Default: 10.0.96.0/19
|
|
Description: CIDR block for private subnet 4A located in Availability Zone 4
|
|
Type: String
|
|
PrivateSubnet4BCIDR:
|
|
AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
|
|
ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
|
|
Default: 10.0.216.0/21
|
|
Description: CIDR block for private subnet 4B with dedicated network ACL located in Availability Zone 4
|
|
Type: String
|
|
PrivateSubnetATag1:
|
|
AllowedPattern: ^([a-zA-Z0-9+\-._:/@]+=[a-zA-Z0-9+\-.,_:/@ *\\"'\[\]\{\}]*)?$
|
|
ConstraintDescription:
|
|
tags must be in format "Key=Value" keys can only contain [a-zA-Z0-9+\-._:/@], values can contain [a-zA-Z0-9+\-._:/@ *\\"'\[\]\{\}]
|
|
Default: Network=Private
|
|
Description: tag to add to private subnets A, in format Key=Value (Optional)
|
|
Type: String
|
|
PrivateSubnetATag2:
|
|
AllowedPattern: ^([a-zA-Z0-9+\-._:/@]+=[a-zA-Z0-9+\-.,_:/@ *\\"'\[\]\{\}]*)?$
|
|
ConstraintDescription:
|
|
tags must be in format "Key=Value" keys can only contain [a-zA-Z0-9+\-._:/@], values can contain [a-zA-Z0-9+\-._:/@ *\\"'\[\]\{\}]
|
|
Default: ''
|
|
Description: tag to add to private subnets A, in format Key=Value (Optional)
|
|
Type: String
|
|
PrivateSubnetATag3:
|
|
AllowedPattern: ^([a-zA-Z0-9+\-._:/@]+=[a-zA-Z0-9+\-.,_:/@ *\\"'\[\]\{\}]*)?$
|
|
ConstraintDescription:
|
|
tags must be in format "Key=Value" keys can only contain [a-zA-Z0-9+\-._:/@], values can contain [a-zA-Z0-9+\-._:/@ *\\"'\[\]\{\}]
|
|
Default: ''
|
|
Description: tag to add to private subnets A, in format Key=Value (Optional)
|
|
Type: String
|
|
PrivateSubnetBTag1:
|
|
AllowedPattern: ^([a-zA-Z0-9+\-._:/@]+=[a-zA-Z0-9+\-.,_:/@ *\\"'\[\]\{\}]*)?$
|
|
ConstraintDescription:
|
|
tags must be in format "Key=Value" keys can only contain [a-zA-Z0-9+\-._:/@], values can contain [a-zA-Z0-9+\-._:/@ *\\"'\[\]\{\}]
|
|
Default: Network=Private
|
|
Description: tag to add to private subnets B, in format Key=Value (Optional)
|
|
Type: String
|
|
PrivateSubnetBTag2:
|
|
AllowedPattern: ^([a-zA-Z0-9+\-._:/@]+=[a-zA-Z0-9+\-.,_:/@ *\\"'\[\]\{\}]*)?$
|
|
ConstraintDescription:
|
|
tags must be in format "Key=Value" keys can only contain [a-zA-Z0-9+\-._:/@], values can contain [a-zA-Z0-9+\-._:/@ *\\"'\[\]\{\}]
|
|
Default: ''
|
|
Description: tag to add to private subnets B, in format Key=Value (Optional)
|
|
Type: String
|
|
PrivateSubnetBTag3:
|
|
AllowedPattern: ^([a-zA-Z0-9+\-._:/@]+=[a-zA-Z0-9+\-.,_:/@ *\\"'\[\]\{\}]*)?$
|
|
ConstraintDescription:
|
|
tags must be in format "Key=Value" keys can only contain [a-zA-Z0-9+\-._:/@], values can contain [a-zA-Z0-9+\-._:/@ *\\"'\[\]\{\}]
|
|
Default: ''
|
|
Description: tag to add to private subnets B, in format Key=Value (Optional)
|
|
Type: String
|
|
PublicSubnet1CIDR:
|
|
AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
|
|
ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
|
|
Default: 10.0.128.0/20
|
|
Description: CIDR block for the public DMZ subnet 1 located in Availability Zone 1
|
|
Type: String
|
|
PublicSubnet2CIDR:
|
|
AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
|
|
ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
|
|
Default: 10.0.144.0/20
|
|
Description: CIDR block for the public DMZ subnet 2 located in Availability Zone 2
|
|
Type: String
|
|
PublicSubnet3CIDR:
|
|
AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
|
|
ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
|
|
Default: 10.0.160.0/20
|
|
Description: CIDR block for the public DMZ subnet 3 located in Availability Zone 3
|
|
Type: String
|
|
PublicSubnet4CIDR:
|
|
AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
|
|
ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
|
|
Default: 10.0.176.0/20
|
|
Description: CIDR block for the public DMZ subnet 4 located in Availability Zone 4
|
|
Type: String
|
|
PublicSubnetTag1:
|
|
AllowedPattern: ^([a-zA-Z0-9+\-._:/@]+=[a-zA-Z0-9+\-.,_:/@ *\\"'\[\]\{\}]*)?$
|
|
ConstraintDescription:
|
|
tags must be in format "Key=Value" keys can only contain [a-zA-Z0-9+\-._:/@], values can contain [a-zA-Z0-9+\-._:/@ *\\"'\[\]\{\}]
|
|
Default: Network=Public
|
|
Description: tag to add to public subnets, in format Key=Value (Optional)
|
|
Type: String
|
|
PublicSubnetTag2:
|
|
AllowedPattern: ^([a-zA-Z0-9+\-._:/@]+=[a-zA-Z0-9+\-.,_:/@ *\\"'\[\]\{\}]*)?$
|
|
ConstraintDescription:
|
|
tags must be in format "Key=Value" keys can only contain [a-zA-Z0-9+\-._:/@], values can contain [a-zA-Z0-9+\-._:/@ *\\"'\[\]\{\}]
|
|
Default: ''
|
|
Description: tag to add to public subnets, in format Key=Value (Optional)
|
|
Type: String
|
|
PublicSubnetTag3:
|
|
AllowedPattern: ^([a-zA-Z0-9+\-._:/@]+=[a-zA-Z0-9+\-.,_:/@ *\\"'\[\]\{\}]*)?$
|
|
ConstraintDescription:
|
|
tags must be in format "Key=Value" keys can only contain [a-zA-Z0-9+\-._:/@], values can contain [a-zA-Z0-9+\-._:/@ *\\"'\[\]\{\}]
|
|
Default: ''
|
|
Description: tag to add to public subnets, in format Key=Value (Optional)
|
|
Type: String
|
|
VPCCIDR:
|
|
AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-8]))$
|
|
ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-28
|
|
Default: 10.0.0.0/16
|
|
Description: CIDR block for the VPC
|
|
Type: String
|
|
VPCFlowLogsCloudWatchKMSKey:
|
|
AllowedPattern: '^$|^arn:(aws[a-zA-Z-]*)?:kms:[a-z0-9-]+:\d{12}:key\/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$'
|
|
ConstraintDescription: 'Key ARN example: arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
|
|
Default: ''
|
|
Description:
|
|
(Optional) KMS Key ARN to use for encrypting the VPC flow logs data. If empty, encryption is enabled with CloudWatch Logs managing the
|
|
server-side encryption keys.
|
|
Type: String
|
|
VPCFlowLogsLogFormat:
|
|
AllowedPattern: '^(\$\{[a-z-]+\})$|^((\$\{[a-z-]+\} )*\$\{[a-z-]+\})$'
|
|
Default:
|
|
'${version} ${account-id} ${interface-id} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol} ${packets} ${bytes} ${start} ${end} ${action}
|
|
${log-status}'
|
|
Description:
|
|
The fields to include in the flow log record, in the order in which they should appear. Specify the fields using the ${field-id} format,
|
|
separated by spaces. Using the Default Format as the default value.
|
|
Type: String
|
|
VPCFlowLogsLogGroupRetention:
|
|
AllowedValues: [1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, 3653]
|
|
Default: 14
|
|
Description: Number of days to retain the VPC Flow Logs in CloudWatch
|
|
Type: String
|
|
VPCFlowLogsMaxAggregationInterval:
|
|
AllowedValues:
|
|
- 60
|
|
- 600
|
|
Default: 600
|
|
Description:
|
|
The maximum interval of time during which a flow of packets is captured and aggregated into a flow log record. You can specify 60 seconds (1
|
|
minute) or 600 seconds (10 minutes).
|
|
Type: String
|
|
VPCFlowLogsTrafficType:
|
|
AllowedValues:
|
|
- ACCEPT
|
|
- ALL
|
|
- REJECT
|
|
Default: REJECT
|
|
Description: The type of traffic to log. You can log traffic that the resource accepts or rejects, or all traffic.
|
|
Type: String
|
|
VPCTenancy:
|
|
AllowedValues:
|
|
- default
|
|
- dedicated
|
|
Default: default
|
|
Description: The allowed tenancy of instances launched into the VPC
|
|
Type: String
|
|
Rules:
|
|
NAT:
|
|
RuleCondition: !Equals [!Ref CreateNATGateways, 'true']
|
|
Assertions:
|
|
- Assert: !And
|
|
- !Equals [!Ref CreatePrivateSubnets, 'true']
|
|
- !Equals [!Ref CreatePublicSubnets, 'true']
|
|
AssertDescription: To enable NAT gateways you must have both CreatePrivateSubnets and CreatePublicSubnets set to 'true'
|
|
Subnets:
|
|
Assertions:
|
|
- Assert: !Or
|
|
- !Equals [!Ref CreatePrivateSubnets, 'true']
|
|
- !Equals [!Ref CreatePublicSubnets, 'true']
|
|
AssertDescription: At least one of CreatePublicSubnets or CreatePrivateSubnets must be set to 'true'
|
|
Conditions:
|
|
3AZCondition: !Or
|
|
- !Equals [!Ref 'NumberOfAZs', '3']
|
|
- !Condition '4AZCondition'
|
|
4AZCondition: !Equals [!Ref 'NumberOfAZs', '4']
|
|
AdditionalPrivateSubnetsCondition: !And
|
|
- !Equals [!Ref 'CreatePrivateSubnets', 'true']
|
|
- !Equals [!Ref 'CreateAdditionalPrivateSubnets', 'true']
|
|
AdditionalPrivateSubnets&3AZCondition: !And
|
|
- !Condition 'AdditionalPrivateSubnetsCondition'
|
|
- !Condition '3AZCondition'
|
|
AdditionalPrivateSubnets&4AZCondition: !And
|
|
- !Condition 'AdditionalPrivateSubnetsCondition'
|
|
- !Condition '4AZCondition'
|
|
AdditionalPrivateSubnets&PublicSubnets&NatGatewaysCondition: !And
|
|
- !Condition 'AdditionalPrivateSubnetsCondition'
|
|
- !Condition 'PublicSubnetsCondition'
|
|
- !Condition 'NATGatewaysCondition'
|
|
AdditionalPrivateSubnets&PublicSubnets&NatGateways&3AZCondition: !And
|
|
- !Condition 'AdditionalPrivateSubnets&3AZCondition'
|
|
- !Condition 'PublicSubnetsCondition'
|
|
- !Condition 'NATGatewaysCondition'
|
|
AdditionalPrivateSubnets&PublicSubnets&NatGateways&4AZCondition: !And
|
|
- !Condition 'AdditionalPrivateSubnets&4AZCondition'
|
|
- !Condition 'PublicSubnetsCondition'
|
|
- !Condition 'NATGatewaysCondition'
|
|
NATGatewaysCondition: !Equals [!Ref 'CreateNATGateways', 'true']
|
|
NATGateways&PublicSubnets&PrivateSubnetsCondition: !And
|
|
- !Condition 'NATGatewaysCondition'
|
|
- !Condition 'PublicSubnetsCondition'
|
|
- !Condition 'PrivateSubnetsCondition'
|
|
NATGateways&PublicSubnets&PrivateSubnets&3AZCondition: !And
|
|
- !Condition 'NATGatewaysCondition'
|
|
- !Condition 'PublicSubnetsCondition'
|
|
- !Condition 'PrivateSubnetsCondition'
|
|
- !Condition '3AZCondition'
|
|
NATGateways&PublicSubnets&PrivateSubnets&4AZCondition: !And
|
|
- !Condition 'NATGatewaysCondition'
|
|
- !Condition 'PublicSubnetsCondition'
|
|
- !Condition 'PrivateSubnetsCondition'
|
|
- !Condition '4AZCondition'
|
|
NVirginiaRegionCondition: !Equals [!Ref 'AWS::Region', us-east-1]
|
|
PrivateSubnetsCondition: !Equals [!Ref 'CreatePrivateSubnets', 'true']
|
|
PrivateSubnets&3AZCondition: !And
|
|
- !Condition 'PrivateSubnetsCondition'
|
|
- !Condition '3AZCondition'
|
|
PrivateSubnets&4AZCondition: !And
|
|
- !Condition 'PrivateSubnetsCondition'
|
|
- !Condition '4AZCondition'
|
|
PublicSubnetsCondition: !Equals [!Ref 'CreatePublicSubnets', 'true']
|
|
PublicSubnets&3AZCondition: !And
|
|
- !Condition 'PublicSubnetsCondition'
|
|
- !Condition '3AZCondition'
|
|
PublicSubnets&4AZCondition: !And
|
|
- !Condition 'PublicSubnetsCondition'
|
|
- !Condition '4AZCondition'
|
|
PrivateSubnetATag1Condition: !Not [!Equals [!Ref 'PrivateSubnetATag1', '']]
|
|
PrivateSubnetATag2Condition: !Not [!Equals [!Ref 'PrivateSubnetATag2', '']]
|
|
PrivateSubnetATag3Condition: !Not [!Equals [!Ref 'PrivateSubnetATag3', '']]
|
|
PrivateSubnetBTag1Condition: !Not [!Equals [!Ref 'PrivateSubnetBTag1', '']]
|
|
PrivateSubnetBTag2Condition: !Not [!Equals [!Ref 'PrivateSubnetBTag2', '']]
|
|
PrivateSubnetBTag3Condition: !Not [!Equals [!Ref 'PrivateSubnetBTag3', '']]
|
|
PublicSubnetTag1Condition: !Not [!Equals [!Ref 'PublicSubnetTag1', '']]
|
|
PublicSubnetTag2Condition: !Not [!Equals [!Ref 'PublicSubnetTag2', '']]
|
|
PublicSubnetTag3Condition: !Not [!Equals [!Ref 'PublicSubnetTag3', '']]
|
|
VPCFlowLogsCloudWatchKMSKeyCondition: !Not [!Equals [!Ref VPCFlowLogsCloudWatchKMSKey, '']]
|
|
VPCFlowLogsToCloudWatchCondition: !Equals [!Ref 'CreateVPCFlowLogsToCloudWatch', 'true']
|
|
Resources:
|
|
DHCPOptions:
|
|
Type: AWS::EC2::DHCPOptions
|
|
Properties:
|
|
DomainName: !If [NVirginiaRegionCondition, ec2.internal, !Sub '${AWS::Region}.compute.internal']
|
|
DomainNameServers:
|
|
- AmazonProvidedDNS
|
|
Tags:
|
|
- Key: Name
|
|
Value: !Sub ${AWS::StackName} stack DHCPOptions
|
|
- Key: StackName
|
|
Value: !Ref AWS::StackName
|
|
VPC:
|
|
Type: AWS::EC2::VPC
|
|
Properties:
|
|
CidrBlock: !Ref 'VPCCIDR'
|
|
InstanceTenancy: !Ref 'VPCTenancy'
|
|
EnableDnsSupport: true
|
|
EnableDnsHostnames: true
|
|
Tags:
|
|
- Key: Name
|
|
Value: !Ref 'AWS::StackName'
|
|
VPCDHCPOptionsAssociation:
|
|
Type: AWS::EC2::VPCDHCPOptionsAssociation
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
DhcpOptionsId: !Ref 'DHCPOptions'
|
|
InternetGateway:
|
|
Condition: PublicSubnetsCondition
|
|
Type: AWS::EC2::InternetGateway
|
|
Properties:
|
|
Tags:
|
|
- Key: Name
|
|
Value: !Ref 'AWS::StackName'
|
|
VPCGatewayAttachment:
|
|
Condition: PublicSubnetsCondition
|
|
Type: AWS::EC2::VPCGatewayAttachment
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
InternetGatewayId: !Ref 'InternetGateway'
|
|
PrivateSubnet1A:
|
|
Condition: PrivateSubnetsCondition
|
|
Type: AWS::EC2::Subnet
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
CidrBlock: !Ref 'PrivateSubnet1ACIDR'
|
|
AvailabilityZone: !Select ['0', !Ref 'AvailabilityZones']
|
|
Tags:
|
|
- Key: Name
|
|
Value: Private subnet 1A
|
|
- !If
|
|
- PrivateSubnetATag1Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag1']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag1']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PrivateSubnetATag2Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag2']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag2']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PrivateSubnetATag3Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag3']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag3']]
|
|
- !Ref 'AWS::NoValue'
|
|
PrivateSubnet1B:
|
|
Condition: AdditionalPrivateSubnetsCondition
|
|
Type: AWS::EC2::Subnet
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
CidrBlock: !Ref 'PrivateSubnet1BCIDR'
|
|
AvailabilityZone: !Select ['0', !Ref 'AvailabilityZones']
|
|
Tags:
|
|
- Key: Name
|
|
Value: Private subnet 1B
|
|
- !If
|
|
- PrivateSubnetBTag1Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag1']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag1']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PrivateSubnetBTag2Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag2']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag2']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PrivateSubnetBTag3Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag3']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag3']]
|
|
- !Ref 'AWS::NoValue'
|
|
PrivateSubnet2A:
|
|
Condition: PrivateSubnetsCondition
|
|
Type: AWS::EC2::Subnet
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
CidrBlock: !Ref 'PrivateSubnet2ACIDR'
|
|
AvailabilityZone: !Select ['1', !Ref 'AvailabilityZones']
|
|
Tags:
|
|
- Key: Name
|
|
Value: Private subnet 2A
|
|
- !If
|
|
- PrivateSubnetATag1Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag1']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag1']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PrivateSubnetATag2Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag2']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag2']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PrivateSubnetATag3Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag3']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag3']]
|
|
- !Ref 'AWS::NoValue'
|
|
PrivateSubnet2B:
|
|
Condition: AdditionalPrivateSubnetsCondition
|
|
Type: AWS::EC2::Subnet
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
CidrBlock: !Ref 'PrivateSubnet2BCIDR'
|
|
AvailabilityZone: !Select ['1', !Ref 'AvailabilityZones']
|
|
Tags:
|
|
- Key: Name
|
|
Value: Private subnet 2B
|
|
- !If
|
|
- PrivateSubnetBTag1Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag1']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag1']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PrivateSubnetBTag2Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag2']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag2']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PrivateSubnetBTag3Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag3']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag3']]
|
|
- !Ref 'AWS::NoValue'
|
|
PrivateSubnet3A:
|
|
Condition: PrivateSubnets&3AZCondition
|
|
Type: AWS::EC2::Subnet
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
CidrBlock: !Ref 'PrivateSubnet3ACIDR'
|
|
AvailabilityZone: !Select ['2', !Ref 'AvailabilityZones']
|
|
Tags:
|
|
- Key: Name
|
|
Value: Private subnet 3A
|
|
- !If
|
|
- PrivateSubnetATag1Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag1']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag1']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PrivateSubnetATag2Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag2']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag2']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PrivateSubnetATag3Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag3']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag3']]
|
|
- !Ref 'AWS::NoValue'
|
|
PrivateSubnet3B:
|
|
Condition: AdditionalPrivateSubnets&3AZCondition
|
|
Type: AWS::EC2::Subnet
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
CidrBlock: !Ref 'PrivateSubnet3BCIDR'
|
|
AvailabilityZone: !Select ['2', !Ref 'AvailabilityZones']
|
|
Tags:
|
|
- Key: Name
|
|
Value: Private subnet 3B
|
|
- !If
|
|
- PrivateSubnetBTag1Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag1']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag1']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PrivateSubnetBTag2Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag2']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag2']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PrivateSubnetBTag3Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag3']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag3']]
|
|
- !Ref 'AWS::NoValue'
|
|
PrivateSubnet4A:
|
|
Condition: PrivateSubnets&4AZCondition
|
|
Type: AWS::EC2::Subnet
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
CidrBlock: !Ref 'PrivateSubnet4ACIDR'
|
|
AvailabilityZone: !Select ['3', !Ref 'AvailabilityZones']
|
|
Tags:
|
|
- Key: Name
|
|
Value: Private subnet 4A
|
|
- !If
|
|
- PrivateSubnetATag1Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag1']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag1']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PrivateSubnetATag2Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag2']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag2']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PrivateSubnetATag3Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetATag3']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetATag3']]
|
|
- !Ref 'AWS::NoValue'
|
|
PrivateSubnet4B:
|
|
Condition: AdditionalPrivateSubnets&4AZCondition
|
|
Type: AWS::EC2::Subnet
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
CidrBlock: !Ref 'PrivateSubnet4BCIDR'
|
|
AvailabilityZone: !Select ['3', !Ref 'AvailabilityZones']
|
|
Tags:
|
|
- Key: Name
|
|
Value: Private subnet 4B
|
|
- !If
|
|
- PrivateSubnetBTag1Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag1']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag1']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PrivateSubnetBTag2Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag2']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag2']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PrivateSubnetBTag3Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PrivateSubnetBTag3']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PrivateSubnetBTag3']]
|
|
- !Ref 'AWS::NoValue'
|
|
PublicSubnet1:
|
|
Condition: PublicSubnetsCondition
|
|
Type: AWS::EC2::Subnet
|
|
Metadata:
|
|
cfn_nag:
|
|
rules_to_suppress:
|
|
- id: W33
|
|
reason: "(W33) EC2 Subnet should not have MapPublicIpOnLaunch set to true"
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
CidrBlock: !Ref 'PublicSubnet1CIDR'
|
|
AvailabilityZone: !Select ['0', !Ref 'AvailabilityZones']
|
|
Tags:
|
|
- Key: Name
|
|
Value: Public subnet 1
|
|
- !If
|
|
- PublicSubnetTag1Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag1']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag1']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PublicSubnetTag2Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag2']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag2']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PublicSubnetTag3Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag3']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag3']]
|
|
- !Ref 'AWS::NoValue'
|
|
MapPublicIpOnLaunch: true
|
|
PublicSubnet2:
|
|
Condition: PublicSubnetsCondition
|
|
Type: AWS::EC2::Subnet
|
|
Metadata:
|
|
cfn_nag:
|
|
rules_to_suppress:
|
|
- id: W33
|
|
reason: "(W33) EC2 Subnet should not have MapPublicIpOnLaunch set to true"
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
CidrBlock: !Ref 'PublicSubnet2CIDR'
|
|
AvailabilityZone: !Select ['1', !Ref 'AvailabilityZones']
|
|
Tags:
|
|
- Key: Name
|
|
Value: Public subnet 2
|
|
- !If
|
|
- PublicSubnetTag1Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag1']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag1']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PublicSubnetTag2Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag2']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag2']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PublicSubnetTag3Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag3']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag3']]
|
|
- !Ref 'AWS::NoValue'
|
|
MapPublicIpOnLaunch: true
|
|
PublicSubnet3:
|
|
Condition: PublicSubnets&3AZCondition
|
|
Type: AWS::EC2::Subnet
|
|
Metadata:
|
|
cfn_nag:
|
|
rules_to_suppress:
|
|
- id: W33
|
|
reason: "(W33) EC2 Subnet should not have MapPublicIpOnLaunch set to true"
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
CidrBlock: !Ref 'PublicSubnet3CIDR'
|
|
AvailabilityZone: !Select ['2', !Ref 'AvailabilityZones']
|
|
Tags:
|
|
- Key: Name
|
|
Value: Public subnet 3
|
|
- !If
|
|
- PublicSubnetTag1Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag1']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag1']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PublicSubnetTag2Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag2']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag2']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PublicSubnetTag3Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag3']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag3']]
|
|
- !Ref 'AWS::NoValue'
|
|
MapPublicIpOnLaunch: true
|
|
PublicSubnet4:
|
|
Condition: PublicSubnets&4AZCondition
|
|
Type: AWS::EC2::Subnet
|
|
Metadata:
|
|
cfn_nag:
|
|
rules_to_suppress:
|
|
- id: W33
|
|
reason: "(W33) EC2 Subnet should not have MapPublicIpOnLaunch set to true"
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
CidrBlock: !Ref 'PublicSubnet4CIDR'
|
|
AvailabilityZone: !Select ['3', !Ref 'AvailabilityZones']
|
|
Tags:
|
|
- Key: Name
|
|
Value: Public subnet 4
|
|
- !If
|
|
- PublicSubnetTag1Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag1']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag1']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PublicSubnetTag2Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag2']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag2']]
|
|
- !Ref 'AWS::NoValue'
|
|
- !If
|
|
- PublicSubnetTag3Condition
|
|
- Key: !Select ['0', !Split ['=', !Ref 'PublicSubnetTag3']]
|
|
Value: !Select ['1', !Split ['=', !Ref 'PublicSubnetTag3']]
|
|
- !Ref 'AWS::NoValue'
|
|
MapPublicIpOnLaunch: true
|
|
PrivateSubnet1ARouteTable:
|
|
Condition: PrivateSubnetsCondition
|
|
Type: AWS::EC2::RouteTable
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
Tags:
|
|
- Key: Name
|
|
Value: Private subnet 1A
|
|
- Key: Network
|
|
Value: Private
|
|
PrivateSubnet1ARoute:
|
|
Condition: NATGateways&PublicSubnets&PrivateSubnetsCondition
|
|
Type: AWS::EC2::Route
|
|
Properties:
|
|
RouteTableId: !Ref 'PrivateSubnet1ARouteTable'
|
|
DestinationCidrBlock: '0.0.0.0/0'
|
|
NatGatewayId: !Ref 'NATGateway1'
|
|
PrivateSubnet1ARouteTableAssociation:
|
|
Condition: PrivateSubnetsCondition
|
|
Type: AWS::EC2::SubnetRouteTableAssociation
|
|
Properties:
|
|
SubnetId: !Ref 'PrivateSubnet1A'
|
|
RouteTableId: !Ref 'PrivateSubnet1ARouteTable'
|
|
PrivateSubnet2ARouteTable:
|
|
Condition: PrivateSubnetsCondition
|
|
Type: AWS::EC2::RouteTable
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
Tags:
|
|
- Key: Name
|
|
Value: Private subnet 2A
|
|
- Key: Network
|
|
Value: Private
|
|
PrivateSubnet2ARoute:
|
|
Condition: NATGateways&PublicSubnets&PrivateSubnetsCondition
|
|
Type: AWS::EC2::Route
|
|
Properties:
|
|
RouteTableId: !Ref 'PrivateSubnet2ARouteTable'
|
|
DestinationCidrBlock: '0.0.0.0/0'
|
|
NatGatewayId: !Ref 'NATGateway2'
|
|
PrivateSubnet2ARouteTableAssociation:
|
|
Condition: PrivateSubnetsCondition
|
|
Type: AWS::EC2::SubnetRouteTableAssociation
|
|
Properties:
|
|
SubnetId: !Ref 'PrivateSubnet2A'
|
|
RouteTableId: !Ref 'PrivateSubnet2ARouteTable'
|
|
PrivateSubnet3ARouteTable:
|
|
Condition: PrivateSubnets&3AZCondition
|
|
Type: AWS::EC2::RouteTable
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
Tags:
|
|
- Key: Name
|
|
Value: Private subnet 3A
|
|
- Key: Network
|
|
Value: Private
|
|
PrivateSubnet3ARoute:
|
|
Condition: NATGateways&PublicSubnets&PrivateSubnets&3AZCondition
|
|
Type: AWS::EC2::Route
|
|
Properties:
|
|
RouteTableId: !Ref 'PrivateSubnet3ARouteTable'
|
|
DestinationCidrBlock: '0.0.0.0/0'
|
|
NatGatewayId: !Ref 'NATGateway3'
|
|
PrivateSubnet3ARouteTableAssociation:
|
|
Condition: PrivateSubnets&3AZCondition
|
|
Type: AWS::EC2::SubnetRouteTableAssociation
|
|
Properties:
|
|
SubnetId: !Ref 'PrivateSubnet3A'
|
|
RouteTableId: !Ref 'PrivateSubnet3ARouteTable'
|
|
PrivateSubnet4ARouteTable:
|
|
Condition: PrivateSubnets&4AZCondition
|
|
Type: AWS::EC2::RouteTable
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
Tags:
|
|
- Key: Name
|
|
Value: Private subnet 4A
|
|
- Key: Network
|
|
Value: Private
|
|
PrivateSubnet4ARoute:
|
|
Condition: NATGateways&PublicSubnets&PrivateSubnets&4AZCondition
|
|
Type: AWS::EC2::Route
|
|
Properties:
|
|
RouteTableId: !Ref 'PrivateSubnet4ARouteTable'
|
|
DestinationCidrBlock: '0.0.0.0/0'
|
|
NatGatewayId: !Ref 'NATGateway4'
|
|
PrivateSubnet4ARouteTableAssociation:
|
|
Condition: PrivateSubnets&4AZCondition
|
|
Type: AWS::EC2::SubnetRouteTableAssociation
|
|
Properties:
|
|
SubnetId: !Ref 'PrivateSubnet4A'
|
|
RouteTableId: !Ref 'PrivateSubnet4ARouteTable'
|
|
PrivateSubnet1BRouteTable:
|
|
Condition: AdditionalPrivateSubnetsCondition
|
|
Type: AWS::EC2::RouteTable
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
Tags:
|
|
- Key: Name
|
|
Value: Private subnet 1B
|
|
- Key: Network
|
|
Value: Private
|
|
PrivateSubnet1BRoute:
|
|
Condition: AdditionalPrivateSubnets&PublicSubnets&NatGatewaysCondition
|
|
Type: AWS::EC2::Route
|
|
Properties:
|
|
RouteTableId: !Ref 'PrivateSubnet1BRouteTable'
|
|
DestinationCidrBlock: '0.0.0.0/0'
|
|
NatGatewayId: !Ref 'NATGateway1'
|
|
PrivateSubnet1BRouteTableAssociation:
|
|
Condition: AdditionalPrivateSubnetsCondition
|
|
Type: AWS::EC2::SubnetRouteTableAssociation
|
|
Properties:
|
|
SubnetId: !Ref 'PrivateSubnet1B'
|
|
RouteTableId: !Ref 'PrivateSubnet1BRouteTable'
|
|
PrivateSubnet1BNetworkAcl:
|
|
Condition: AdditionalPrivateSubnetsCondition
|
|
Type: AWS::EC2::NetworkAcl
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
Tags:
|
|
- Key: Name
|
|
Value: NACL Protected subnet 1
|
|
- Key: Network
|
|
Value: NACL Protected
|
|
PrivateSubnet1BNetworkAclEntryInbound:
|
|
Condition: AdditionalPrivateSubnetsCondition
|
|
Type: AWS::EC2::NetworkAclEntry
|
|
Metadata:
|
|
cfn_nag:
|
|
rules_to_suppress:
|
|
- id: W66
|
|
reason: "(W66) To avoid opening all ports for Allow rules, EC2 NetworkACL Entry Protocol should be either 6 (for TCP), 17 (for UDP), 1 (for ICMP), or 58 (for ICMPv6, which must include an IPv6 CIDR block, ICMP type, and code)."
|
|
Properties:
|
|
CidrBlock: '0.0.0.0/0'
|
|
Egress: false
|
|
NetworkAclId: !Ref 'PrivateSubnet1BNetworkAcl'
|
|
Protocol: -1
|
|
RuleAction: allow
|
|
RuleNumber: 100
|
|
PrivateSubnet1BNetworkAclEntryOutbound:
|
|
Condition: AdditionalPrivateSubnetsCondition
|
|
Type: AWS::EC2::NetworkAclEntry
|
|
Metadata:
|
|
cfn_nag:
|
|
rules_to_suppress:
|
|
- id: W66
|
|
reason: "(W66) To avoid opening all ports for Allow rules, EC2 NetworkACL Entry Protocol should be either 6 (for TCP), 17 (for UDP), 1 (for ICMP), or 58 (for ICMPv6, which must include an IPv6 CIDR block, ICMP type, and code)."
|
|
Properties:
|
|
CidrBlock: '0.0.0.0/0'
|
|
Egress: true
|
|
NetworkAclId: !Ref 'PrivateSubnet1BNetworkAcl'
|
|
Protocol: -1
|
|
RuleAction: allow
|
|
RuleNumber: 100
|
|
PrivateSubnet1BNetworkAclAssociation:
|
|
Condition: AdditionalPrivateSubnetsCondition
|
|
Type: AWS::EC2::SubnetNetworkAclAssociation
|
|
Properties:
|
|
SubnetId: !Ref 'PrivateSubnet1B'
|
|
NetworkAclId: !Ref 'PrivateSubnet1BNetworkAcl'
|
|
PrivateSubnet2BRouteTable:
|
|
Condition: AdditionalPrivateSubnetsCondition
|
|
Type: AWS::EC2::RouteTable
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
Tags:
|
|
- Key: Name
|
|
Value: Private subnet 2B
|
|
- Key: Network
|
|
Value: Private
|
|
PrivateSubnet2BRoute:
|
|
Condition: AdditionalPrivateSubnets&PublicSubnets&NatGatewaysCondition
|
|
Type: AWS::EC2::Route
|
|
Properties:
|
|
RouteTableId: !Ref 'PrivateSubnet2BRouteTable'
|
|
DestinationCidrBlock: '0.0.0.0/0'
|
|
NatGatewayId: !Ref 'NATGateway2'
|
|
PrivateSubnet2BRouteTableAssociation:
|
|
Condition: AdditionalPrivateSubnetsCondition
|
|
Type: AWS::EC2::SubnetRouteTableAssociation
|
|
Properties:
|
|
SubnetId: !Ref 'PrivateSubnet2B'
|
|
RouteTableId: !Ref 'PrivateSubnet2BRouteTable'
|
|
PrivateSubnet2BNetworkAcl:
|
|
Condition: AdditionalPrivateSubnetsCondition
|
|
Type: AWS::EC2::NetworkAcl
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
Tags:
|
|
- Key: Name
|
|
Value: NACL Protected subnet 2
|
|
- Key: Network
|
|
Value: NACL Protected
|
|
PrivateSubnet2BNetworkAclEntryInbound:
|
|
Condition: AdditionalPrivateSubnetsCondition
|
|
Type: AWS::EC2::NetworkAclEntry
|
|
Metadata:
|
|
cfn_nag:
|
|
rules_to_suppress:
|
|
- id: W66
|
|
reason: "(W66) To avoid opening all ports for Allow rules, EC2 NetworkACL Entry Protocol should be either 6 (for TCP), 17 (for UDP), 1 (for ICMP), or 58 (for ICMPv6, which must include an IPv6 CIDR block, ICMP type, and code)."
|
|
Properties:
|
|
CidrBlock: '0.0.0.0/0'
|
|
Egress: false
|
|
NetworkAclId: !Ref 'PrivateSubnet2BNetworkAcl'
|
|
Protocol: -1
|
|
RuleAction: allow
|
|
RuleNumber: 100
|
|
PrivateSubnet2BNetworkAclEntryOutbound:
|
|
Condition: AdditionalPrivateSubnetsCondition
|
|
Type: AWS::EC2::NetworkAclEntry
|
|
Metadata:
|
|
cfn_nag:
|
|
rules_to_suppress:
|
|
- id: W66
|
|
reason: "(W66) To avoid opening all ports for Allow rules, EC2 NetworkACL Entry Protocol should be either 6 (for TCP), 17 (for UDP), 1 (for ICMP), or 58 (for ICMPv6, which must include an IPv6 CIDR block, ICMP type, and code)."
|
|
Properties:
|
|
CidrBlock: '0.0.0.0/0'
|
|
Egress: true
|
|
NetworkAclId: !Ref 'PrivateSubnet2BNetworkAcl'
|
|
Protocol: -1
|
|
RuleAction: allow
|
|
RuleNumber: 100
|
|
PrivateSubnet2BNetworkAclAssociation:
|
|
Condition: AdditionalPrivateSubnetsCondition
|
|
Type: AWS::EC2::SubnetNetworkAclAssociation
|
|
Properties:
|
|
SubnetId: !Ref 'PrivateSubnet2B'
|
|
NetworkAclId: !Ref 'PrivateSubnet2BNetworkAcl'
|
|
PrivateSubnet3BRouteTable:
|
|
Condition: AdditionalPrivateSubnets&3AZCondition
|
|
Type: AWS::EC2::RouteTable
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
Tags:
|
|
- Key: Name
|
|
Value: Private subnet 3B
|
|
- Key: Network
|
|
Value: Private
|
|
PrivateSubnet3BRoute:
|
|
Condition: AdditionalPrivateSubnets&PublicSubnets&NatGateways&3AZCondition
|
|
Type: AWS::EC2::Route
|
|
Properties:
|
|
RouteTableId: !Ref 'PrivateSubnet3BRouteTable'
|
|
DestinationCidrBlock: '0.0.0.0/0'
|
|
NatGatewayId: !Ref 'NATGateway3'
|
|
PrivateSubnet3BRouteTableAssociation:
|
|
Condition: AdditionalPrivateSubnets&3AZCondition
|
|
Type: AWS::EC2::SubnetRouteTableAssociation
|
|
Properties:
|
|
SubnetId: !Ref 'PrivateSubnet3B'
|
|
RouteTableId: !Ref 'PrivateSubnet3BRouteTable'
|
|
PrivateSubnet3BNetworkAcl:
|
|
Condition: AdditionalPrivateSubnets&3AZCondition
|
|
Type: AWS::EC2::NetworkAcl
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
Tags:
|
|
- Key: Name
|
|
Value: NACL Protected subnet 3
|
|
- Key: Network
|
|
Value: NACL Protected
|
|
PrivateSubnet3BNetworkAclEntryInbound:
|
|
Condition: AdditionalPrivateSubnets&3AZCondition
|
|
Type: AWS::EC2::NetworkAclEntry
|
|
Metadata:
|
|
cfn_nag:
|
|
rules_to_suppress:
|
|
- id: W66
|
|
reason: "(W66) To avoid opening all ports for Allow rules, EC2 NetworkACL Entry Protocol should be either 6 (for TCP), 17 (for UDP), 1 (for ICMP), or 58 (for ICMPv6, which must include an IPv6 CIDR block, ICMP type, and code)."
|
|
Properties:
|
|
CidrBlock: '0.0.0.0/0'
|
|
Egress: false
|
|
NetworkAclId: !Ref 'PrivateSubnet3BNetworkAcl'
|
|
Protocol: -1
|
|
RuleAction: allow
|
|
RuleNumber: 100
|
|
PrivateSubnet3BNetworkAclEntryOutbound:
|
|
Condition: AdditionalPrivateSubnets&3AZCondition
|
|
Type: AWS::EC2::NetworkAclEntry
|
|
Metadata:
|
|
cfn_nag:
|
|
rules_to_suppress:
|
|
- id: W66
|
|
reason: "(W66) To avoid opening all ports for Allow rules, EC2 NetworkACL Entry Protocol should be either 6 (for TCP), 17 (for UDP), 1 (for ICMP), or 58 (for ICMPv6, which must include an IPv6 CIDR block, ICMP type, and code)."
|
|
Properties:
|
|
CidrBlock: '0.0.0.0/0'
|
|
Egress: true
|
|
NetworkAclId: !Ref 'PrivateSubnet3BNetworkAcl'
|
|
Protocol: -1
|
|
RuleAction: allow
|
|
RuleNumber: 100
|
|
PrivateSubnet3BNetworkAclAssociation:
|
|
Condition: AdditionalPrivateSubnets&3AZCondition
|
|
Type: AWS::EC2::SubnetNetworkAclAssociation
|
|
Properties:
|
|
SubnetId: !Ref 'PrivateSubnet3B'
|
|
NetworkAclId: !Ref 'PrivateSubnet3BNetworkAcl'
|
|
PrivateSubnet4BRouteTable:
|
|
Condition: AdditionalPrivateSubnets&4AZCondition
|
|
Type: AWS::EC2::RouteTable
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
Tags:
|
|
- Key: Name
|
|
Value: Private subnet 4B
|
|
- Key: Network
|
|
Value: Private
|
|
PrivateSubnet4BRoute:
|
|
Condition: AdditionalPrivateSubnets&PublicSubnets&NatGateways&4AZCondition
|
|
Type: AWS::EC2::Route
|
|
Properties:
|
|
RouteTableId: !Ref 'PrivateSubnet4BRouteTable'
|
|
DestinationCidrBlock: '0.0.0.0/0'
|
|
NatGatewayId: !Ref 'NATGateway4'
|
|
PrivateSubnet4BRouteTableAssociation:
|
|
Condition: AdditionalPrivateSubnets&4AZCondition
|
|
Type: AWS::EC2::SubnetRouteTableAssociation
|
|
Properties:
|
|
SubnetId: !Ref 'PrivateSubnet4B'
|
|
RouteTableId: !Ref 'PrivateSubnet4BRouteTable'
|
|
PrivateSubnet4BNetworkAcl:
|
|
Condition: AdditionalPrivateSubnets&4AZCondition
|
|
Type: AWS::EC2::NetworkAcl
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
Tags:
|
|
- Key: Name
|
|
Value: NACL Protected subnet 4
|
|
- Key: Network
|
|
Value: NACL Protected
|
|
PrivateSubnet4BNetworkAclEntryInbound:
|
|
Condition: AdditionalPrivateSubnets&4AZCondition
|
|
Type: AWS::EC2::NetworkAclEntry
|
|
Metadata:
|
|
cfn_nag:
|
|
rules_to_suppress:
|
|
- id: W66
|
|
reason: "(W66) To avoid opening all ports for Allow rules, EC2 NetworkACL Entry Protocol should be either 6 (for TCP), 17 (for UDP), 1 (for ICMP), or 58 (for ICMPv6, which must include an IPv6 CIDR block, ICMP type, and code)."
|
|
Properties:
|
|
CidrBlock: '0.0.0.0/0'
|
|
Egress: false
|
|
NetworkAclId: !Ref 'PrivateSubnet4BNetworkAcl'
|
|
Protocol: -1
|
|
RuleAction: allow
|
|
RuleNumber: 100
|
|
PrivateSubnet4BNetworkAclEntryOutbound:
|
|
Condition: AdditionalPrivateSubnets&4AZCondition
|
|
Type: AWS::EC2::NetworkAclEntry
|
|
Metadata:
|
|
cfn_nag:
|
|
rules_to_suppress:
|
|
- id: W66
|
|
reason: "(W66) To avoid opening all ports for Allow rules, EC2 NetworkACL Entry Protocol should be either 6 (for TCP), 17 (for UDP), 1 (for ICMP), or 58 (for ICMPv6, which must include an IPv6 CIDR block, ICMP type, and code)."
|
|
Properties:
|
|
CidrBlock: '0.0.0.0/0'
|
|
Egress: true
|
|
NetworkAclId: !Ref 'PrivateSubnet4BNetworkAcl'
|
|
Protocol: -1
|
|
RuleAction: allow
|
|
RuleNumber: 100
|
|
PrivateSubnet4BNetworkAclAssociation:
|
|
Condition: AdditionalPrivateSubnets&4AZCondition
|
|
Type: AWS::EC2::SubnetNetworkAclAssociation
|
|
Properties:
|
|
SubnetId: !Ref 'PrivateSubnet4B'
|
|
NetworkAclId: !Ref 'PrivateSubnet4BNetworkAcl'
|
|
PublicSubnetRouteTable:
|
|
Condition: PublicSubnetsCondition
|
|
Type: AWS::EC2::RouteTable
|
|
Properties:
|
|
VpcId: !Ref 'VPC'
|
|
Tags:
|
|
- Key: Name
|
|
Value: Public Subnets
|
|
- Key: Network
|
|
Value: Public
|
|
PublicSubnetRoute:
|
|
Condition: PublicSubnetsCondition
|
|
DependsOn: VPCGatewayAttachment
|
|
Type: AWS::EC2::Route
|
|
Properties:
|
|
RouteTableId: !Ref 'PublicSubnetRouteTable'
|
|
DestinationCidrBlock: '0.0.0.0/0'
|
|
GatewayId: !Ref 'InternetGateway'
|
|
PublicSubnet1RouteTableAssociation:
|
|
Condition: PublicSubnetsCondition
|
|
Type: AWS::EC2::SubnetRouteTableAssociation
|
|
Properties:
|
|
SubnetId: !Ref 'PublicSubnet1'
|
|
RouteTableId: !Ref 'PublicSubnetRouteTable'
|
|
PublicSubnet2RouteTableAssociation:
|
|
Condition: PublicSubnetsCondition
|
|
Type: AWS::EC2::SubnetRouteTableAssociation
|
|
Properties:
|
|
SubnetId: !Ref 'PublicSubnet2'
|
|
RouteTableId: !Ref 'PublicSubnetRouteTable'
|
|
PublicSubnet3RouteTableAssociation:
|
|
Condition: PublicSubnets&3AZCondition
|
|
Type: AWS::EC2::SubnetRouteTableAssociation
|
|
Properties:
|
|
SubnetId: !Ref 'PublicSubnet3'
|
|
RouteTableId: !Ref 'PublicSubnetRouteTable'
|
|
PublicSubnet4RouteTableAssociation:
|
|
Condition: PublicSubnets&4AZCondition
|
|
Type: AWS::EC2::SubnetRouteTableAssociation
|
|
Properties:
|
|
SubnetId: !Ref 'PublicSubnet4'
|
|
RouteTableId: !Ref 'PublicSubnetRouteTable'
|
|
NAT1EIP:
|
|
Condition: NATGateways&PublicSubnets&PrivateSubnetsCondition
|
|
DependsOn: VPCGatewayAttachment
|
|
Type: AWS::EC2::EIP
|
|
Properties:
|
|
Domain: vpc
|
|
Tags:
|
|
- Key: Name
|
|
Value: NAT1EIP
|
|
NAT2EIP:
|
|
Condition: NATGateways&PublicSubnets&PrivateSubnetsCondition
|
|
DependsOn: VPCGatewayAttachment
|
|
Type: AWS::EC2::EIP
|
|
Properties:
|
|
Domain: vpc
|
|
Tags:
|
|
- Key: Name
|
|
Value: NAT2EIP
|
|
NAT3EIP:
|
|
Condition: NATGateways&PublicSubnets&PrivateSubnets&3AZCondition
|
|
Type: AWS::EC2::EIP
|
|
Properties:
|
|
Domain: vpc
|
|
Tags:
|
|
- Key: Name
|
|
Value: NAT3EIP
|
|
NAT4EIP:
|
|
Condition: NATGateways&PublicSubnets&PrivateSubnets&4AZCondition
|
|
DependsOn: VPCGatewayAttachment
|
|
Type: AWS::EC2::EIP
|
|
Properties:
|
|
Domain: vpc
|
|
Tags:
|
|
- Key: Name
|
|
Value: NAT4EIP
|
|
NATGateway1:
|
|
Condition: NATGateways&PublicSubnets&PrivateSubnetsCondition
|
|
DependsOn: VPCGatewayAttachment
|
|
Type: AWS::EC2::NatGateway
|
|
Properties:
|
|
AllocationId: !GetAtt 'NAT1EIP.AllocationId'
|
|
SubnetId: !Ref 'PublicSubnet1'
|
|
Tags:
|
|
- Key: Name
|
|
Value: NATGateway1
|
|
NATGateway2:
|
|
Condition: NATGateways&PublicSubnets&PrivateSubnetsCondition
|
|
DependsOn: VPCGatewayAttachment
|
|
Type: AWS::EC2::NatGateway
|
|
Properties:
|
|
AllocationId: !GetAtt 'NAT2EIP.AllocationId'
|
|
SubnetId: !Ref 'PublicSubnet2'
|
|
Tags:
|
|
- Key: Name
|
|
Value: NATGateway2
|
|
NATGateway3:
|
|
Condition: NATGateways&PublicSubnets&PrivateSubnets&3AZCondition
|
|
DependsOn: VPCGatewayAttachment
|
|
Type: AWS::EC2::NatGateway
|
|
Properties:
|
|
AllocationId: !GetAtt 'NAT3EIP.AllocationId'
|
|
SubnetId: !Ref 'PublicSubnet3'
|
|
Tags:
|
|
- Key: Name
|
|
Value: NATGateway3
|
|
NATGateway4:
|
|
Condition: NATGateways&PublicSubnets&PrivateSubnets&4AZCondition
|
|
DependsOn: VPCGatewayAttachment
|
|
Type: AWS::EC2::NatGateway
|
|
Properties:
|
|
AllocationId: !GetAtt 'NAT4EIP.AllocationId'
|
|
SubnetId: !Ref 'PublicSubnet4'
|
|
Tags:
|
|
- Key: Name
|
|
Value: NATGateway4
|
|
S3VPCEndpoint:
|
|
Condition: PrivateSubnetsCondition
|
|
Type: AWS::EC2::VPCEndpoint
|
|
Properties:
|
|
PolicyDocument:
|
|
Version: '2012-10-17'
|
|
Statement:
|
|
- Action: '*'
|
|
Effect: Allow
|
|
Resource: '*'
|
|
Principal: '*'
|
|
RouteTableIds:
|
|
- !Ref 'PrivateSubnet1ARouteTable'
|
|
- !Ref 'PrivateSubnet2ARouteTable'
|
|
- !If [PrivateSubnets&3AZCondition, !Ref 'PrivateSubnet3ARouteTable', !Ref 'AWS::NoValue']
|
|
- !If [PrivateSubnets&4AZCondition, !Ref 'PrivateSubnet4ARouteTable', !Ref 'AWS::NoValue']
|
|
- !If [AdditionalPrivateSubnetsCondition, !Ref 'PrivateSubnet1BRouteTable', !Ref 'AWS::NoValue']
|
|
- !If [AdditionalPrivateSubnetsCondition, !Ref 'PrivateSubnet2BRouteTable', !Ref 'AWS::NoValue']
|
|
- !If [AdditionalPrivateSubnets&3AZCondition, !Ref 'PrivateSubnet3BRouteTable', !Ref 'AWS::NoValue']
|
|
- !If [AdditionalPrivateSubnets&4AZCondition, !Ref 'PrivateSubnet4BRouteTable', !Ref 'AWS::NoValue']
|
|
ServiceName: !Sub 'com.amazonaws.${AWS::Region}.s3'
|
|
VpcId: !Ref 'VPC'
|
|
VPCFlowLogsRole:
|
|
Condition: VPCFlowLogsToCloudWatchCondition
|
|
Type: AWS::IAM::Role
|
|
Properties:
|
|
Description: Rights to Publish VPC Flow Logs to CloudWatch Logs
|
|
AssumeRolePolicyDocument:
|
|
Version: 2012-10-17
|
|
Statement:
|
|
- Effect: Allow
|
|
Action: sts:AssumeRole
|
|
Principal:
|
|
Service:
|
|
- vpc-flow-logs.amazonaws.com
|
|
Path: /
|
|
Policies:
|
|
- PolicyName: CloudWatchLogGroup
|
|
PolicyDocument:
|
|
Version: 2012-10-17
|
|
Statement:
|
|
- Sid: CloudWatchLogs
|
|
Effect: Allow
|
|
Action:
|
|
- logs:CreateLogStream
|
|
- logs:PutLogEvents
|
|
- logs:DescribeLogGroups
|
|
- logs:DescribeLogStreams
|
|
Resource: !GetAtt VPCFlowLogsLogGroup.Arn
|
|
VPCFlowLogsLogGroup:
|
|
Condition: VPCFlowLogsToCloudWatchCondition
|
|
Type: AWS::Logs::LogGroup
|
|
Properties:
|
|
RetentionInDays: !Ref VPCFlowLogsLogGroupRetention
|
|
KmsKeyId: !If
|
|
- VPCFlowLogsCloudWatchKMSKeyCondition
|
|
- !Ref VPCFlowLogsCloudWatchKMSKey
|
|
- !Ref AWS::NoValue
|
|
VPCFlowLogsToCloudWatch:
|
|
Condition: VPCFlowLogsToCloudWatchCondition
|
|
Type: AWS::EC2::FlowLog
|
|
Properties:
|
|
LogDestinationType: cloud-watch-logs
|
|
LogGroupName: !Ref VPCFlowLogsLogGroup
|
|
DeliverLogsPermissionArn: !GetAtt VPCFlowLogsRole.Arn
|
|
LogFormat: !Ref VPCFlowLogsLogFormat
|
|
MaxAggregationInterval: !Ref VPCFlowLogsMaxAggregationInterval
|
|
ResourceId: !Ref VPC
|
|
ResourceType: VPC
|
|
TrafficType: !Ref VPCFlowLogsTrafficType
|
|
Tags:
|
|
- Key: Name
|
|
Value: VPC Flow Logs CloudWatch
|
|
Outputs:
|
|
NAT1EIP:
|
|
Condition: NATGateways&PublicSubnets&PrivateSubnetsCondition
|
|
Description: NAT 1 IP address
|
|
Value: !Ref 'NAT1EIP'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-NAT1EIP'
|
|
NAT2EIP:
|
|
Condition: NATGateways&PublicSubnets&PrivateSubnetsCondition
|
|
Description: NAT 2 IP address
|
|
Value: !Ref 'NAT2EIP'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-NAT2EIP'
|
|
NAT3EIP:
|
|
Condition: NATGateways&PublicSubnets&PrivateSubnets&3AZCondition
|
|
Description: NAT 3 IP address
|
|
Value: !Ref 'NAT3EIP'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-NAT3EIP'
|
|
NAT4EIP:
|
|
Condition: NATGateways&PublicSubnets&PrivateSubnets&4AZCondition
|
|
Description: NAT 4 IP address
|
|
Value: !Ref 'NAT4EIP'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-NAT4EIP'
|
|
NATGateway1ID:
|
|
Condition: NATGateways&PublicSubnets&PrivateSubnetsCondition
|
|
Description: NATGateway 1 ID
|
|
Value: !Ref 'NATGateway1'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-NATGateway1'
|
|
NATGateway2ID:
|
|
Condition: NATGateways&PublicSubnets&PrivateSubnetsCondition
|
|
Description: NATGateway 2 ID
|
|
Value: !Ref 'NATGateway2'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-NATGateway2'
|
|
NATGateway3ID:
|
|
Condition: NATGateways&PublicSubnets&PrivateSubnets&3AZCondition
|
|
Description: NATGateway 3 ID
|
|
Value: !Ref 'NATGateway3'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-NATGateway3'
|
|
NATGateway4ID:
|
|
Condition: NATGateways&PublicSubnets&PrivateSubnets&4AZCondition
|
|
Description: NATGateway 4 ID
|
|
Value: !Ref 'NATGateway4'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-NATGateway4'
|
|
PrivateSubnet1ACIDR:
|
|
Condition: PrivateSubnetsCondition
|
|
Description: Private subnet 1A CIDR in Availability Zone 1
|
|
Value: !Ref 'PrivateSubnet1ACIDR'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet1ACIDR'
|
|
PrivateSubnet1AID:
|
|
Condition: PrivateSubnetsCondition
|
|
Description: Private subnet 1A ID in Availability Zone 1
|
|
Value: !Ref 'PrivateSubnet1A'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet1AID'
|
|
PrivateSubnet1ARouteTable:
|
|
Condition: PrivateSubnetsCondition
|
|
Value: !Ref 'PrivateSubnet1ARouteTable'
|
|
Description: Private subnet 1A route table
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet1ARouteTable'
|
|
PrivateSubnet1BCIDR:
|
|
Condition: AdditionalPrivateSubnetsCondition
|
|
Description: Private subnet 1B CIDR in Availability Zone 1
|
|
Value: !Ref 'PrivateSubnet1BCIDR'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet1BCIDR'
|
|
PrivateSubnet1BID:
|
|
Condition: AdditionalPrivateSubnetsCondition
|
|
Description: Private subnet 1B ID in Availability Zone 1
|
|
Value: !Ref 'PrivateSubnet1B'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet1BID'
|
|
PrivateSubnet1BRouteTable:
|
|
Condition: AdditionalPrivateSubnetsCondition
|
|
Value: !Ref 'PrivateSubnet1BRouteTable'
|
|
Description: Private subnet 1B route table
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet1BRouteTable'
|
|
PrivateSubnet2ACIDR:
|
|
Condition: PrivateSubnetsCondition
|
|
Description: Private subnet 2A CIDR in Availability Zone 2
|
|
Value: !Ref 'PrivateSubnet2ACIDR'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet2ACIDR'
|
|
PrivateSubnet2AID:
|
|
Condition: PrivateSubnetsCondition
|
|
Description: Private subnet 2A ID in Availability Zone 2
|
|
Value: !Ref 'PrivateSubnet2A'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet2AID'
|
|
PrivateSubnet2ARouteTable:
|
|
Condition: PrivateSubnetsCondition
|
|
Value: !Ref 'PrivateSubnet2ARouteTable'
|
|
Description: Private subnet 2A route table
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet2ARouteTable'
|
|
PrivateSubnet2BCIDR:
|
|
Condition: AdditionalPrivateSubnetsCondition
|
|
Description: Private subnet 2B CIDR in Availability Zone 2
|
|
Value: !Ref 'PrivateSubnet2BCIDR'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet2BCIDR'
|
|
PrivateSubnet2BID:
|
|
Condition: AdditionalPrivateSubnetsCondition
|
|
Description: Private subnet 2B ID in Availability Zone 2
|
|
Value: !Ref 'PrivateSubnet2B'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet2BID'
|
|
PrivateSubnet2BRouteTable:
|
|
Condition: AdditionalPrivateSubnetsCondition
|
|
Value: !Ref 'PrivateSubnet2BRouteTable'
|
|
Description: Private subnet 2B route table
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet2BRouteTable'
|
|
PrivateSubnet3ACIDR:
|
|
Condition: PrivateSubnets&3AZCondition
|
|
Description: Private subnet 3A CIDR in Availability Zone 3
|
|
Value: !Ref 'PrivateSubnet3ACIDR'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet3ACIDR'
|
|
PrivateSubnet3AID:
|
|
Condition: PrivateSubnets&3AZCondition
|
|
Description: Private subnet 3A ID in Availability Zone 3
|
|
Value: !Ref 'PrivateSubnet3A'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet3AID'
|
|
PrivateSubnet3ARouteTable:
|
|
Condition: PrivateSubnets&3AZCondition
|
|
Value: !Ref 'PrivateSubnet3ARouteTable'
|
|
Description: Private subnet 3A route table
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet3ARouteTable'
|
|
PrivateSubnet3BCIDR:
|
|
Condition: AdditionalPrivateSubnets&3AZCondition
|
|
Description: Private subnet 3B CIDR in Availability Zone 3
|
|
Value: !Ref 'PrivateSubnet3BCIDR'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet3BCIDR'
|
|
PrivateSubnet3BID:
|
|
Condition: AdditionalPrivateSubnets&3AZCondition
|
|
Description: Private subnet 3B ID in Availability Zone 3
|
|
Value: !Ref 'PrivateSubnet3B'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet3BID'
|
|
PrivateSubnet3BRouteTable:
|
|
Condition: AdditionalPrivateSubnets&3AZCondition
|
|
Description: Private subnet 3B route table
|
|
Value: !Ref 'PrivateSubnet3BRouteTable'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet3BRouteTable'
|
|
PrivateSubnet4ACIDR:
|
|
Condition: PrivateSubnets&4AZCondition
|
|
Description: Private subnet 4A CIDR in Availability Zone 4
|
|
Value: !Ref 'PrivateSubnet4ACIDR'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet4ACIDR'
|
|
PrivateSubnet4AID:
|
|
Condition: PrivateSubnets&4AZCondition
|
|
Description: Private subnet 4A ID in Availability Zone 4
|
|
Value: !Ref 'PrivateSubnet4A'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet4AID'
|
|
PrivateSubnet4ARouteTable:
|
|
Condition: PrivateSubnets&4AZCondition
|
|
Description: Private subnet 4A route table
|
|
Value: !Ref 'PrivateSubnet4ARouteTable'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet4ARouteTable'
|
|
PrivateSubnet4BCIDR:
|
|
Condition: AdditionalPrivateSubnets&4AZCondition
|
|
Description: Private subnet 4B CIDR in Availability Zone 4
|
|
Value: !Ref 'PrivateSubnet4BCIDR'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet4BCIDR'
|
|
PrivateSubnet4BID:
|
|
Condition: AdditionalPrivateSubnets&4AZCondition
|
|
Description: Private subnet 4B ID in Availability Zone 4
|
|
Value: !Ref 'PrivateSubnet4B'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet4BID'
|
|
PrivateSubnet4BRouteTable:
|
|
Condition: AdditionalPrivateSubnets&4AZCondition
|
|
Description: Private subnet 4B route table
|
|
Value: !Ref 'PrivateSubnet4BRouteTable'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PrivateSubnet4BRouteTable'
|
|
PublicSubnet1CIDR:
|
|
Condition: PublicSubnetsCondition
|
|
Description: Public subnet 1 CIDR in Availability Zone 1
|
|
Value: !Ref 'PublicSubnet1CIDR'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PublicSubnet1CIDR'
|
|
PublicSubnet1ID:
|
|
Condition: PublicSubnetsCondition
|
|
Description: Public subnet 1 ID in Availability Zone 1
|
|
Value: !Ref 'PublicSubnet1'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PublicSubnet1ID'
|
|
PublicSubnet2CIDR:
|
|
Condition: PublicSubnetsCondition
|
|
Description: Public subnet 2 CIDR in Availability Zone 2
|
|
Value: !Ref 'PublicSubnet2CIDR'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PublicSubnet2CIDR'
|
|
PublicSubnet2ID:
|
|
Condition: PublicSubnetsCondition
|
|
Description: Public subnet 2 ID in Availability Zone 2
|
|
Value: !Ref 'PublicSubnet2'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PublicSubnet2ID'
|
|
PublicSubnet3CIDR:
|
|
Condition: PublicSubnets&3AZCondition
|
|
Description: Public subnet 3 CIDR in Availability Zone 3
|
|
Value: !Ref 'PublicSubnet3CIDR'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PublicSubnet3CIDR'
|
|
PublicSubnet3ID:
|
|
Condition: PublicSubnets&3AZCondition
|
|
Description: Public subnet 3 ID in Availability Zone 3
|
|
Value: !Ref 'PublicSubnet3'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PublicSubnet3ID'
|
|
PublicSubnet4CIDR:
|
|
Condition: PublicSubnets&4AZCondition
|
|
Description: Public subnet 4 CIDR in Availability Zone 4
|
|
Value: !Ref 'PublicSubnet4CIDR'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PublicSubnet4CIDR'
|
|
PublicSubnet4ID:
|
|
Condition: PublicSubnets&4AZCondition
|
|
Description: Public subnet 4 ID in Availability Zone 4
|
|
Value: !Ref 'PublicSubnet4'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PublicSubnet4ID'
|
|
PublicSubnetRouteTable:
|
|
Condition: PublicSubnetsCondition
|
|
Description: Public subnet route table
|
|
Value: !Ref 'PublicSubnetRouteTable'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-PublicSubnetRouteTable'
|
|
S3VPCEndpoint:
|
|
Condition: PrivateSubnetsCondition
|
|
Description: S3 VPC Endpoint
|
|
Value: !Ref 'S3VPCEndpoint'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-S3VPCEndpoint'
|
|
VPCCIDR:
|
|
Description: VPC CIDR
|
|
Value: !Ref 'VPCCIDR'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-VPCCIDR'
|
|
VPCID:
|
|
Description: VPC ID
|
|
Value: !Ref 'VPC'
|
|
Export:
|
|
Name: !Sub '${AWS::StackName}-VPCID'
|