security-group-indexers.tf 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. ## Indexer Security Group
  2. #
  3. # Summary:
  4. # Ingress:
  5. # x tcp/8000 - Splunk Web - (local.access_cidrs) vpc-access, legacy openvpn, legacy bastion
  6. # x tcp/8088 - Splunk HEC - (local.data_sources) Entire VPC + var.additional_source + local.splunk_legacy_cidr
  7. # x tcp/8088 - MOOSE ONLY - 10.0.0.0/8
  8. # x tcp/8089 - Splunk API - (local.access_cidrs) vpc-access, legacy openvpn, legacy bastion, legacy infra (vpc-private-services) VPC for monitoring console
  9. # x tcp/8089 - Splunk API + IDX Discovery - (local.splunk_vpc_cidrs) Entire VPC + local.splunk_legacy_cidr
  10. # x tcp/8089 - MOOSE ONLY - 10.0.0.0/8
  11. # x tcp/9887 - IDX Replication - (local.splunk_vpc_cidrs) Entire VPC + local.splunk_legacy_cidr
  12. # x tcp/9997-9998 - Splunk Data - (local.data_sources) Entire VPC + var.additional_source + local.splunk_legacy_cidr
  13. # x tcp/9997-9998 - MOOSE ONLY - 10.0.0.0/8
  14. # Egress:
  15. # tcp/9887 - IDX Replication - (local.splunk_vpc_cidrs) Entire VPC + local.splunk_legacy_cidr
  16. # tcp/8089 - Splunk API + IDX Discovery - (local.splunk_vpc_cidrs) Entire VPC + local.splunk_legacy_cidr
  17. locals {
  18. splunk_vpc_cidrs = toset(concat(local.splunk_legacy_cidr, [var.vpc_cidr], local.cidr_map["vpc-private-services"]))
  19. access_cidrs = local.cidr_map["vpc-access"]
  20. data_sources = toset(concat(tolist(local.splunk_vpc_cidrs), local.splunk_data_sources))
  21. }
  22. resource "aws_security_group" "indexer_security_group" {
  23. # checkov:skip=CKV2_AWS_5: this SG is attached to Indexers
  24. name = "indexer_security_group"
  25. description = "Security Group for Splunk Indexers"
  26. vpc_id = var.vpc_id
  27. tags = merge(local.standard_tags, var.tags, { "Name" = "indexer_security_group" })
  28. }
  29. #----------------------------------------------------------------------------
  30. # INGRESS
  31. #----------------------------------------------------------------------------
  32. resource "aws_security_group_rule" "splunk-web-in" {
  33. type = "ingress"
  34. description = "Web access from Bastions and VPN"
  35. from_port = 8000
  36. to_port = 8000
  37. protocol = "tcp"
  38. cidr_blocks = local.access_cidrs
  39. security_group_id = aws_security_group.indexer_security_group.id
  40. }
  41. resource "aws_security_group_rule" "splunk-hec-in" {
  42. type = "ingress"
  43. description = "Splunk HEC access"
  44. from_port = 8088
  45. to_port = 8088
  46. protocol = "tcp"
  47. cidr_blocks = local.data_sources # tfsec:ignore:aws-vpc-no-public-ingress-sgr Intentionally open to Internet for HEC from AWS
  48. security_group_id = aws_security_group.indexer_security_group.id
  49. }
  50. resource "aws_security_group_rule" "splunk-hec-in-moose" {
  51. count = local.is_moose ? 1 : 0
  52. type = "ingress"
  53. description = "Splunk HEC - Inbound to Moose access"
  54. from_port = 8088
  55. to_port = 8088
  56. protocol = "tcp"
  57. cidr_blocks = ["10.0.0.0/8"]
  58. security_group_id = aws_security_group.indexer_security_group.id
  59. }
  60. resource "aws_security_group_rule" "splunk-api-in-access" {
  61. type = "ingress"
  62. description = "Splunk API + Indexer Discovery"
  63. from_port = 8089
  64. to_port = 8089
  65. protocol = "tcp"
  66. # need to concat here, since legacy subnet is already in the rule
  67. cidr_blocks = toset(concat(tolist(local.access_cidrs), tolist(local.splunk_vpc_cidrs), local.cidr_map["vpc-splunk"]))
  68. security_group_id = aws_security_group.indexer_security_group.id
  69. }
  70. resource "aws_security_group_rule" "splunk-api-in-moose" {
  71. count = local.is_moose ? 1 : 0
  72. type = "ingress"
  73. description = "Splunk API + Indexer Discovery - 10/8 for MOOSE ONLY"
  74. from_port = 8089
  75. to_port = 8089
  76. protocol = "tcp"
  77. # Internal source _do_ use indexer discovery, so moose needs 10/8 open to the entirety.
  78. cidr_blocks = ["10.0.0.0/8"]
  79. security_group_id = aws_security_group.indexer_security_group.id
  80. }
  81. resource "aws_security_group_rule" "splunk-idx-replication" {
  82. type = "ingress"
  83. description = "Splunk Indexer Replication"
  84. from_port = 9887
  85. to_port = 9887
  86. protocol = "tcp"
  87. cidr_blocks = local.splunk_vpc_cidrs
  88. security_group_id = aws_security_group.indexer_security_group.id
  89. }
  90. resource "aws_security_group_rule" "splunk-data-in" {
  91. type = "ingress"
  92. description = "Splunk Data - Inbound"
  93. from_port = 9997
  94. to_port = 9998
  95. protocol = "tcp"
  96. cidr_blocks = local.data_sources # tfsec:ignore:aws-vpc-no-public-ingress-sgr Intentionally open to Internet due to NLB
  97. security_group_id = aws_security_group.indexer_security_group.id
  98. }
  99. resource "aws_security_group_rule" "splunk-data-in-moose" {
  100. count = local.is_moose ? 1 : 0
  101. type = "ingress"
  102. description = "Splunk Data - Inbound for Moose"
  103. from_port = 9997
  104. to_port = 9998
  105. protocol = "tcp"
  106. cidr_blocks = ["10.0.0.0/8"]
  107. security_group_id = aws_security_group.indexer_security_group.id
  108. }
  109. #----------------------------------------------------------------------------
  110. # EGRESS
  111. #----------------------------------------------------------------------------
  112. resource "aws_security_group_rule" "splunk-idx-replication-out" {
  113. type = "egress"
  114. description = "Splunk Indexer Replication - Outbound"
  115. from_port = 9887
  116. to_port = 9887
  117. protocol = "tcp"
  118. cidr_blocks = local.splunk_vpc_cidrs
  119. security_group_id = aws_security_group.indexer_security_group.id
  120. }
  121. resource "aws_security_group_rule" "splunk-api-out" {
  122. type = "egress"
  123. description = "Splunk API - Outbound to talk to indexers"
  124. from_port = 8089
  125. to_port = 8089
  126. protocol = "tcp"
  127. cidr_blocks = local.splunk_vpc_cidrs
  128. security_group_id = aws_security_group.indexer_security_group.id
  129. }