[upcloud] Add firewall default deny policy and port allowlisting (#9058)
This commit is contained in:
parent
ce04fdde72
commit
0d32c0d92b
9 changed files with 305 additions and 4 deletions
|
@ -112,12 +112,26 @@ terraform destroy --var-file cluster-settings.tfvars \
|
|||
* `size`: The size of the additional disk in GB
|
||||
* `tier`: The tier of disk to use (`maxiops` is the only one you can choose atm)
|
||||
* `firewall_enabled`: Enable firewall rules
|
||||
* `firewall_default_deny_in`: Set the firewall to deny inbound traffic by default. Automatically adds UpCloud DNS server and NTP port allowlisting.
|
||||
* `firewall_default_deny_out`: Set the firewall to deny outbound traffic by default.
|
||||
* `master_allowed_remote_ips`: List of IP ranges that should be allowed to access API of masters
|
||||
* `start_address`: Start of address range to allow
|
||||
* `end_address`: End of address range to allow
|
||||
* `k8s_allowed_remote_ips`: List of IP ranges that should be allowed SSH access to all nodes
|
||||
* `start_address`: Start of address range to allow
|
||||
* `end_address`: End of address range to allow
|
||||
* `master_allowed_ports`: List of port ranges that should be allowed to access the masters
|
||||
* `protocol`: Protocol *(tcp|udp|icmp)*
|
||||
* `port_range_min`: Start of port range to allow
|
||||
* `port_range_max`: End of port range to allow
|
||||
* `start_address`: Start of address range to allow
|
||||
* `end_address`: End of address range to allow
|
||||
* `worker_allowed_ports`: List of port ranges that should be allowed to access the workers
|
||||
* `protocol`: Protocol *(tcp|udp|icmp)*
|
||||
* `port_range_min`: Start of port range to allow
|
||||
* `port_range_max`: End of port range to allow
|
||||
* `start_address`: Start of address range to allow
|
||||
* `end_address`: End of address range to allow
|
||||
* `loadbalancer_enabled`: Enable managed load balancer
|
||||
* `loadbalancer_plan`: Plan to use for load balancer *(development|production-small)*
|
||||
* `loadbalancers`: Ports to load balance and which machines to forward to. Key of this object will be used as the name of the load balancer frontends/backends
|
||||
|
|
|
@ -96,6 +96,8 @@ machines = {
|
|||
}
|
||||
|
||||
firewall_enabled = false
|
||||
firewall_default_deny_in = false
|
||||
firewall_default_deny_out = false
|
||||
|
||||
master_allowed_remote_ips = [
|
||||
{
|
||||
|
@ -111,6 +113,9 @@ k8s_allowed_remote_ips = [
|
|||
}
|
||||
]
|
||||
|
||||
master_allowed_ports = []
|
||||
worker_allowed_ports = []
|
||||
|
||||
loadbalancer_enabled = false
|
||||
loadbalancer_plan = "development"
|
||||
loadbalancers = {
|
||||
|
|
|
@ -24,8 +24,12 @@ module "kubernetes" {
|
|||
ssh_public_keys = var.ssh_public_keys
|
||||
|
||||
firewall_enabled = var.firewall_enabled
|
||||
firewall_default_deny_in = var.firewall_default_deny_in
|
||||
firewall_default_deny_out = var.firewall_default_deny_out
|
||||
master_allowed_remote_ips = var.master_allowed_remote_ips
|
||||
k8s_allowed_remote_ips = var.k8s_allowed_remote_ips
|
||||
master_allowed_ports = var.master_allowed_ports
|
||||
worker_allowed_ports = var.worker_allowed_ports
|
||||
|
||||
loadbalancer_enabled = var.loadbalancer_enabled
|
||||
loadbalancer_plan = var.loadbalancer_plan
|
||||
|
|
|
@ -228,6 +228,112 @@ resource "upcloud_firewall_rules" "master" {
|
|||
source_address_start = "0.0.0.0"
|
||||
}
|
||||
}
|
||||
|
||||
dynamic firewall_rule {
|
||||
for_each = var.master_allowed_ports
|
||||
|
||||
content {
|
||||
action = "accept"
|
||||
comment = "Allow access on this port"
|
||||
destination_port_end = firewall_rule.value.port_range_max
|
||||
destination_port_start = firewall_rule.value.port_range_min
|
||||
direction = "in"
|
||||
family = "IPv4"
|
||||
protocol = firewall_rule.value.protocol
|
||||
source_address_end = firewall_rule.value.end_address
|
||||
source_address_start = firewall_rule.value.start_address
|
||||
}
|
||||
}
|
||||
|
||||
dynamic firewall_rule {
|
||||
for_each = var.firewall_default_deny_in ? ["tcp", "udp"] : []
|
||||
|
||||
content {
|
||||
action = "accept"
|
||||
comment = "UpCloud DNS"
|
||||
destination_port_end = "53"
|
||||
destination_port_start = "53"
|
||||
direction = "in"
|
||||
family = "IPv4"
|
||||
protocol = firewall_rule.value
|
||||
source_address_end = "94.237.40.9"
|
||||
source_address_start = "94.237.40.9"
|
||||
}
|
||||
}
|
||||
|
||||
dynamic firewall_rule {
|
||||
for_each = var.firewall_default_deny_in ? ["tcp", "udp"] : []
|
||||
|
||||
content {
|
||||
action = "accept"
|
||||
comment = "UpCloud DNS"
|
||||
destination_port_end = "53"
|
||||
destination_port_start = "53"
|
||||
direction = "in"
|
||||
family = "IPv4"
|
||||
protocol = firewall_rule.value
|
||||
source_address_end = "94.237.127.9"
|
||||
source_address_start = "94.237.127.9"
|
||||
}
|
||||
}
|
||||
|
||||
dynamic firewall_rule {
|
||||
for_each = var.firewall_default_deny_in ? ["tcp", "udp"] : []
|
||||
|
||||
content {
|
||||
action = "accept"
|
||||
comment = "UpCloud DNS"
|
||||
destination_port_end = "53"
|
||||
destination_port_start = "53"
|
||||
direction = "in"
|
||||
family = "IPv6"
|
||||
protocol = firewall_rule.value
|
||||
source_address_end = "2a04:3540:53::1"
|
||||
source_address_start = "2a04:3540:53::1"
|
||||
}
|
||||
}
|
||||
|
||||
dynamic firewall_rule {
|
||||
for_each = var.firewall_default_deny_in ? ["tcp", "udp"] : []
|
||||
|
||||
content {
|
||||
action = "accept"
|
||||
comment = "UpCloud DNS"
|
||||
destination_port_end = "53"
|
||||
destination_port_start = "53"
|
||||
direction = "in"
|
||||
family = "IPv6"
|
||||
protocol = firewall_rule.value
|
||||
source_address_end = "2a04:3544:53::1"
|
||||
source_address_start = "2a04:3544:53::1"
|
||||
}
|
||||
}
|
||||
|
||||
dynamic firewall_rule {
|
||||
for_each = var.firewall_default_deny_in ? ["udp"] : []
|
||||
|
||||
content {
|
||||
action = "accept"
|
||||
comment = "NTP Port"
|
||||
destination_port_end = "123"
|
||||
destination_port_start = "123"
|
||||
direction = "in"
|
||||
family = "IPv4"
|
||||
protocol = firewall_rule.value
|
||||
source_address_end = "255.255.255.255"
|
||||
source_address_start = "0.0.0.0"
|
||||
}
|
||||
}
|
||||
|
||||
firewall_rule {
|
||||
action = var.firewall_default_deny_in ? "drop" : "accept"
|
||||
direction = "in"
|
||||
}
|
||||
|
||||
firewall_rule {
|
||||
action = var.firewall_default_deny_out ? "drop" : "accept"
|
||||
direction = "out"
|
||||
}
|
||||
}
|
||||
|
||||
resource "upcloud_firewall_rules" "k8s" {
|
||||
|
@ -265,6 +371,112 @@ resource "upcloud_firewall_rules" "k8s" {
|
|||
source_address_start = "0.0.0.0"
|
||||
}
|
||||
}
|
||||
|
||||
dynamic firewall_rule {
|
||||
for_each = var.worker_allowed_ports
|
||||
|
||||
content {
|
||||
action = "accept"
|
||||
comment = "Allow access on this port"
|
||||
destination_port_end = firewall_rule.value.port_range_max
|
||||
destination_port_start = firewall_rule.value.port_range_min
|
||||
direction = "in"
|
||||
family = "IPv4"
|
||||
protocol = firewall_rule.value.protocol
|
||||
source_address_end = firewall_rule.value.end_address
|
||||
source_address_start = firewall_rule.value.start_address
|
||||
}
|
||||
}
|
||||
|
||||
dynamic firewall_rule {
|
||||
for_each = var.firewall_default_deny_in ? ["tcp", "udp"] : []
|
||||
|
||||
content {
|
||||
action = "accept"
|
||||
comment = "UpCloud DNS"
|
||||
destination_port_end = "53"
|
||||
destination_port_start = "53"
|
||||
direction = "in"
|
||||
family = "IPv4"
|
||||
protocol = firewall_rule.value
|
||||
source_address_end = "94.237.40.9"
|
||||
source_address_start = "94.237.40.9"
|
||||
}
|
||||
}
|
||||
|
||||
dynamic firewall_rule {
|
||||
for_each = var.firewall_default_deny_in ? ["tcp", "udp"] : []
|
||||
|
||||
content {
|
||||
action = "accept"
|
||||
comment = "UpCloud DNS"
|
||||
destination_port_end = "53"
|
||||
destination_port_start = "53"
|
||||
direction = "in"
|
||||
family = "IPv4"
|
||||
protocol = firewall_rule.value
|
||||
source_address_end = "94.237.127.9"
|
||||
source_address_start = "94.237.127.9"
|
||||
}
|
||||
}
|
||||
|
||||
dynamic firewall_rule {
|
||||
for_each = var.firewall_default_deny_in ? ["tcp", "udp"] : []
|
||||
|
||||
content {
|
||||
action = "accept"
|
||||
comment = "UpCloud DNS"
|
||||
destination_port_end = "53"
|
||||
destination_port_start = "53"
|
||||
direction = "in"
|
||||
family = "IPv6"
|
||||
protocol = firewall_rule.value
|
||||
source_address_end = "2a04:3540:53::1"
|
||||
source_address_start = "2a04:3540:53::1"
|
||||
}
|
||||
}
|
||||
|
||||
dynamic firewall_rule {
|
||||
for_each = var.firewall_default_deny_in ? ["tcp", "udp"] : []
|
||||
|
||||
content {
|
||||
action = "accept"
|
||||
comment = "UpCloud DNS"
|
||||
destination_port_end = "53"
|
||||
destination_port_start = "53"
|
||||
direction = "in"
|
||||
family = "IPv6"
|
||||
protocol = firewall_rule.value
|
||||
source_address_end = "2a04:3544:53::1"
|
||||
source_address_start = "2a04:3544:53::1"
|
||||
}
|
||||
}
|
||||
|
||||
dynamic firewall_rule {
|
||||
for_each = var.firewall_default_deny_in ? ["udp"] : []
|
||||
|
||||
content {
|
||||
action = "accept"
|
||||
comment = "NTP Port"
|
||||
destination_port_end = "123"
|
||||
destination_port_start = "123"
|
||||
direction = "in"
|
||||
family = "IPv4"
|
||||
protocol = firewall_rule.value
|
||||
source_address_end = "255.255.255.255"
|
||||
source_address_start = "0.0.0.0"
|
||||
}
|
||||
}
|
||||
|
||||
firewall_rule {
|
||||
action = var.firewall_default_deny_in ? "drop" : "accept"
|
||||
direction = "in"
|
||||
}
|
||||
|
||||
firewall_rule {
|
||||
action = var.firewall_default_deny_out ? "drop" : "accept"
|
||||
direction = "out"
|
||||
}
|
||||
}
|
||||
|
||||
resource "upcloud_loadbalancer" "lb" {
|
||||
|
|
|
@ -49,6 +49,34 @@ variable "k8s_allowed_remote_ips" {
|
|||
}))
|
||||
}
|
||||
|
||||
variable "master_allowed_ports" {
|
||||
type = list(object({
|
||||
protocol = string
|
||||
port_range_min = number
|
||||
port_range_max = number
|
||||
start_address = string
|
||||
end_address = string
|
||||
}))
|
||||
}
|
||||
|
||||
variable "worker_allowed_ports" {
|
||||
type = list(object({
|
||||
protocol = string
|
||||
port_range_min = number
|
||||
port_range_max = number
|
||||
start_address = string
|
||||
end_address = string
|
||||
}))
|
||||
}
|
||||
|
||||
variable "firewall_default_deny_in" {
|
||||
type = bool
|
||||
}
|
||||
|
||||
variable "firewall_default_deny_out" {
|
||||
type = bool
|
||||
}
|
||||
|
||||
variable "loadbalancer_enabled" {
|
||||
type = bool
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ terraform {
|
|||
required_providers {
|
||||
upcloud = {
|
||||
source = "UpCloudLtd/upcloud"
|
||||
version = "~>2.4.0"
|
||||
version = "~>2.5.0"
|
||||
}
|
||||
}
|
||||
required_version = ">= 0.13"
|
||||
|
|
|
@ -96,6 +96,9 @@ machines = {
|
|||
}
|
||||
|
||||
firewall_enabled = false
|
||||
firewall_default_deny_in = false
|
||||
firewall_default_deny_out = false
|
||||
|
||||
|
||||
master_allowed_remote_ips = [
|
||||
{
|
||||
|
@ -111,6 +114,9 @@ k8s_allowed_remote_ips = [
|
|||
}
|
||||
]
|
||||
|
||||
master_allowed_ports = []
|
||||
worker_allowed_ports = []
|
||||
|
||||
loadbalancer_enabled = false
|
||||
loadbalancer_plan = "development"
|
||||
loadbalancers = {
|
||||
|
|
|
@ -79,6 +79,38 @@ variable "k8s_allowed_remote_ips" {
|
|||
default = []
|
||||
}
|
||||
|
||||
variable "master_allowed_ports" {
|
||||
description = "List of ports to allow on masters"
|
||||
type = list(object({
|
||||
protocol = string
|
||||
port_range_min = number
|
||||
port_range_max = number
|
||||
start_address = string
|
||||
end_address = string
|
||||
}))
|
||||
}
|
||||
|
||||
variable "worker_allowed_ports" {
|
||||
description = "List of ports to allow on workers"
|
||||
type = list(object({
|
||||
protocol = string
|
||||
port_range_min = number
|
||||
port_range_max = number
|
||||
start_address = string
|
||||
end_address = string
|
||||
}))
|
||||
}
|
||||
|
||||
variable "firewall_default_deny_in" {
|
||||
description = "Add firewall policies that deny all inbound traffic by default"
|
||||
default = false
|
||||
}
|
||||
|
||||
variable "firewall_default_deny_out" {
|
||||
description = "Add firewall policies that deny all outbound traffic by default"
|
||||
default = false
|
||||
}
|
||||
|
||||
variable "loadbalancer_enabled" {
|
||||
description = "Enable load balancer"
|
||||
default = false
|
||||
|
|
|
@ -3,7 +3,7 @@ terraform {
|
|||
required_providers {
|
||||
upcloud = {
|
||||
source = "UpCloudLtd/upcloud"
|
||||
version = "~>2.4.0"
|
||||
version = "~>2.5.0"
|
||||
}
|
||||
}
|
||||
required_version = ">= 0.13"
|
||||
|
|
Loading…
Reference in a new issue