summaryrefslogtreecommitdiff
path: root/terraform/dns.tf
diff options
context:
space:
mode:
Diffstat (limited to 'terraform/dns.tf')
-rw-r--r--terraform/dns.tf113
1 files changed, 113 insertions, 0 deletions
diff --git a/terraform/dns.tf b/terraform/dns.tf
new file mode 100644
index 0000000..dbecdac
--- /dev/null
+++ b/terraform/dns.tf
@@ -0,0 +1,113 @@
+locals {
+ zone_ids = [var.cloudflare_getchoo_com_zone_id]
+
+ dmarc_hardening_records = [
+ {
+ name = "_dmarc"
+ type = "TXT"
+ content = "v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s;"
+ },
+ {
+ name = "*._domainkey"
+ type = "TXT"
+ content = "v=DKIM1; p="
+ },
+ {
+ name = "@"
+ type = "TXT"
+ content = "v=spf1 -all"
+ }
+ ]
+
+ dmarc_records = flatten([for zone_id in local.zone_ids : [
+ for record in local.dmarc_hardening_records : {
+ zone_id = zone_id
+ name = record.name
+ type = record.type
+ content = record.content
+ }
+ ]])
+
+ getchoo_tunnels = data.cloudflare_zero_trust_tunnel_cloudflared.getchoo_tunnels
+ getchoo_records = [
+ {
+ name = "@"
+ type = "CNAME"
+ content = resource.cloudflare_pages_project.getchoo_website.subdomain
+ },
+ {
+ name = "www"
+ type = "CNAME"
+ content = "getchoo.com"
+ },
+ {
+ name = "api"
+ type = "CNAME"
+ content = resource.cloudflare_pages_project.teawie_api.subdomain
+ },
+ {
+ name = "miniflux"
+ type = "CNAME"
+ content = "${local.getchoo_tunnels["atlas-nginx"].id}.cfargotunnel.com"
+ },
+ {
+ name = "git"
+ type = "CNAME"
+ content = "${local.getchoo_tunnels["atlas-nginx"].id}.cfargotunnel.com"
+ },
+ {
+ name = "@"
+ content = "$argon2id$v=19$m=512,t=256,p=1$AlA6W5fP7J14zMsw0W5KFQ$EQz/NCE0/TQpE64r2Eo/yOpjtMZ9WXevHsv3YYP7CXg"
+ type = "TXT"
+ }
+ ]
+}
+
+data "cloudflare_zero_trust_tunnel_cloudflared" "getchoo_tunnels" {
+ for_each = toset(["atlas-nginx"])
+
+ account_id = var.cloudflare_account_id
+ name = each.key
+}
+
+resource "cloudflare_record" "getchoo_com" {
+ for_each = { for record in local.getchoo_records : "${record.name}-${record.type}" => record }
+
+ zone_id = var.cloudflare_getchoo_com_zone_id
+ name = each.value.name
+ type = each.value.type
+ content = each.value.content
+}
+
+resource "cloudflare_record" "dmarc_hardening" {
+ for_each = { for record in local.dmarc_records : "${record.zone_id}-${record.name}" => record }
+
+ zone_id = each.value.zone_id
+ name = each.value.name
+ type = each.value.type
+ content = each.value.content
+}
+
+resource "cloudflare_authenticated_origin_pulls" "origins" {
+ for_each = toset([var.cloudflare_getchoo_com_zone_id])
+
+ zone_id = each.key
+ enabled = true
+}
+
+resource "cloudflare_zone_dnssec" "zones" {
+ for_each = toset([var.cloudflare_getchoo_com_zone_id])
+
+ zone_id = each.key
+}
+
+resource "cloudflare_zone_settings_override" "strict_ssl" {
+ for_each = toset([var.cloudflare_getchoo_com_zone_id])
+
+ zone_id = each.key
+
+ settings {
+ always_use_https = "on"
+ ssl = "strict"
+ }
+}