main.tf 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. resource "aws_network_interface" "FWManagementNetworkInterface" {
  2. count = var.palo_alto_count
  3. subnet_id = var.subnet_id_map["management"][count.index % 2]
  4. security_groups = var.management_security_group_ids
  5. source_dest_check = false
  6. private_ips_count = 0
  7. private_ips = [ cidrhost(var.subnet_cidr_map["management"][count.index % 2], 10 + (count.index % 2)) ]
  8. description = "Palo Alto XDR Interconnect ${count.index} management interface"
  9. tags = {
  10. Name = "xdr-interconnect-${count.index}_management_interface"
  11. }
  12. }
  13. resource "aws_network_interface" "FWPublicNetworkInterface" {
  14. count = var.palo_alto_count
  15. subnet_id = var.subnet_id_map["untrusted"][count.index % 2]
  16. security_groups = var.untrusted_security_group_ids
  17. source_dest_check = false
  18. private_ips_count = 0
  19. private_ips = [ cidrhost(var.subnet_cidr_map["untrusted"][count.index % 2], 10 + (count.index % 2)) ]
  20. description = "Palo Alto XDR Interconnect ${count.index} untrusted interface"
  21. tags = {
  22. Name = "xdr-interconnect-${count.index}_untrusted_interface"
  23. }
  24. }
  25. resource "aws_network_interface" "FWPrivateNetworkInterface" {
  26. count = var.palo_alto_count
  27. subnet_id = var.subnet_id_map["private"][count.index % 2]
  28. security_groups = var.untrusted_security_group_ids
  29. source_dest_check = false
  30. private_ips_count = 0
  31. private_ips = [ cidrhost(var.subnet_cidr_map["private"][count.index % 2], 10 + (count.index % 2)) ]
  32. description = "Palo Alto XDR Interconnect ${count.index} private interface"
  33. tags = {
  34. Name = "xdr-interconnect-${count.index}_private_interface"
  35. }
  36. }
  37. resource "aws_network_interface" "FWTGWNetworkInterface" {
  38. count = var.palo_alto_count
  39. subnet_id = var.subnet_id_map["tgw_standalone"][count.index % 2]
  40. security_groups = var.untrusted_security_group_ids
  41. source_dest_check = false
  42. private_ips_count = 0
  43. private_ips = [ cidrhost(var.subnet_cidr_map["tgw_standalone"][count.index % 2], 10 + (count.index % 2)) ]
  44. description = "Palo Alto XDR Interconnect ${count.index} tgw interface"
  45. tags = {
  46. Name = "xdr-interconnect-${count.index}_tgw_interface"
  47. }
  48. }
  49. resource "aws_eip" "untrusted_eip" {
  50. count = var.palo_alto_count
  51. vpc = true
  52. }
  53. resource "aws_eip" "management_eip" {
  54. count = var.palo_alto_count
  55. vpc = true
  56. }
  57. resource "aws_eip_association" "FWEIPManagementAssociation" {
  58. count = var.palo_alto_count
  59. network_interface_id = aws_network_interface.FWManagementNetworkInterface[count.index].id
  60. allocation_id = aws_eip.management_eip[count.index].id
  61. }
  62. resource "aws_eip_association" "FWEIPPublicAssociation" {
  63. count = var.palo_alto_count
  64. network_interface_id = aws_network_interface.FWPublicNetworkInterface[count.index].id
  65. allocation_id = aws_eip.untrusted_eip[count.index].id
  66. }
  67. resource "aws_placement_group" "palo_group" {
  68. name = "Palo Alto Placement Group"
  69. strategy = "spread"
  70. }
  71. resource "aws_instance" "palo" {
  72. count = var.palo_alto_count
  73. ami = lookup(var.pavm_byol_ami_id, var.aws_region)
  74. availability_zone = var.azs[count.index % 2]
  75. placement_group = aws_placement_group.palo_group.id
  76. tenancy = "default"
  77. ebs_optimized = true
  78. disable_api_termination = var.instance_termination_protection
  79. instance_initiated_shutdown_behavior = "stop"
  80. instance_type = var.palo_alto_instance_type
  81. key_name = var.palo_alto_key_name
  82. monitoring = false
  83. #subnet_id = var.subnet_id_map["untrusted"][count.index % 2]
  84. #associate_public_ip_address = true # causes a recreate on apply if you set this!
  85. #private_ip = cidrhost(var.subnet_cidr_map["untrusted"][count.index % 2], 10 + (count.index % 2))
  86. #source_dest_check = false
  87. tags = merge(
  88. var.standard_tags,
  89. var.tags,
  90. { Name = "xdr-interconnect-${count.index}" }
  91. )
  92. root_block_device {
  93. volume_type = "gp2"
  94. volume_size = "60"
  95. delete_on_termination = true
  96. }
  97. network_interface {
  98. device_index = 0
  99. network_interface_id = aws_network_interface.FWPublicNetworkInterface[count.index].id
  100. }
  101. network_interface {
  102. device_index = 1
  103. network_interface_id = aws_network_interface.FWManagementNetworkInterface[count.index].id
  104. }
  105. network_interface {
  106. device_index = 2
  107. network_interface_id = aws_network_interface.FWPrivateNetworkInterface[count.index].id
  108. }
  109. network_interface {
  110. device_index = 3
  111. network_interface_id = aws_network_interface.FWTGWNetworkInterface[count.index].id
  112. }
  113. user_data = base64encode("vmseries-bootstrap-aws-s3bucket=${var.bucket_ids[count.index]}")
  114. iam_instance_profile = var.instance_profile_names[count.index]
  115. }