Skip to content

Setup sg it linux base #2

Merged
merged 5 commits into from
Jun 3, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 59 additions & 0 deletions it-linux-base/.x/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/**
* # About
*
* This describes how to use the aws-common-security-groups submodule for it-linux-base
*
* # Usage
*
* ```code
* module "it-linux-base" {
* source = "git::https://vc1.csvd.census.gov/terraform-modules/aws-common-security-groups.git//it-linux-base"
*
* # name = "m-it-linux-base"
* vpc_id = var.vpc_id
* # Name, CostAllocation, and Environment are pre-set
* # tags = { }
* }
* ```
*/

locals {
description = "Linux Common Base Ports"
short_description = "Linux"
name = var.name
ports = [
[ 1433, 1433, "tcp" ],
[ 5023, 5023, "tcp" ]
]
}

resource "aws_security_group" "this_security_group" {
name = local.name
description = local.description
vpc_id = var.vpc_id

dynamic "ingress" {
for_each = local.ports
iterator = p
content {
description = local.description
from_port = p.value[0]
to_port = p.value[1]
protocol = p.value[2]
cidr_blocks = [ "0.0.0.0/0" ]
}
}

egress {
description = "ALL ${local.description}"
from_port = 0
to_port = 0
protocol = -1
cidr_blocks = [ "0.0.0.0/0" ]
}

tags = merge(
map("Name", local.name),
var.tags,
)
}
9 changes: 9 additions & 0 deletions it-linux-base/.x/output.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
output "this_security_group_id" {
description = "Created security group ID"
value = aws_security_group.this_security_group.id
}

output "this_security_group_arn" {
description = "Created security group ARN"
value = aws_security_group.this_security_group.arn
}
19 changes: 19 additions & 0 deletions it-linux-base/.x/variables.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
variable "vpc_id" {
description = "VPC ID Number"
type = string
}

variable "name" {
description = "Security group Name"
type = string
default = "m-rds-mssql"
}

variable "tags" {
description = "Extra security group tags"
type = map
default = {
"CostAllocation" = "csvd:infrastructure"
"Environment" = "csvd-infrastructure"
}
}
5 changes: 5 additions & 0 deletions it-linux-base/.x/version.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
variable "_module_version" {
description = "Module version number"
type = string
default = "1.4"
}
4 changes: 4 additions & 0 deletions it-linux-base/.x/versions.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@

terraform {
required_version = ">= 0.12"
}
3 changes: 3 additions & 0 deletions it-linux-base/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# v1.0 -- 20200603

* create from running security group for use throughout
98 changes: 98 additions & 0 deletions it-linux-base/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
data "aws_vpc" "this_vpc" {
count = var.use_vpc_cidr ? 1 : 0
id = var.vpc_id
}

data "aws_security_group" "ingress_security_groups" {
count = length(var.ingress_security_groups)
id = element(var.ingress_security_groups, count.index)
}

data "aws_security_group" "egress_security_groups" {
count = length(var.egress_security_groups)
id = element(var.egress_security_groups, count.index)
}

locals {
vpc_networks = var.use_vpc_cidr ? [data.aws_vpc.this_vpc[0].cidr_block] : []
external_ingress_networks = compact(concat(local.vpc_networks, local.ingress_networks))
ingress_sg_names = zipmap(var.ingress_security_groups, data.aws_security_group.ingress_security_groups[*].name)
egress_sg_names = zipmap(var.egress_security_groups, data.aws_security_group.egress_security_groups[*].name)
self = var.enable_self ? [1] : []
short_description = var.short_description == "" ? var.description : var.short_description
}

resource "aws_security_group" "this_security_group" {
name = local.name
description = var.description
vpc_id = var.vpc_id
# vpc_id = "${data.aws_vpc.selected.id}"

# ingresss external port list (list + vpc if enabaled)
dynamic "ingress" {
for_each = local.port_map["external"]
iterator = p
content {
description = "${local.short_description}: ${p.value["description"]}"
from_port = p.value["from"]
to_port = p.value["to"]
protocol = p.value["proto"]
cidr_blocks = length(p.value["cidr"]) == 0 ? local.external_ingress_networks : p.value["cidr"]
}
}

# ingress security group ids (all)
dynamic "ingress" {
for_each = local.ingress_sg
iterator = sg
content {
description = "${local.short_description}: ${local.ingress_sg_names[sg.value]}"
from_port = 0
to_port = 0
protocol = -1
security_groups = [sg.value]
}
}

# ingress self (list with one or zero items)
dynamic "ingress" {
for_each = local.self
iterator = sg
content {
description = "${local.short_description}: from self"
from_port = 0
to_port = 0
protocol = -1
self = true
}
}

# egress all
egress {
description = "${local.short_description}: All"
from_port = 0
to_port = 0
protocol = -1
cidr_blocks = local.egress_networks
}

# egress security group ids (all)
dynamic "egress" {
for_each = local.egress_sg
iterator = sg
content {
description = "${local.short_description}: ${local.egress_sg_names[sg]}"
from_port = 0
to_port = 0
protocol = -1
security_groups = [sg]
}
}

tags = merge(
var.tags,
map("boc:tf_module_version", var._module_version),
map("boc:vpc:info", join(" ", compact(list(var.vpc_id, var.vpc_full_name)))),
map("Name", "sg-${local.name}"),
)
}
9 changes: 9 additions & 0 deletions it-linux-base/output.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
output "this_security_group_id" {
description = "Created security group ID"
value = aws_security_group.this_security_group.id
}

