private_elb.tf 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. # lb ports
  2. locals {
  3. alb_listener_ports = {
  4. ui = "8000"
  5. api = "8080"
  6. agent = "8081"
  7. }
  8. }
  9. #----------------------------------------------------------------------------
  10. # INTERNAL LB
  11. #----------------------------------------------------------------------------
  12. resource "aws_alb" "sensu_internal" {
  13. name = "sensu-alb-internal-${var.environment}"
  14. security_groups = [aws_security_group.sensu_alb_server_internal.id]
  15. internal = true
  16. subnets = var.private_subnets
  17. load_balancer_type = "application"
  18. drop_invalid_header_fields = true
  19. access_logs {
  20. bucket = "xdr-elb-${var.environment}"
  21. enabled = true
  22. }
  23. tags = merge(local.standard_tags, var.tags, { Name = "sensu-alb-internal-${var.environment}" })
  24. }
  25. resource "aws_alb_target_group" "sensu_internal" {
  26. for_each = local.alb_listener_ports
  27. name = "sensu-alb-targets-${each.key}"
  28. port = each.value
  29. protocol = "HTTPS"
  30. #deregistration_delay = "${local.lb_deregistration_delay}"
  31. vpc_id = var.vpc_id
  32. health_check {
  33. protocol = "HTTPS"
  34. port = "8080"
  35. path = "/health"
  36. matcher = "200"
  37. timeout = "4"
  38. interval = "5"
  39. }
  40. stickiness {
  41. type = "lb_cookie"
  42. enabled = false
  43. }
  44. tags = merge(local.standard_tags, var.tags)
  45. }
  46. resource "aws_lb_target_group_attachment" "sensu_internal" {
  47. for_each = local.alb_listener_ports
  48. target_group_arn = aws_alb_target_group.sensu_internal[each.key].arn
  49. target_id = aws_instance.instance.id
  50. port = each.value
  51. }
  52. # Create a new alb listener
  53. resource "aws_alb_listener" "sensu_internal" {
  54. for_each = local.alb_listener_ports
  55. load_balancer_arn = aws_alb.sensu_internal.arn
  56. port = each.value
  57. protocol = "HTTPS"
  58. ssl_policy = "ELBSecurityPolicy-FS-1-2-Res-2020-10" # PFS, TLS1.2, and GCM; most "restrictive" policy
  59. certificate_arn = aws_acm_certificate.cert.arn
  60. default_action {
  61. target_group_arn = aws_alb_target_group.sensu_internal[each.key].arn
  62. type = "forward"
  63. }
  64. }
  65. #DNS Alias for the LB ( the CNAME was required. an Alias did NOT work due to aws/bug. )
  66. resource "aws_route53_record" "sensu_internal" {
  67. zone_id = var.dns_info["private"]["zone_id"]
  68. name = var.instance_name
  69. type = "CNAME"
  70. records = [aws_alb.sensu_internal.dns_name]
  71. ttl = "60"
  72. provider = aws.c2
  73. }
  74. #----------------------------------------------------------------------------
  75. # ALB Security Group
  76. #----------------------------------------------------------------------------
  77. resource "aws_security_group" "sensu_alb_server_internal" {
  78. vpc_id = var.vpc_id
  79. name = "sensu-alb-sg-internal"
  80. description = "Sensu Internal LB SG"
  81. tags = merge(local.standard_tags, var.tags)
  82. }
  83. #----------------------------------------------------------------------------
  84. # INGRESS
  85. #----------------------------------------------------------------------------
  86. resource "aws_security_group_rule" "sensu_from_vpc" {
  87. for_each = local.alb_listener_ports
  88. type = "ingress"
  89. from_port = each.value
  90. to_port = each.value
  91. protocol = "tcp"
  92. cidr_blocks = ["10.0.0.0/8"]
  93. description = "Sensu ${each.key}"
  94. security_group_id = aws_security_group.sensu_alb_server_internal.id
  95. }
  96. #----------------------------------------------------------------------------
  97. # EGRESS
  98. #----------------------------------------------------------------------------
  99. resource "aws_security_group_rule" "sensu_from_alb" {
  100. for_each = local.alb_listener_ports
  101. type = "egress"
  102. from_port = each.value
  103. to_port = each.value
  104. protocol = "tcp"
  105. source_security_group_id = aws_security_group.instance_security_group.id
  106. description = "Sensu ${each.key}"
  107. security_group_id = aws_security_group.sensu_alb_server_internal.id
  108. }