diff --git a/.envrc b/.envrc index 4a602062..7ef2e518 100644 --- a/.envrc +++ b/.envrc @@ -12,7 +12,6 @@ export_sops_secret() { fi } -export_sops_secret CLOUDFLARE_API_TOKEN secrets/cloudflare.yaml '["api_token"]' export_sops_secret HCLOUD_TOKEN secrets/hetzner.yaml '["api_token"]' # Terraform's s3 backend (pointing at B2) reads these. diff --git a/secrets/cloudflare.yaml b/secrets/cloudflare.yaml deleted file mode 100644 index 42a1adaf..00000000 --- a/secrets/cloudflare.yaml +++ /dev/null @@ -1,106 +0,0 @@ -api_token: ENC[AES256_GCM,data:EKzhZQQ7yzYX7Hvh4AiKEIcsIX1VsDTvP724O3wu3HM8E19fOBsVIiEKrFNaBtbvDFQwcIE=,iv:5pyEhfO0o7Mzg8P4LkCqzBhke4/Xe39e8v2ssswXx04=,tag:BPCBXeNIu+BGpqO6ySG8Pw==,type:str] -sops: - age: - - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnYUlSWjlQVzFNSHoyS2o4 - bEQwOHhqNWFmSVA3L005eDFxOGV4UDJpeHdZClhCVFhLZnVua1lZV3ZBVWJHbEd5 - VFA3WkNPRjlkbkFIRDYrNDYweHc1azQKLS0tIHZUZnpaZGVkN1pRN0QxeHkwVVN2 - aERCV0diNElxa1RFNlN6OTNOTnRPUGsKY3EVEHs/scx/nFVV57fWfj9kZijWl9/y - K46CLnhKzkqc2k47nFtCYzeJm74s7XbbK7fezYPra2V+AkognzHCyQ== - -----END AGE ENCRYPTED FILE----- - recipient: age1kny9hv9t64ge379mk977slfx8deqy3df0c4cydh0lxu4ffczkftqpe2x6g - - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBPNzcxeUpqR0g5SXVzYUg0 - K1N2UFdqdytReHVLb0xxWEZjRkpxK0NvMFVNCjFnS01LVmhtR3NZaktNS21zd29t - M2ZqeHRuM2R3WEcxVWFNMEJXUnZQbEkKLS0tIDJPbE1zUTlnTTVINXJzOTVJWVhO - QjJCTXF0RlNtdk54WndUSkdZbDlITTAKGXcqW9XugwtMxx1b0m8qqFSxmJotTfz4 - wMpKIZVVCw6UXpkRhGvNFJ5uLUsJOymipiwvyAaqpWzwLE6YzWgEIQ== - -----END AGE ENCRYPTED FILE----- - recipient: age1e5a0aaueyk34klry2qk094zrwfsvga0uft93mwweye30xhqhvfzs3jgqku - - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIMTZ2Y1A3NEpDQzlxaGxD - Ymx5bitCblpQUFVicnVGNmF3NlRmSHZIRkhRCllka3lHOVJYVHUxVFdRZ1pTNlpw - U1htY0tNODJjTHJZN2FhS2RmWW55RjgKLS0tIHZObFpGMk5sRnRrbGYzUjY5MGhT - cVNBZXFpUE1WV2JzcXExWlZJZmpNMkkKptYKZJQ6wnWcpIhEQAs9qNzlRm6Lyejz - Y2fMFKlps1SvDIBuaRMPpUQ05KQK/XI+hDzxZvh7YKCZA9bK6qsj6A== - -----END AGE ENCRYPTED FILE----- - recipient: age1j9jju3whwj72udhge7v4c77gk6v6w2cq8zjngzyppwtptfsz499qyywu9a - - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGMzhxNmx0YTJCdGZpTVVw - Y0pHN1dxZnBJWkZRckczRnJibk5mZlAyVGdBCkJQM3kyR1M3RmxDV1dSOFcwK0Fh - RFF4SGUyb3ExWjhjOFlUS3RqTm5uOXcKLS0tIHYxdWxnQ1BuZzNnajdoZHFJY1NY - c3FOMk5hSHRGTUZZNXp0N0JRWnJqYUkKKoCqstNPdyjXQAafA+yb1RsAil3DZJ4W - wKdmkg3vqWGkrilrAaeZw21ReoF0hDJ3EHqkw3yZwK2ddt9bwQ+FMA== - -----END AGE ENCRYPTED FILE----- - recipient: age162sx8kppp90mjxw88eqs78hgnpkddf8k9kgtksmmexzvcdxknpkspmkgaf - - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuTloveGdwZmlscmxYNVBX - YmxWZW1UdFkrbGJrQ2UvcGc2NzdZcUFibW5zCmRvbVJ3dTVSWDF3VGMwc0RaZXAz - QzJma2h6bGRvMUlhWE9venBGVlR2aTgKLS0tIDd4VkNTQjRiU1RoUDAvSHdsM2cw - RnZiYmFKa0VRbndhQy9OMHE4U1ZUaDgKHuwVTVGN3F5Om079qJCVhWNyxDSHSB6Y - pxRmuJzrTofx7RRxCHX1XUtIcy87ee6HXmewZ+/h5D+siMSWd84tFw== - -----END AGE ENCRYPTED FILE----- - recipient: age1hhvzccxzrysq6ak2ktuks00vy3smr6rhey9swhncq8850epftpjqt3c7f3 - - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2Q2orRkVyM05GTmgydWQr - bEhhbW9RNnpLd2FpLzNPOUFqRlBCdkpzYm1NCnhRbnJzR3pLNndKQ1JsemtydXAw - Zll2Tjh0MkFrVVVHcWM3OGl4WjUySTgKLS0tIE9aNGdkY2laMU5jN3JndXZsMnZQ - eTZiSW1KU1hGcFJEenozQjMvWTZhaWcK92CEFBmjxkRzFKGsu1H7wL/S/Xe+RyHp - vKlgw35n+m6BpEASXN4gkkBFrHJD0VxHMf9c1QISr0bf4GMz9vOzUw== - -----END AGE ENCRYPTED FILE----- - recipient: age1zj2aq2a2v3ngcer7s3jz6pufhh8ula8pw56etmy28dy25wrkk3vq59hu2s - - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBEc0xGVVU1ODEzVE4rQzBB - RTZtbDJZNzZST0pKV1Fwc0RxelhhdnlCRkdRCjdieFB3RmQ4NXU3KzFGL2g4UmRr - aUpKYjdMbFQxMC9vREdRY29hWGNiaDgKLS0tIEdDYjRzNmFPNXpxZVlnYS9YMEdN - OE5xcmxlSlpOOWVyUWNDbVZOcVVxeWsK4ljHA5xfsIPjmzpQce2n7fJwHWzl+vU+ - SIiy54hrTxncL8bKgMlOAS38U4ajV+VbClcoyx4bi8M0/MaIWeMMjw== - -----END AGE ENCRYPTED FILE----- - recipient: age15td0jk5e2qeq2pexvxguhuuaxuaa7nhql7mhx9jr79caska6t4pqdv5spl - - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvSHZ5N0IwSkI1YVphdFl0 - d1p2d3VhUXZ4dGVwT1NUTjNBME9CMTZDRXdNCjYxWk8yaDVGakJ6ZHltblVDY0o5 - N0xKZWI1bjZnN0IzMFRtTGdqaTBNRlkKLS0tIHBEOCs2TUVsMmtaOC85RU5iaCtm - aWNGZ2ZxQ05jMjRQcGFhcUFqQVpRUU0KWumv2vL7EmbXw0DLOAg0kDX8qapFAJsm - HiNPxubf4Nqm+EmtkJ1GOZUpYyEHrGTIw48R4YUvTOs6i0jJHBo52Q== - -----END AGE ENCRYPTED FILE----- - recipient: age157en2pt286a22pxzyugt84ak6rn2at89tpma88juqfgj84lme5csq4999g - - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvMlUveHVyKzlQcnlsVWto - b09nYjJ1RTdjSmxsWnNaWjVMVHpKRVZNeEhZCi9xb0tQVklKUzM5SzFwbTFvaEpW - bnp4bEZaak1WTzZCL0ZOODBSSkFlQ2sKLS0tIG1PRlBvclptMEdMbU1mNXFTOGNM - cUZwNEtFRE1OZngzT2U2UUlYaStHWWcKyKGBQkx6G0KMDkxjU6YFx55BRd+HpRwT - Kp1tq6CCYeUCubrUvWmW+rXEr2Xyan/ybsFcB5Wmm2dnezpWypBS+Q== - -----END AGE ENCRYPTED FILE----- - recipient: age1xwlrtfu3du4jxg2l6eemzqeed8tflhdkjn0q5j9pzpecshtp3cpsh60l4j - - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaY0tlaHBocGliY2lMNUhk - S1BSSExadDVpU2lOOGVzUU4wVEFaVG43RlJrCkVqYkNDV0NvL1hxMWp1ZFI5UHgz - Ri8xZWYrdXgyWTlxNi9KTmhSTnZCSVUKLS0tIGpoSVZkK3NsUUI4bmp0RVgyNmFV - NERkMUthMGFsaHE1Q3RmbzlYbXNlLzQKMcqHbVyZgpU8jys962WA+M5rQgl+pZl+ - URZUyMN1SkGwLOD6u5CaVIIYD+GRNp+6QT/zsyLMF8bwg9ZOn2hOJw== - -----END AGE ENCRYPTED FILE----- - recipient: age1kgp3x48wn0dmzwqp0vdpfsdw42rej0ypkj0qavs7c2t2tgdud5zqcmhl40 - - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3UHVwQnJaTlpoY20rUEUv - Vmo1MWw4b3dtVEI4U0g3Wm0vUGV0QTd3RVZJClhnU2JRSnRYdGpLUDdTTTBQOFNF - eE4xWkJDRGhNSktic0RaRkQ0QWxYUWcKLS0tIDZCeU01TkppYmFkUmZlS1NFSG1n - KzFQQmR2dHkrR3hISDhxdlRheFV0dTgKZVssNo5PXxZmXSmGqpPxebVwEZgg8FAm - Xr3W5d8i/ub9cNwlDtdu7wok9btmV5pVqH6mIdyqvafPmjZu+FuFIw== - -----END AGE ENCRYPTED FILE----- - recipient: age1stsuakfyj3gkee4sm328ky2crmymyuzwjjmxrpvnm754sdt2zvnshf68jx - lastmodified: "2026-05-10T23:22:40Z" - mac: ENC[AES256_GCM,data:PHYHynQNxkXMg+Ts1KW7aVjYqrdSfPxYFmc2TNARZFD0lD6eElJvTaHDUXimsAH8vZmD1RxN8hF/wH6/JLuHF6562YlfktScDwAa1DW/FBLnhpYD/lvNNL7z1spdJHI6JKnVsq/TQtjzmEpGFN9vzrBJPjuDBX1b8i/IFjJ2+P0=,iv:3WC4sGoYPptwpsSydS+lNrf1zeijDd0hruKtIpkH4Qg=,tag:aVVIH2CwGAu010BQAUQglA==,type:str] - unencrypted_suffix: _unencrypted - version: 3.13.0 diff --git a/terraform/aly_codes.tf b/terraform/aly_codes.tf deleted file mode 100644 index 46f96a8b..00000000 --- a/terraform/aly_codes.tf +++ /dev/null @@ -1,103 +0,0 @@ -locals { - aly_codes_public_hosts = toset([ - "aly.codes", - "switchyard.aly.codes", - ]) - aly_codes_fm_dkim = toset(["fm1", "fm2", "fm3"]) -} - -resource "cloudflare_dns_record" "aly_codes_a" { - for_each = local.aly_codes_public_hosts - zone_id = local.zones.aly_codes - name = each.value - type = "A" - content = local.hosts.sunnyshore - proxied = true - ttl = 1 - tags = [] - settings = {} -} - -resource "cloudflare_dns_record" "aly_codes_fm_dkim_cname" { - for_each = local.aly_codes_fm_dkim - zone_id = local.zones.aly_codes - name = "${each.value}._domainkey.aly.codes" - type = "CNAME" - content = "${each.value}.aly.codes.dkim.fmhosted.com" - proxied = false - ttl = 1 - tags = [] - settings = { - flatten_cname = false - } -} - -resource "cloudflare_dns_record" "aly_codes_www_cname" { - zone_id = local.zones.aly_codes - name = "www.aly.codes" - type = "CNAME" - content = "aly.codes" - proxied = true - ttl = 1 - tags = [] - settings = { - flatten_cname = false - } -} - -resource "cloudflare_dns_record" "aly_codes_apex_mx_10" { - zone_id = local.zones.aly_codes - name = "aly.codes" - type = "MX" - content = "in1-smtp.messagingengine.com" - priority = 10 - proxied = false - ttl = 1 - tags = [] - settings = {} -} - -resource "cloudflare_dns_record" "aly_codes_apex_mx_20" { - zone_id = local.zones.aly_codes - name = "aly.codes" - type = "MX" - content = "in2-smtp.messagingengine.com" - priority = 20 - proxied = false - ttl = 1 - tags = [] - settings = {} -} - -resource "cloudflare_dns_record" "aly_codes_apex_google_verify_txt" { - zone_id = local.zones.aly_codes - name = "aly.codes" - type = "TXT" - content = "\"google-site-verification=_mw84PWITYHkgikw4hTBScr1lWnQzh761cnrb6Uviyo\"" - proxied = false - ttl = 3600 - tags = [] - settings = {} -} - -resource "cloudflare_dns_record" "aly_codes_apex_spf_txt" { - zone_id = local.zones.aly_codes - name = "aly.codes" - type = "TXT" - content = "\"v=spf1 include:spf.messagingengine.com ?all\"" - proxied = false - ttl = 1 - tags = [] - settings = {} -} - -resource "cloudflare_dns_record" "aly_codes_atproto_txt" { - zone_id = local.zones.aly_codes - name = "_atproto.aly.codes" - type = "TXT" - content = "\"did=did:plc:zntngpowgd6rorjt3haywj36\"" - proxied = false - ttl = 1 - tags = [] - settings = {} -} diff --git a/terraform/aly_social.tf b/terraform/aly_social.tf deleted file mode 100644 index c5fa7dcd..00000000 --- a/terraform/aly_social.tf +++ /dev/null @@ -1,66 +0,0 @@ -resource "cloudflare_dns_record" "aly_social_wildcard_a" { - zone_id = local.zones.aly_social - name = "*.aly.social" - type = "A" - content = local.hosts.sunnyshore - proxied = false - ttl = 1 - tags = [] - settings = {} -} - -resource "cloudflare_dns_record" "aly_social_apex_a" { - zone_id = local.zones.aly_social - name = "aly.social" - type = "A" - content = local.hosts.sunnyshore - proxied = true - ttl = 1 - tags = [] - settings = {} -} - -resource "cloudflare_dns_record" "aly_social_send_mx" { - zone_id = local.zones.aly_social - name = "send.aly.social" - type = "MX" - content = "feedback-smtp.us-east-1.amazonses.com" - priority = 10 - proxied = false - ttl = 3600 - tags = [] - settings = {} -} - -resource "cloudflare_dns_record" "aly_social_ruffruff_atproto_txt" { - zone_id = local.zones.aly_social - name = "_atproto.ruffruff.aly.social" - type = "TXT" - content = "\"did=did:plc:j4l6qmi2jja32k7q2zojm3fc\"" - proxied = false - ttl = 1 - tags = [] - settings = {} -} - -resource "cloudflare_dns_record" "aly_social_resend_dkim_txt" { - zone_id = local.zones.aly_social - name = "resend._domainkey.aly.social" - type = "TXT" - content = "\"p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDX9mensVJFS5Tkyt8Cg4AD5aExHJrg4Ne1Qs5vZXWr2yVZwqJMtpUjli7QcvKtGWdqAXu0yy6/lmjB17ertZ5l1kI3f8wFBxeO2bEM3cu+F88vJBOoboPyUhH8j+tO0SAip5NAdkf0jC/+D4NFemi4rgEeWbk1XdgMk5VTUtuWhQIDAQAB\"" - proxied = false - ttl = 3600 - tags = [] - settings = {} -} - -resource "cloudflare_dns_record" "aly_social_send_spf_txt" { - zone_id = local.zones.aly_social - name = "send.aly.social" - type = "TXT" - content = "\"v=spf1 include:amazonses.com -all\"" - proxied = false - ttl = 3600 - tags = [] - settings = {} -} diff --git a/terraform/cute_haus.tf b/terraform/cute_haus.tf deleted file mode 100644 index 4af2994b..00000000 --- a/terraform/cute_haus.tf +++ /dev/null @@ -1,151 +0,0 @@ -locals { - cute_haus_ingress = { - "auth-navidrome.cute.haus" = true - "collabora.cute.haus" = false - "cute.haus" = true - "immich.cute.haus" = false - "kuma.cute.haus" = true - "navidrome.cute.haus" = true - "nextcloud.cute.haus" = false - "paperless.cute.haus" = false - "photoprism.cute.haus" = false - "seerr.cute.haus" = true - "slingshot.cute.haus" = true - } - - cute_haus_johto_ingress = toset([ - "collabora.cute.haus", - "cute.haus", - "immich.cute.haus", - "nextcloud.cute.haus", - "paperless.cute.haus", - "kuma.cute.haus", - ]) -} - -moved { - from = cloudflare_dns_record.cute_haus_a["id.cute.haus"] - to = cloudflare_dns_record.cute_haus_id -} - -moved { - from = cloudflare_dns_record.cute_haus_a["vault.cute.haus"] - to = cloudflare_dns_record.cute_haus_vault -} - -moved { - from = cloudflare_dns_record.cute_haus_a["pds.cute.haus"] - to = cloudflare_dns_record.cute_haus_pds -} - -moved { - from = cloudflare_dns_record.cute_haus_a["ombi.cute.haus"] - to = cloudflare_dns_record.cute_haus_ombi -} - -moved { - from = cloudflare_dns_record.cute_haus_a["plex.cute.haus"] - to = cloudflare_dns_record.cute_haus_plex -} - -resource "cloudflare_dns_record" "cute_haus_a" { - for_each = local.cute_haus_ingress - zone_id = local.zones.cute_haus - name = each.key - type = "A" - content = contains(local.cute_haus_johto_ingress, each.key) ? local.hosts.olivine : local.hosts.pastoria - proxied = each.value - ttl = 1 - tags = [] - settings = {} -} - -resource "cloudflare_dns_record" "cute_haus_id" { - zone_id = local.zones.cute_haus - name = "id.cute.haus" - type = "A" - content = local.hosts.sunnyshore - proxied = true - ttl = 1 - tags = [] - settings = {} -} - -resource "cloudflare_dns_record" "cute_haus_vault" { - zone_id = local.zones.cute_haus - name = "vault.cute.haus" - type = "A" - content = local.hosts.sunnyshore - proxied = true - ttl = 1 - tags = [] - settings = {} -} - -resource "cloudflare_dns_record" "cute_haus_pds" { - zone_id = local.zones.cute_haus - name = "pds.cute.haus" - type = "A" - content = local.hosts.sunnyshore - proxied = false - ttl = 1 - tags = [] - settings = {} -} - -resource "cloudflare_dns_record" "cute_haus_ombi" { - zone_id = local.zones.cute_haus - name = "ombi.cute.haus" - type = "A" - content = local.hosts.olivine - proxied = true - ttl = 1 - tags = [] - settings = {} -} - -resource "cloudflare_dns_record" "cute_haus_plex" { - zone_id = local.zones.cute_haus - name = "plex.cute.haus" - type = "A" - content = local.hosts.olivine - proxied = false - ttl = 1 - tags = [] - settings = {} -} - -resource "cloudflare_dns_record" "cute_haus_www_cname" { - zone_id = local.zones.cute_haus - name = "www.cute.haus" - type = "CNAME" - content = "cute.haus" - proxied = false - ttl = 1 - tags = [] - settings = { - flatten_cname = false - } -} - -resource "cloudflare_dns_record" "cute_haus_atproto_txt" { - zone_id = local.zones.cute_haus - name = "_atproto.cute.haus" - type = "TXT" - content = "\"did=did:plc:rkos3laovknh53dwtdguu27n\"" - proxied = false - ttl = 1 - tags = [] - settings = {} -} - -resource "cloudflare_dns_record" "cute_haus_apex_google_verify_txt" { - zone_id = local.zones.cute_haus - name = "cute.haus" - type = "TXT" - content = "\"google-site-verification=jN1nPjBAhwmZKG9jNUV631cEC_k7rZhlQxncMablr-E\"" - proxied = false - ttl = 3600 - tags = [] - settings = {} -} diff --git a/terraform/locals.tf b/terraform/locals.tf deleted file mode 100644 index 49a171c0..00000000 --- a/terraform/locals.tf +++ /dev/null @@ -1,16 +0,0 @@ -locals { - hosts = { - canalave = "40.160.83.153" - olivine = "51.81.32.154" - pastoria = "51.81.87.134" - snowpoint = "152.53.90.225" - sunnyshore = "40.160.83.152" - } - - zones = { - aly_codes = "a6ac528f39180d8f53576a187feeba7f" - aly_social = "459ec51183a74a521f7003d46fbf2922" - cute_haus = "da917f09e4e07e4c5530704004f863c2" - morsels_blue = "d983d1ec759d3a8cfee30d1c8a6e8603" - } -} diff --git a/terraform/morsels_blue.tf b/terraform/morsels_blue.tf deleted file mode 100644 index 066b0f15..00000000 --- a/terraform/morsels_blue.tf +++ /dev/null @@ -1,34 +0,0 @@ -resource "cloudflare_dns_record" "morsels_blue_apex_a" { - zone_id = local.zones.morsels_blue - name = "morsels.blue" - type = "A" - content = local.hosts.sunnyshore - proxied = true - ttl = 1 - tags = [] - settings = {} -} - -resource "cloudflare_dns_record" "morsels_blue_www_cname" { - zone_id = local.zones.morsels_blue - name = "www.morsels.blue" - type = "CNAME" - content = "morsels.blue" - proxied = true - ttl = 1 - tags = [] - settings = { - flatten_cname = false - } -} - -resource "cloudflare_dns_record" "morsels_blue_atproto_txt" { - zone_id = local.zones.morsels_blue - name = "_atproto.morsels.blue" - type = "TXT" - content = "\"did=did:plc:5hcxt353s5by5orpkbzs73so\"" - proxied = false - ttl = 1 - tags = [] - settings = {} -} diff --git a/terraform/providers.tf b/terraform/providers.tf index fa2727ff..cfff4f26 100644 --- a/terraform/providers.tf +++ b/terraform/providers.tf @@ -6,10 +6,6 @@ terraform { source = "Backblaze/b2" version = "~> 0.13" } - cloudflare = { - source = "cloudflare/cloudflare" - version = "~> 5.0" - } tailscale = { source = "tailscale/tailscale" version = "~> 0.29" @@ -43,10 +39,6 @@ terraform { } } -provider "cloudflare" { - # Reads CLOUDFLARE_API_TOKEN from the environment. -} - provider "b2" { # Reads B2_APPLICATION_KEY_ID and B2_APPLICATION_KEY from the environment. }