123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- data "aws_availability_zones" "available" {
- state = "available"
- }
- module "vpc" {
- source = "terraform-aws-modules/vpc/aws"
- version = "~> v2.0"
- name = "${var.name}"
- cidr = "${var.cidr}"
- azs = slice(data.aws_availability_zones.available.names,0,3)
- private_subnets = [
- "${cidrsubnet(var.cidr,3,0)}",
- "${cidrsubnet(var.cidr,3,1)}",
- "${cidrsubnet(var.cidr,3,2)}",
- ]
- # Potentially, we could route all accounts through the transit gateway to
- # save costs and provide one point of exit to the Internet. But at this time,
- # I'm keeping it consistent with our legacy accounts.
- #
- # If we decide to do that, we should consider either dropping to a /23 per customer,
- # or a /24 for each subnet (seems wasteful).
- #public_subnets = [ ]
- public_subnets = [
- "${cidrsubnet(var.cidr,3,4)}",
- "${cidrsubnet(var.cidr,3,5)}",
- "${cidrsubnet(var.cidr,3,6)}",
- ]
- enable_nat_gateway = true
- enable_vpn_gateway = false
- enable_dns_hostnames = true
- enable_s3_endpoint = true
- enable_dynamodb_endpoint = true
- enable_sts_endpoint = true
- enable_kms_endpoint = true
- enable_dhcp_options = true
- enable_ec2_endpoint = true
- ec2_endpoint_private_dns_enabled = true
- kms_endpoint_private_dns_enabled = true
- sts_endpoint_private_dns_enabled = true
- ec2_endpoint_security_group_ids = [ "${module.aws_endpoints_sg.this_security_group_id}" ]
- kms_endpoint_security_group_ids = [ "${module.aws_endpoints_sg.this_security_group_id}" ]
- sts_endpoint_security_group_ids = [ "${module.aws_endpoints_sg.this_security_group_id}" ]
- dhcp_options_domain_name = var.inside_domain
- tags = merge(var.standard_tags, var.tags)
- nat_eip_tags = {
- "eip_type" = "natgw"
- Name = var.name
- }
- }
- resource "aws_flow_log" "flowlogs" {
- iam_role_arn = "arn:${var.aws_partition}:iam::${var.aws_account_id}:role/aws_services/flowlogs"
- log_destination = "arn:${var.aws_partition}:logs:${var.aws_region}:${var.aws_account_id}:log-group:vpc_flow_logs"
- traffic_type = "REJECT" # ALL is very noisy, and CIS only requires rejects.
- vpc_id = module.vpc.vpc_id
- tags = merge(var.standard_tags, var.tags)
- }
- resource "aws_vpc_endpoint" "ec2messages" {
- vpc_id = module.vpc.vpc_id
- service_name = "com.amazonaws.${var.aws_region}.ec2messages"
- vpc_endpoint_type = "Interface"
- subnet_ids = slice(module.vpc.public_subnets,0,3)
- security_group_ids = [
- module.aws_endpoints_sg.this_security_group_id
- ]
- private_dns_enabled = true
- }
- resource "aws_vpc_endpoint" "ssm" {
- vpc_id = module.vpc.vpc_id
- service_name = "com.amazonaws.${var.aws_region}.ssm"
- vpc_endpoint_type = "Interface"
- subnet_ids = slice(module.vpc.public_subnets,0,3)
- security_group_ids = [
- module.aws_endpoints_sg.this_security_group_id
- ]
- private_dns_enabled = true
- }
- data "aws_vpc_endpoint_service" "ecr_api_endpoint" {
- service = "ecr.api"
- }
- data "aws_vpc_endpoint_service" "ecr_dkr_endpoint" {
- service = "ecr.dkr"
- }
- resource "aws_vpc_endpoint" "ecr_api" {
- vpc_id = module.vpc.vpc_id
- service_name = data.aws_vpc_endpoint_service.ecr_api_endpoint.service_name
- vpc_endpoint_type = "Interface"
- subnet_ids = module.vpc.private_subnets
- security_group_ids = [
- module.aws_endpoints_sg.this_security_group_id
- ]
- private_dns_enabled = true
- }
- resource "aws_vpc_endpoint" "ecr_dkr" {
- vpc_id = module.vpc.vpc_id
- service_name = data.aws_vpc_endpoint_service.ecr_dkr_endpoint.service_name
- vpc_endpoint_type = "Interface"
- subnet_ids = module.vpc.private_subnets
- security_group_ids = [
- module.aws_endpoints_sg.this_security_group_id
- ]
- private_dns_enabled = true
- }
- data "aws_vpc_endpoint_service" "logs_endpoint" {
- service = "logs"
- }
- resource "aws_vpc_endpoint" "logs" {
- vpc_id = module.vpc.vpc_id
- service_name = data.aws_vpc_endpoint_service.logs_endpoint.service_name
- vpc_endpoint_type = "Interface"
- subnet_ids = module.vpc.private_subnets
- security_group_ids = [
- module.aws_endpoints_sg.this_security_group_id
- ]
- private_dns_enabled = true
- }
- data "aws_vpc_endpoint_service" "monitoring_endpoint" {
- service = "monitoring"
- }
- resource "aws_vpc_endpoint" "monitoring" {
- vpc_id = module.vpc.vpc_id
- service_name = data.aws_vpc_endpoint_service.monitoring_endpoint.service_name
- vpc_endpoint_type = "Interface"
- subnet_ids = module.vpc.private_subnets
- security_group_ids = [
- module.aws_endpoints_sg.this_security_group_id
- ]
- private_dns_enabled = true
- }
|