output "this_security_group_arn" {
description = "Created security group ARN"
value = aws_security_group.this_security_group.arn
}
51 changes: 51 additions & 0 deletions it-linux-base/ports.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# ports = list of list of
# from_port
# to_port
# proto
# description
# cidr_block
# list of: all, external (more added as needed)

locals {
n_all = ["0.0.0.0/0"]
n_census = ["148.129.0.0/16", "192.168.0.0/16", "172.16.0.0/12", "10.0.0.0/8"]
n_mgmt = ["148.129.162.0/24", "148.129.95.0/24"]
source_groups = ["all", "external"]
name = var.name
ports = [
[ -1, -1, "icmp", "ICMP", local.n_all, ["external"] ],
[ 22, 22, "tcp", "SSH", local.n_census, ["external"] ],
[ 25, 25, "tcp", "SMTP", local.n_all, ["external"] ],
[ 123, 123, "udp", "NTP", local.n_all, ["external"] ],
[ 161, 161, "udp", "SNMP", local.n_all, ["external"] ],
[ 443, 443, "tcp", "https", local.n_all, ["external"] ],
[ 4949, 4949, "tcp", "Munin", local.n_mgmt, ["external"] ],
[ 5001, 5003, "tcp", "iperf", local.n_all, ["external"] ],
[ 5001, 5003, "udp", "iperf", local.n_all, ["external"] ],

[ 1556, 1556, "tcp", "Netbackup", local.n_all, ["external"] ],
[ 13724, 13724, "tcp", "Netbackup", local.n_all, ["external"] ],
[ 13782, 13782, "tcp", "Netbackup", local.n_all, ["external"] ],

[ 1830, 1830, "tcp", "Oracle-OEM", ["10.193.8.0/23" ], ["external"]],

[ 1002, 1002, "tcp", "OPSware-Control", local.n_all, ["external"] ],
[ 9080, 9080, "tcp", "", [local.n_census[2] ], ["external"]],
[ 10082, 10082, "tcp", "", local.n_all, ["external"] ],
[ 10102, 10102, "tcp", "", local.n_all, ["external"] ],
]

# these are ignored
ingress_networks = var.ingress_networks
egress_networks = var.egress_networks

# these are ignored
ingress_sg = var.ingress_security_groups
egress_sg = var.egress_security_groups

p_fields = ["from", "to", "proto", "description", "cidr", "source_group"]
p_map = [for p in local.ports : zipmap(local.p_fields, p)]
port_map = { for s in local.source_groups :
s => [for p in local.p_map : p if contains(p["source_group"], s)]
}
}
83 changes: 83 additions & 0 deletions it-linux-base/variables.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
#---
# change between different modules as needed
#---
variable "name" {
description = "Security Group Name"
type = string
default = "it-linux-base"
}

variable "description" {
description = "Security Group Description"
type = string
default = "Linux Common Base Security Group"
}

variable "short_description" {
description = "Security Group Short Description"
type = string
default = "Linux"
}

variable "enable_self" {
description = "Enable|Disable self full access"
type = bool
default = false
}

variable "use_vpc_cidr" {
description = "Enable|Disable use of VPC CIDR block in the ingress_networks"
type = bool
default = false
}

#---
# others with defaults
#---
variable "vpc_id" {
description = "VPC ID Number"
type = string
}

data "aws_vpc" "selected" {
id = "${var.vpc_id}"
}

variable "vpc_full_name" {
description = "VPC Name"
type = string
default = ""
}

variable "ingress_networks" {
description = "List of ingress networks for external access (not all ports)"
type = list(string)
default = ["0.0.0.0/0"]
}

variable "egress_networks" {
description = "List of egress networks (all ports)"
type = list(string)
default = ["0.0.0.0/0"]
}

variable "ingress_security_groups" {
description = "List of ingress security groups for all ports"
type = list(string)
default = []
}

variable "egress_security_groups" {
description = "List of egress security groups (all ports)"
type = list(string)
default = []
}

variable "tags" {
description = "Extra security group tags"
type = map
default = {
"CostAllocation" = "csvd:infrastructure"
"Environment" = "csvd-infrastructure"
}
}
5 changes: 5 additions & 0 deletions it-linux-base/version.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
variable "_module_version" {
description = "Module version number"
type = string
default = "1.0"
}
4 changes: 4 additions & 0 deletions it-linux-base/versions.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@

terraform {
required_version = ">= 0.12"
}