mirror of
https://github.com/fleetdm/fleet
synced 2026-05-24 09:28:54 +00:00
241 lines
6.9 KiB
HCL
241 lines
6.9 KiB
HCL
data "aws_region" "current" {}
|
|
|
|
locals {
|
|
mdmproxy_secrets = {
|
|
MDMPROXY_AUTH_TOKEN = var.config.auth_token
|
|
MDMPROXY_MIGRATE_UDIDS = join(" ", var.config.migrate_udids)
|
|
}
|
|
}
|
|
|
|
resource "aws_security_group" "mdmproxy" {
|
|
count = var.config.networking.security_groups == null ? 1 : 0
|
|
name = var.config.networking.security_group_name
|
|
description = "Fleet ECS Service Security Group"
|
|
vpc_id = var.vpc_id
|
|
egress {
|
|
description = "Egress to all"
|
|
from_port = 0
|
|
to_port = 0
|
|
protocol = "-1"
|
|
cidr_blocks = ["0.0.0.0/0"]
|
|
ipv6_cidr_blocks = ["::/0"]
|
|
}
|
|
ingress {
|
|
description = "Ingress only on container port"
|
|
from_port = 8080
|
|
to_port = 8080
|
|
protocol = "TCP"
|
|
cidr_blocks = var.config.networking.ingress_sources.cidr_blocks
|
|
ipv6_cidr_blocks = var.config.networking.ingress_sources.ipv6_cidr_blocks
|
|
security_groups = concat(var.config.networking.ingress_sources.security_groups, [aws_security_group.alb.id])
|
|
prefix_list_ids = var.config.networking.ingress_sources.prefix_list_ids
|
|
}
|
|
}
|
|
|
|
module "alb" {
|
|
source = "terraform-aws-modules/alb/aws"
|
|
version = "8.3.0"
|
|
|
|
name = var.alb_config.name
|
|
|
|
load_balancer_type = "application"
|
|
|
|
vpc_id = var.vpc_id
|
|
subnets = var.alb_config.subnets
|
|
security_groups = concat(var.alb_config.security_groups, [aws_security_group.alb.id])
|
|
access_logs = var.alb_config.access_logs
|
|
idle_timeout = var.alb_config.idle_timeout
|
|
|
|
target_groups = concat([
|
|
{
|
|
name = var.alb_config.name
|
|
backend_protocol = "HTTP"
|
|
backend_port = 80
|
|
target_type = "ip"
|
|
health_check = {
|
|
path = "/healthz"
|
|
matcher = "200"
|
|
timeout = 10
|
|
interval = 15
|
|
healthy_threshold = 5
|
|
unhealthy_threshold = 5
|
|
}
|
|
}
|
|
], var.alb_config.extra_target_groups)
|
|
|
|
# Require TLS 1.2 as earlier versions are insecure
|
|
listener_ssl_policy_default = var.alb_config.tls_policy
|
|
|
|
https_listeners = [
|
|
{
|
|
port = 443
|
|
protocol = "HTTPS"
|
|
certificate_arn = var.alb_config.certificate_arn
|
|
target_group_index = 0
|
|
}
|
|
]
|
|
|
|
https_listener_rules = var.alb_config.https_listener_rules
|
|
|
|
http_tcp_listeners = [
|
|
{
|
|
port = 80
|
|
protocol = "HTTP"
|
|
action_type = "redirect"
|
|
redirect = {
|
|
port = "443"
|
|
protocol = "HTTPS"
|
|
status_code = "HTTP_301"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
|
|
resource "aws_security_group" "alb" {
|
|
#checkov:skip=CKV2_AWS_5:False positive
|
|
vpc_id = var.vpc_id
|
|
description = "Fleet-mdmproxy ALB Security Group"
|
|
ingress {
|
|
description = "Ingress from all, its a public load balancer"
|
|
from_port = 443
|
|
to_port = 443
|
|
protocol = "tcp"
|
|
cidr_blocks = var.alb_config.allowed_cidrs
|
|
ipv6_cidr_blocks = var.alb_config.allowed_ipv6_cidrs
|
|
}
|
|
|
|
ingress {
|
|
description = "For http to https redirect"
|
|
from_port = 80
|
|
to_port = 80
|
|
protocol = "tcp"
|
|
cidr_blocks = var.alb_config.allowed_cidrs
|
|
ipv6_cidr_blocks = var.alb_config.allowed_ipv6_cidrs
|
|
}
|
|
|
|
egress {
|
|
description = "Egress to all"
|
|
from_port = 0
|
|
to_port = 0
|
|
protocol = "-1"
|
|
cidr_blocks = var.alb_config.egress_cidrs
|
|
ipv6_cidr_blocks = var.alb_config.egress_ipv6_cidrs
|
|
}
|
|
}
|
|
|
|
resource "aws_secretsmanager_secret" "mdmproxy" {
|
|
name = "${var.customer_prefix}-mdmproxy"
|
|
}
|
|
|
|
resource "aws_secretsmanager_secret_version" "mdmproxy" {
|
|
secret_id = aws_secretsmanager_secret.mdmproxy.id
|
|
secret_string = jsonencode(local.mdmproxy_secrets)
|
|
}
|
|
|
|
resource "aws_ecs_service" "mdmproxy" {
|
|
name = "${var.customer_prefix}-mdmproxy"
|
|
launch_type = "FARGATE"
|
|
cluster = var.ecs_cluster
|
|
task_definition = aws_ecs_task_definition.mdmproxy.arn
|
|
desired_count = var.config.desired_count
|
|
deployment_minimum_healthy_percent = 100
|
|
deployment_maximum_percent = 200
|
|
force_new_deployment = true
|
|
|
|
triggers = {
|
|
redeployment = md5(jsonencode(aws_secretsmanager_secret_version.mdmproxy.secret_string))
|
|
}
|
|
|
|
load_balancer {
|
|
target_group_arn = module.alb.target_group_arns[0]
|
|
container_name = "mdmproxy"
|
|
container_port = 8080
|
|
}
|
|
|
|
lifecycle {
|
|
ignore_changes = [desired_count]
|
|
}
|
|
|
|
network_configuration {
|
|
subnets = var.config.networking.subnets
|
|
security_groups = var.config.networking.security_groups == null ? aws_security_group.mdmproxy.*.id : var.config.networking.security_groups
|
|
}
|
|
}
|
|
|
|
resource "aws_ecs_task_definition" "mdmproxy" {
|
|
family = "${var.customer_prefix}-mdmproxy"
|
|
cpu = var.config.cpu
|
|
memory = var.config.mem
|
|
execution_role_arn = aws_iam_role.execution.arn
|
|
network_mode = "awsvpc"
|
|
requires_compatibilities = ["FARGATE"]
|
|
|
|
container_definitions = jsonencode([
|
|
{
|
|
name = "mdmproxy"
|
|
image = var.config.image
|
|
cpu = var.config.cpu
|
|
memory = var.config.mem
|
|
essential = true
|
|
portMappings = [
|
|
{
|
|
# This port is the same that the contained application also uses
|
|
containerPort = 8080
|
|
protocol = "tcp"
|
|
}
|
|
]
|
|
networkMode = "awsvpc"
|
|
secrets = [
|
|
{
|
|
name = "MDMPROXY_AUTH_TOKEN"
|
|
valueFrom = "${aws_secretsmanager_secret.mdmproxy.arn}:MDMPROXY_AUTH_TOKEN::"
|
|
},
|
|
{
|
|
name = "MDMPROXY_MIGRATE_UDIDS"
|
|
valueFrom = "${aws_secretsmanager_secret.mdmproxy.arn}:MDMPROXY_MIGRATE_UDIDS::"
|
|
},
|
|
]
|
|
repositoryCredentials = var.config.repository_credentials
|
|
ulimits = [
|
|
{
|
|
name = "nofile"
|
|
softLimit = 999999
|
|
hardLimit = 999999
|
|
}
|
|
]
|
|
environment = [
|
|
{
|
|
name = "MDMPROXY_SERVER_ADDRESS"
|
|
value = ":8080"
|
|
},
|
|
{
|
|
name = "MDMPROXY_MIGRATE_PERCENTAGE"
|
|
value = tostring(var.config.migrate_percentage)
|
|
},
|
|
{
|
|
name = "MDMPROXY_EXISTING_HOSTNAME"
|
|
value = var.config.existing_hostname
|
|
},
|
|
{
|
|
name = "MDMPROXY_EXISTING_URL"
|
|
value = var.config.existing_url
|
|
},
|
|
{
|
|
name = "MDMPROXY_FLEET_URL"
|
|
value = var.config.fleet_url
|
|
},
|
|
]
|
|
logConfiguration = {
|
|
logDriver = "awslogs"
|
|
options = {
|
|
awslogs-group = var.awslogs_config.group
|
|
awslogs-region = var.awslogs_config.region == null ? data.aws_region.current.name : var.awslogs_config.region
|
|
awslogs-stream-prefix = "${var.awslogs_config.prefix}-mdmproxy"
|
|
}
|
|
}
|
|
}
|
|
])
|
|
}
|
|
|
|
|
|
|