security-group-indexers.tf 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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 + var.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
  9. # x tcp/8089 - Splunk API + IDX Discovery - (local.splunk_vpc_cidrs) Entire VPC + var.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 + var.splunk_legacy_cidr
  12. # x tcp/9997-9998 - Splunk Data - (local.data_sources) Entire VPC + var.additional_source + var.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 + var.splunk_legacy_cidr
  16. # tcp/8089 - Splunk API + IDX Discovery - (local.splunk_vpc_cidrs) Entire VPC + var.splunk_legacy_cidr
  17. locals {
  18. splunk_vpc_cidrs = toset(concat(var.splunk_legacy_cidr, [ var.vpc_cidr ]))
  19. access_cidrs = var.cidr_map["vpc-access"]
  20. data_sources = toset(concat(tolist(local.splunk_vpc_cidrs), var.splunk_data_sources))
  21. }
  22. resource "aws_security_group" "indexer_security_group" {
  23. name = "indexer_security_group"
  24. description = "Security Group for Splunk Indexers"
  25. vpc_id = var.vpc_id
  26. tags = merge(var.standard_tags, var.tags, { "Name" = "indexer_security_group" })
  27. }
  28. ## Ingress
  29. resource "aws_security_group_rule" "splunk-web-in" {
  30. description = "Web access from bastions and vpn"
  31. type = "ingress"
  32. from_port = 8000
  33. to_port = 8000
  34. protocol = "tcp"
  35. cidr_blocks = local.access_cidrs
  36. security_group_id = aws_security_group.indexer_security_group.id
  37. }
  38. resource "aws_security_group_rule" "splunk-hec-in" {
  39. description = "Splunk HEC access"
  40. type = "ingress"
  41. from_port = 8088
  42. to_port = 8088
  43. protocol = "tcp"
  44. cidr_blocks = local.data_sources
  45. security_group_id = aws_security_group.indexer_security_group.id
  46. }
  47. resource "aws_security_group_rule" "splunk-hec-in-moose" {
  48. count = local.is_moose ? 1 : 0
  49. description = "Splunk HEC access"
  50. type = "ingress"
  51. from_port = 8088
  52. to_port = 8088
  53. protocol = "tcp"
  54. cidr_blocks = [ "10.0.0.0/8" ]
  55. security_group_id = aws_security_group.indexer_security_group.id
  56. }
  57. resource "aws_security_group_rule" "splunk-api-in-access" {
  58. description = "Splunk API + Indexer Discovery"
  59. type = "ingress"
  60. from_port = 8089
  61. to_port = 8089
  62. protocol = "tcp"
  63. # Note: This should not be data_sources, as we do not need to give remote sources access to indexer discovery
  64. cidr_blocks = local.access_cidrs
  65. security_group_id = aws_security_group.indexer_security_group.id
  66. }
  67. resource "aws_security_group_rule" "splunk-api-in-vpc" {
  68. description = "Splunk API + Indexer Discovery"
  69. type = "ingress"
  70. from_port = 8089
  71. to_port = 8089
  72. protocol = "tcp"
  73. # Note: This should not be data_sources, as we do not need to give remote sources access to indexer discovery
  74. cidr_blocks = local.splunk_vpc_cidrs
  75. security_group_id = aws_security_group.indexer_security_group.id
  76. }
  77. resource "aws_security_group_rule" "splunk-api-in-moose" {
  78. count = local.is_moose ? 1 : 0
  79. description = "Splunk API + Indexer Discovery - 10/8 for MOOSE ONLY"
  80. type = "ingress"
  81. from_port = 8089
  82. to_port = 8089
  83. protocol = "tcp"
  84. # Internal source _do_ use indexer discovery, so moose needs 10/8 open to the entirety.
  85. cidr_blocks = [ "10.0.0.0/8" ]
  86. security_group_id = aws_security_group.indexer_security_group.id
  87. }
  88. resource "aws_security_group_rule" "splunk-idx-replication" {
  89. description = "Splunk Indexer Replication"
  90. type = "ingress"
  91. from_port = 9887
  92. to_port = 9887
  93. protocol = "tcp"
  94. cidr_blocks = local.splunk_vpc_cidrs
  95. security_group_id = aws_security_group.indexer_security_group.id
  96. }
  97. resource "aws_security_group_rule" "splunk-data-in" {
  98. description = "Splunk Data In"
  99. type = "ingress"
  100. from_port = 9997
  101. to_port = 9998
  102. protocol = "tcp"
  103. cidr_blocks = local.data_sources
  104. security_group_id = aws_security_group.indexer_security_group.id
  105. }
  106. resource "aws_security_group_rule" "splunk-data-in-moose" {
  107. count = local.is_moose ? 1 : 0
  108. description = "Splunk Data In for Moose"
  109. type = "ingress"
  110. from_port = 9997
  111. to_port = 9998
  112. protocol = "tcp"
  113. cidr_blocks = [ "10.0.0.0/8" ]
  114. security_group_id = aws_security_group.indexer_security_group.id
  115. }
  116. ## Egress
  117. resource "aws_security_group_rule" "splunk-idx-replication-out" {
  118. description = "Splunk Indexer Replication"
  119. type = "egress"
  120. from_port = 9887
  121. to_port = 9887
  122. protocol = "tcp"
  123. cidr_blocks = local.splunk_vpc_cidrs
  124. security_group_id = aws_security_group.indexer_security_group.id
  125. }
  126. resource "aws_security_group_rule" "splunk-api-out" {
  127. description = "Splunk API Outbound to talk to indexers"
  128. type = "egress"
  129. from_port = 8089
  130. to_port = 8089
  131. protocol = "tcp"
  132. cidr_blocks = local.splunk_vpc_cidrs
  133. security_group_id = aws_security_group.indexer_security_group.id
  134. }