main.tf 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. locals {
  2. azs = slice(data.aws_availability_zones.available.names,0,2)
  3. subnets = [
  4. cidrsubnet(var.security_vpc_cidr,3,0),
  5. cidrsubnet(var.security_vpc_cidr,3,1),
  6. cidrsubnet(var.security_vpc_cidr,3,2),
  7. cidrsubnet(var.security_vpc_cidr,3,3),
  8. cidrsubnet(var.security_vpc_cidr,3,4),
  9. cidrsubnet(var.security_vpc_cidr,3,5),
  10. cidrsubnet(var.security_vpc_cidr,3,6),
  11. cidrsubnet(var.security_vpc_cidr,3,7),
  12. ]
  13. }
  14. data "aws_availability_zones" "available" {
  15. state = "available"
  16. }
  17. module "vpc" {
  18. source = "terraform-aws-modules/vpc/aws"
  19. version = "~> v2.0"
  20. name = "security_vpc_${var.aws_partition_alias}_${var.environment}"
  21. cidr = var.security_vpc_cidr
  22. azs = local.azs
  23. # 2 private and 2 public here, but 2 more of each will be created after in the same azs
  24. private_subnets = [
  25. local.subnets[0],
  26. local.subnets[1],
  27. ]
  28. private_subnet_tags = {
  29. "Name" = "FW private (private)"
  30. }
  31. public_subnets = [
  32. local.subnets[4],
  33. local.subnets[5]
  34. ]
  35. public_subnet_tags = {
  36. "Name" = "FW Untrusted (Public)"
  37. }
  38. enable_nat_gateway = false
  39. enable_vpn_gateway = false
  40. enable_dns_hostnames = true
  41. enable_s3_endpoint = true
  42. enable_dynamodb_endpoint = false
  43. enable_sts_endpoint = false
  44. enable_kms_endpoint = false
  45. enable_dhcp_options = true
  46. enable_ec2_endpoint = true # PA likes a local ec2 endpoint
  47. ec2_endpoint_security_group_ids = [ module.aws_endpoints_sg.this_security_group_id ]
  48. dhcp_options_domain_name = var.inside_domain
  49. tags = merge(var.standard_tags, var.tags)
  50. }
  51. resource "aws_subnet" "mgmt" {
  52. count = 2
  53. depends_on = [ module.vpc ]
  54. vpc_id = module.vpc.vpc_id
  55. cidr_block = local.subnets[6 + count.index]
  56. availability_zone = local.azs[count.index]
  57. tags = {
  58. Name = "FW Management (Public)"
  59. }
  60. }
  61. resource "aws_route_table_association" "mgmt-to-internet" {
  62. count = 2
  63. depends_on = [ aws_subnet.mgmt, module.vpc ]
  64. subnet_id = aws_subnet.mgmt[count.index].id
  65. route_table_id = module.vpc.public_route_table_ids[0] # only 1 public route table
  66. }
  67. resource "aws_subnet" "standalone_tgw" {
  68. # A standalone private subnet that could be connected to the tgw
  69. count = 2
  70. depends_on = [ module.vpc ]
  71. vpc_id = module.vpc.vpc_id
  72. cidr_block = local.subnets[2 + count.index]
  73. availability_zone = local.azs[count.index]
  74. tags = {
  75. Name = "Standalone TGW"
  76. }
  77. }