security-groups.tf 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. # Rather than pass in the aws security group, we just look it up. This will
  2. # probably be useful other places, as well.
  3. data "aws_security_group" "typical-host" {
  4. name = "typical-host"
  5. vpc_id = var.vpc_id
  6. }
  7. data "aws_security_group" "aws_endpoints" {
  8. name = "aws_endpoints"
  9. vpc_id = var.vpc_id
  10. }
  11. # For now, opening everything:
  12. # ajp port: 8009
  13. # http: 8080
  14. # https: 8443
  15. # mgmt-http: 9990
  16. # mgmt-https: 9993
  17. # txn-recovery-environment: 4712
  18. # txn-status-manager: 4713
  19. #
  20. # Also opening 80 and 443 for certbot
  21. resource "aws_security_group" "instance" {
  22. name = "Keycloak"
  23. description = "Keycloak Instances"
  24. vpc_id = var.vpc_id
  25. tags = merge(var.standard_tags, var.tags)
  26. }
  27. resource "aws_security_group_rule" "cluster-connectivity-ingress" {
  28. description = "Receive any from other cluster members"
  29. type = "ingress"
  30. from_port = -1
  31. to_port = -1
  32. protocol = -1
  33. security_group_id = aws_security_group.instance.id
  34. source_security_group_id = aws_security_group.instance.id
  35. }
  36. resource "aws_security_group_rule" "cluster-connectivity-egress" {
  37. description = "send any to other cluster members"
  38. type = "egress"
  39. from_port = -1
  40. to_port = -1
  41. protocol = -1
  42. security_group_id = aws_security_group.instance.id
  43. source_security_group_id = aws_security_group.instance.id
  44. }
  45. #resource "aws_security_group_rule" "instance-http-in" {
  46. # description = ""
  47. # type = "ingress"
  48. # from_port = "80"
  49. # to_port = "80"
  50. # protocol = "tcp"
  51. # cidr_blocks = [ "0.0.0.0/0" ]
  52. # security_group_id = aws_security_group.instance.id
  53. #}
  54. #
  55. #resource "aws_security_group_rule" "instance-https-in" {
  56. # description = ""
  57. # type = "ingress"
  58. # from_port = "443"
  59. # to_port = "443"
  60. # protocol = "tcp"
  61. # cidr_blocks = [ "0.0.0.0/0" ]
  62. # security_group_id = aws_security_group.instance.id
  63. #}
  64. #
  65. #resource "aws_security_group_rule" "instance-ajp-in" {
  66. # description = ""
  67. # type = "ingress"
  68. # from_port = "8009"
  69. # to_port = "8009"
  70. # protocol = "tcp"
  71. # cidr_blocks = [ "0.0.0.0/0" ]
  72. # security_group_id = aws_security_group.instance.id
  73. #}
  74. resource "aws_security_group_rule" "instance-alt-http-in-from-access" {
  75. description = "Alt HTTP from access"
  76. type = "ingress"
  77. from_port = "8080"
  78. to_port = "8080"
  79. protocol = "tcp"
  80. cidr_blocks = var.cidr_map["vpc-access"]
  81. security_group_id = aws_security_group.instance.id
  82. }
  83. resource "aws_security_group_rule" "instance-alt-http-in-from-elb" {
  84. description = "Alt HTTP from ELB"
  85. type = "ingress"
  86. from_port = "8080"
  87. to_port = "8080"
  88. protocol = "tcp"
  89. security_group_id = aws_security_group.instance.id
  90. source_security_group_id = aws_security_group.elb_external.id
  91. }
  92. resource "aws_security_group_rule" "instance-alt-https-in-from-access" {
  93. description = "Alt HTTPS from Access"
  94. type = "ingress"
  95. from_port = "8443"
  96. to_port = "8443"
  97. protocol = "tcp"
  98. cidr_blocks = var.cidr_map["vpc-access"]
  99. security_group_id = aws_security_group.instance.id
  100. }
  101. resource "aws_security_group_rule" "instance-alt-https-in-from-elb" {
  102. description = "Alt HTTPS from ELB"
  103. type = "ingress"
  104. from_port = "8443"
  105. to_port = "8443"
  106. protocol = "tcp"
  107. security_group_id = aws_security_group.instance.id
  108. source_security_group_id = aws_security_group.elb_external.id
  109. }
  110. resource "aws_security_group_rule" "instance-db-outbound" {
  111. description = "Postgres Outbound"
  112. type = "egress"
  113. from_port = "5432"
  114. to_port = "5432"
  115. protocol = "tcp"
  116. security_group_id = aws_security_group.instance.id
  117. source_security_group_id = data.aws_security_group.aws_endpoints.id
  118. }
  119. #resource "aws_security_group_rule" "instance-mgmt-http-in" {
  120. # description = ""
  121. # type = "ingress"
  122. # from_port = "9990"
  123. # to_port = "9990"
  124. # protocol = "tcp"
  125. # cidr_blocks = [ "0.0.0.0/0" ]
  126. # security_group_id = aws_security_group.instance.id
  127. #}
  128. #
  129. #resource "aws_security_group_rule" "instance-mgmt-https-in" {
  130. # description = ""
  131. # type = "ingress"
  132. # from_port = "9993"
  133. # to_port = "9993"
  134. # protocol = "tcp"
  135. # cidr_blocks = [ "0.0.0.0/0" ]
  136. # security_group_id = aws_security_group.instance.id
  137. #}
  138. #
  139. #resource "aws_security_group_rule" "instance-txn-in" {
  140. # description = ""
  141. # type = "ingress"
  142. # from_port = "4712"
  143. # to_port = "4713"
  144. # protocol = "tcp"
  145. # cidr_blocks = [ "0.0.0.0/0" ]
  146. # security_group_id = aws_security_group.instance.id
  147. #}
  148. #
  149. ## lock down before production, but I couldn't get letsencrypt to work with the proxy
  150. #resource "aws_security_group_rule" "instance-all-out" {
  151. # description = ""
  152. # type = "egress"
  153. # from_port = "-1"
  154. # to_port = "-1"
  155. # protocol = "-1"
  156. # cidr_blocks = [ "0.0.0.0/0" ]
  157. # security_group_id = aws_security_group.instance.id
  158. #}