main.tf 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. data "aws_vpc" "this" {
  2. id = var.vpc_id
  3. }
  4. data "aws_prefix_list" "private_s3" {
  5. filter {
  6. name = "prefix-list-name"
  7. values = [ "com.amazonaws.*.s3" ]
  8. }
  9. }
  10. locals {
  11. vpc_name = lookup(data.aws_vpc.this.tags, "Name", data.aws_vpc.this.cidr_block)
  12. }
  13. resource "aws_security_group" "security_group" {
  14. name = "required_group"
  15. description = "Required Security Group for VPC ${local.vpc_name} (${var.vpc_id})"
  16. vpc_id = var.vpc_id
  17. tags = merge(var.tags, { "Name" = "required_group", "vpc_name" = local.vpc_name })
  18. }
  19. ## Ingress
  20. resource "aws_security_group_rule" "scanner_access" {
  21. security_group_id = aws_security_group.security_group.id
  22. type = "ingress"
  23. description = "Full Access from Security Scanners"
  24. from_port = 0
  25. to_port = 0
  26. protocol = -1
  27. cidr_blocks = var.cidr_map["scanners"]
  28. count = length(var.cidr_map["scanners"]) > 0 ? 1 : 0
  29. }
  30. resource "aws_security_group_rule" "ssh_access" {
  31. security_group_id = aws_security_group.security_group.id
  32. type = "ingress"
  33. description = "SSH Access"
  34. from_port = 22
  35. to_port = 22
  36. protocol = "tcp"
  37. cidr_blocks = concat(var.cidr_map["bastions"], var.cidr_map["vpns"])
  38. count = length(concat(var.cidr_map["bastions"], var.cidr_map["vpns"])) > 0 ? 1 : 0
  39. }
  40. resource "aws_security_group_rule" "ping_inbound" {
  41. security_group_id = aws_security_group.security_group.id
  42. type = "ingress"
  43. description = "Inbound Pings"
  44. from_port = -1
  45. to_port = -1
  46. protocol = "icmp"
  47. cidr_blocks = [ "10.0.0.0/8" ]
  48. }
  49. ## Outbound:
  50. resource "aws_security_group_rule" "ping_outbound" {
  51. security_group_id = aws_security_group.security_group.id
  52. type = "egress"
  53. description = "Outbound Pings"
  54. from_port = -1
  55. to_port = -1
  56. protocol = "icmp"
  57. cidr_blocks = [ "0.0.0.0/0" ]
  58. }
  59. resource "aws_security_group_rule" "dns_access_tcp" {
  60. security_group_id = aws_security_group.security_group.id
  61. type = "egress"
  62. description = "Outbound TCP DNS"
  63. from_port = 53
  64. to_port = 53
  65. protocol = "tcp"
  66. cidr_blocks = var.cidr_map["dns"]
  67. count = length(var.cidr_map["dns"]) > 0 ? 1 : 0
  68. }
  69. resource "aws_security_group_rule" "dns_access_udp" {
  70. security_group_id = aws_security_group.security_group.id
  71. type = "egress"
  72. description = "Outbound UDP DNS"
  73. from_port = 53
  74. to_port = 53
  75. protocol = "udp"
  76. cidr_blocks = var.cidr_map["dns"]
  77. count = length(var.cidr_map["dns"]) > 0 ? 1 : 0
  78. }
  79. resource "aws_security_group_rule" "outbound_to_salt_masters" {
  80. security_group_id = aws_security_group.security_group.id
  81. type = "egress"
  82. description = "Connect to Salt Masters"
  83. from_port = 4505
  84. to_port = 4506
  85. protocol = "tcp"
  86. cidr_blocks = var.cidr_map["salt"]
  87. count = length(var.cidr_map["salt"]) > 0 ? 1 : 0
  88. }
  89. resource "aws_security_group_rule" "outbound_to_web_servers_80" {
  90. security_group_id = aws_security_group.security_group.id
  91. type = "egress"
  92. description = "Connect to Repo Servers"
  93. from_port = 80
  94. to_port = 80
  95. protocol = "tcp"
  96. cidr_blocks = var.cidr_map["web"]
  97. count = length(var.cidr_map["web"]) > 0 ? 1 : 0
  98. }
  99. resource "aws_security_group_rule" "outbound_to_web_servers_443" {
  100. security_group_id = aws_security_group.security_group.id
  101. type = "egress"
  102. description = "Connect to Repo Servers"
  103. from_port = 443
  104. to_port = 443
  105. protocol = "tcp"
  106. cidr_blocks = var.cidr_map["web"]
  107. count = length(var.cidr_map["web"]) > 0 ? 1 : 0
  108. }
  109. resource "aws_security_group_rule" "outbound_to_mailrelay_25" {
  110. security_group_id = aws_security_group.security_group.id
  111. type = "egress"
  112. description = "Outbound Email to mailrelay"
  113. from_port = 25
  114. to_port = 25
  115. protocol = "tcp"
  116. cidr_blocks = var.cidr_map["smtp"]
  117. count = length(var.cidr_map["smtp"]) > 0 ? 1 : 0
  118. }
  119. resource "aws_security_group_rule" "outbound_to_ec2_s3_endpoint" {
  120. security_group_id = aws_security_group.security_group.id
  121. type = "egress"
  122. description = "Outbound to S3 endpoint"
  123. from_port = 443
  124. to_port = 443
  125. protocol = "tcp"
  126. prefix_list_ids = [ data.aws_prefix_list.private_s3.id ]
  127. count = length([ data.aws_prefix_list.private_s3.id ]) > 0 ? 1 : 0 # todo: handle case of no s3 prefix list
  128. }
  129. resource "aws_security_group_rule" "outbound_to_sensu" {
  130. security_group_id = aws_security_group.security_group.id
  131. type = "egress"
  132. description = "Monitoring Outbound"
  133. from_port = 8081
  134. to_port = 8081
  135. protocol = "tcp"
  136. cidr_blocks = var.cidr_map["monitoring"]
  137. count = length(var.cidr_map["monitoring"]) > 0 ? 1 : 0
  138. }
  139. resource "aws_security_group_rule" "outbound_to_moose_s2s" {
  140. security_group_id = aws_security_group.security_group.id
  141. type = "egress"
  142. description = "Splunk UF outbound to Moose Indexers"
  143. from_port = 9997
  144. to_port = 9998
  145. protocol = "tcp"
  146. cidr_blocks = var.cidr_map["moose"]
  147. count = length(var.cidr_map["moose"]) > 0 ? 1 : 0
  148. }
  149. resource "aws_security_group_rule" "outbound_to_moose_idxc" {
  150. security_group_id = aws_security_group.security_group.id
  151. type = "egress"
  152. description = "Outbound IDXC Discovery to MOOSE"
  153. from_port = 8089
  154. to_port = 8089
  155. protocol = "tcp"
  156. cidr_blocks = var.cidr_map["moose"]
  157. count = length(var.cidr_map["moose"]) > 0 ? 1 : 0
  158. }
  159. resource "aws_security_group_rule" "outbound_to_moose_hec" {
  160. security_group_id = aws_security_group.security_group.id
  161. type = "egress"
  162. description = "Connect to HEC"
  163. from_port = 8088
  164. to_port = 8088
  165. protocol = "tcp"
  166. cidr_blocks = var.cidr_map["moose"]
  167. count = length(var.cidr_map["moose"]) > 0 ? 1 : 0
  168. }