73 lines
3.1 KiB
Terraform
73 lines
3.1 KiB
Terraform
# =============================================================================
|
|
# VAULT DATA SOURCES
|
|
# =============================================================================
|
|
|
|
data "vault_generic_secret" "cloudflare" {
|
|
path = var.vault_cloudflare_path
|
|
}
|
|
|
|
data "vault_generic_secret" "authentik" {
|
|
path = var.vault_authentik_path
|
|
}
|
|
|
|
# Secrets Azure Entra ID — lus uniquement si la brique IdP Azure est activée.
|
|
# ACTION EXTERNE : créer le secret "secret/azure" dans Vault avec les clés
|
|
# client_id_cloudflare / secret_cloudflare / directory_id, puis passer
|
|
# azure_idp_enabled = true dans variables.auto.tfvars
|
|
data "vault_generic_secret" "azure" {
|
|
count = var.azure_idp_enabled ? 1 : 0
|
|
path = var.vault_azure_path
|
|
}
|
|
|
|
# =============================================================================
|
|
# LOCALS
|
|
# =============================================================================
|
|
|
|
locals {
|
|
# Secrets Cloudflare depuis Vault
|
|
# NOTE : zone_id_org est l'identifiant hexadécimal de la zone (utilisé par
|
|
# les ressources DNS). Le NOM de domaine, lui, vient de var.cloudflare_zone.
|
|
# Ne jamais mélanger les deux : un hostname se construit avec le nom,
|
|
# jamais avec l'ID.
|
|
cloudflare_api_token = data.vault_generic_secret.cloudflare.data["api_token"]
|
|
cloudflare_account_id = data.vault_generic_secret.cloudflare.data["account_id"]
|
|
cloudflare_zone_id = data.vault_generic_secret.cloudflare.data["zone_id_org"]
|
|
cloudflare_email = data.vault_generic_secret.cloudflare.data["email"]
|
|
|
|
authentik_oidc_client_id_cloudflare = data.vault_generic_secret.authentik.data["client_id_cloudflare"]
|
|
authentik_oidc_secret_cloudflare = data.vault_generic_secret.authentik.data["secret_cloudflare"]
|
|
|
|
# Secrets Azure Entra ID depuis Vault (brique IdP Azure, optionnelle)
|
|
azure_oidc_client_id_cloudflare = var.azure_idp_enabled ? data.vault_generic_secret.azure[0].data["client_id_cloudflare"] : ""
|
|
azure_oidc_secret_cloudflare = var.azure_idp_enabled ? data.vault_generic_secret.azure[0].data["secret_cloudflare"] : ""
|
|
azure_directory_id = var.azure_idp_enabled ? data.vault_generic_secret.azure[0].data["directory_id"] : ""
|
|
|
|
# Construction des ingress rules pour toutes les applications
|
|
# CORRECTIF : le hostname est construit avec le NOM de la zone
|
|
# (var.cloudflare_zone = "tips-of-mine.org") et non plus avec l'ID de zone.
|
|
# Avec l'ancien code, les hostnames d'ingress ne correspondaient jamais aux
|
|
# enregistrements DNS créés dans Networks-Routes-cidr.tf.
|
|
ingress_rules = concat(
|
|
[
|
|
for app_name, app_config in var.applications : {
|
|
hostname = "${app_config.subdomain}.${var.cloudflare_zone}"
|
|
service = app_config.origin_url
|
|
origin_request = {
|
|
no_tls_verify = app_config.no_tls_verify
|
|
|
|
# Configuration Access si activée
|
|
access = app_config.access_enabled ? {
|
|
team_name = app_config.access_team_name
|
|
aud_tag = app_config.access_aud_tags
|
|
required = true
|
|
} : null
|
|
}
|
|
}
|
|
],
|
|
# Règle catch-all en dernier
|
|
[{
|
|
service = "http_status:404"
|
|
}]
|
|
)
|
|
}
|