last update to day 24-11-25
All checks were successful
Terraform Apply / Terraform Apply (push) Successful in 4m36s
Update Domain List / auto-update (push) Successful in 10s

This commit is contained in:
2025-11-24 20:47:56 +01:00
parent c6b46d00e1
commit 40739b1cc3
5 changed files with 45 additions and 15 deletions

View File

@@ -91,8 +91,12 @@ resource "cloudflare_zero_trust_access_application" "cloudflare_aws_app_rdp_doma
# APPLICATION SELF-HOSTED : Contrôleur de Domaine (GCP) # APPLICATION SELF-HOSTED : Contrôleur de Domaine (GCP)
#====================================================== #======================================================
# ------------------------------------------------------
# Création de la cible RDP côté GCP # Création de la cible RDP côté GCP
# Identique au bloc AWS mais appliqué à une VM Windows hébergée dans GCP. # Cette ressource déclare un "infrastructure target" Cloudflare Zero Trust,
# permettant de définir une machine interne comme destination d'un accès RDP.
# Le nom dhôte et ladresse IP interne de la VM Windows sont fournis via les variables Terraform.
# ------------------------------------------------------
resource "cloudflare_zero_trust_access_infrastructure_target" "gcp_rdp_target" { resource "cloudflare_zero_trust_access_infrastructure_target" "gcp_rdp_target" {
account_id = local.cloudflare_account_id account_id = local.cloudflare_account_id
@@ -104,8 +108,11 @@ resource "cloudflare_zero_trust_access_infrastructure_target" "gcp_rdp_target" {
} }
} }
# ------------------------------------------------------
# Application RDP rendue dans le navigateur pour le Contrôleur de Domaine GCP # Application RDP rendue dans le navigateur pour le Contrôleur de Domaine GCP
# Permet l'accès RDP navigateur via Cloudflare Zero Trust pour la VM Windows dans GCP. # Cette ressource crée l'application Zero Trust permettant laccès RDP via Cloudflare,
# directement dans le navigateur, sans client local. Elle sappuie sur la cible déclarée ci-dessus.
# ------------------------------------------------------
resource "cloudflare_zero_trust_access_application" "cloudflare_gcp_app_rdp_domain" { resource "cloudflare_zero_trust_access_application" "cloudflare_gcp_app_rdp_domain" {
account_id = local.cloudflare_account_id account_id = local.cloudflare_account_id

View File

@@ -3,10 +3,15 @@
# ============================================================================= # =============================================================================
#====================================================== #======================================================
# INFRASTRUCTURE Application: Test Home Network Access # APPLICATION SELF-HOSTED : Accès réseau privé (Home Network Access)
#====================================================== #======================================================
# # ------------------------------------------------------
# Déclaration dune application Self-Hosted utilisée pour accéder à une
# ressource interne du réseau domestique. Cette application est publiée via Cloudflare
# et protégée par Zero Trust. Le domaine défini permet daccéder à lapplication
# via une URL publique, mais lauthentification Cloudflare reste obligatoire
# ------------------------------------------------------
resource "cloudflare_zero_trust_access_application" "zero_trust_access_application" { resource "cloudflare_zero_trust_access_application" "zero_trust_access_application" {
account_id = local.cloudflare_account_id account_id = local.cloudflare_account_id
@@ -17,12 +22,17 @@ resource "cloudflare_zero_trust_access_application" "zero_trust_access_applicati
skip_interstitial = true skip_interstitial = true
tags = [cloudflare_zero_trust_access_tag.tags["engineers"].name] tags = [cloudflare_zero_trust_access_tag.tags["engineers"].name]
# Dépend de la création des tags pour assurer qu'ils existent avant l'association
depends_on = [ depends_on = [
cloudflare_zero_trust_access_tag.tags cloudflare_zero_trust_access_tag.tags
] ]
} }
# # ------------------------------------------------------
# Extraction des informations de lapplication Self-hosted créée ci-dessus.
# Cela permet de récupérer dynamiquement certaines valeurs internes (ID, etc.)
# utiles dans dautres ressources Terraform.
# ------------------------------------------------------
data "cloudflare_zero_trust_access_application" "zero_trust_access_application" { data "cloudflare_zero_trust_access_application" "zero_trust_access_application" {
account_id = local.cloudflare_account_id account_id = local.cloudflare_account_id
@@ -30,10 +40,14 @@ data "cloudflare_zero_trust_access_application" "zero_trust_access_application"
} }
#====================================================== #======================================================
# SELF-HOSTED APP: Competition App # APPLICATION SELF-HOSTED : Application de Compétition
#====================================================== #======================================================
# Creating the Self-hosted Application for Competition web application # ------------------------------------------------------
# Création de lapplication web de compétition protégée par Cloudflare Zero Trust.
# Cette application est hébergée sur un domaine public mais son accès est
# strictement contrôlé via authentification (OIDC) et politiques daccès.
# ------------------------------------------------------
resource "cloudflare_zero_trust_access_application" "cloudflare_app_web_competition" { resource "cloudflare_zero_trust_access_application" "cloudflare_app_web_competition" {
account_id = local.cloudflare_account_id account_id = local.cloudflare_account_id
@@ -46,27 +60,33 @@ resource "cloudflare_zero_trust_access_application" "cloudflare_app_web_competit
custom_deny_url = "https://denied.tips-of-mine.org/" custom_deny_url = "https://denied.tips-of-mine.org/"
custom_non_identity_deny_url = "https://denied.tips-of-mine.org/" custom_non_identity_deny_url = "https://denied.tips-of-mine.org/"
# Destination publique vers laquelle Cloudflare redirige les requêtes
destinations = [{ destinations = [{
type = "public" type = "public"
uri = var.cloudflare_aws_subdomain_web_sensitive uri = var.cloudflare_aws_subdomain_web_sensitive
}] }]
# Autorisation uniquement via Authentik (OIDC)
allowed_idps = [ allowed_idps = [
cloudflare_zero_trust_access_identity_provider.authentik_oidc.id, cloudflare_zero_trust_access_identity_provider.authentik_oidc.id,
] ]
auto_redirect_to_identity = true auto_redirect_to_identity = true # Redirection immédiate vers Authentik
allow_authenticate_via_warp = false allow_authenticate_via_warp = false # Interdit laccès via WARP (client Zero Trust)
# Politique de sécurité spécifique à cette application (définie dans un autre fichier)
policies = [{ policies = [{
id = cloudflare_zero_trust_access_policy.policies["competition_web_app"].id id = cloudflare_zero_trust_access_policy.policies["competition_web_app"].id
}] }]
} }
#====================================================== #======================================================
# SELF-HOSTED APP: Macharpe Intranet # APPLICATION SELF-HOSTED : Intranet Macharpe
#====================================================== #======================================================
# Creating the Self-hosted Application for Administration web application # ------------------------------------------------------
# Création de lapplication web Intranet, utilisée pour ladministration interne.
# Accessible via un domaine public mais pleinement sécurisée via Zero Trust.
# ------------------------------------------------------
resource "cloudflare_zero_trust_access_application" "cloudflare_app_web_intranet" { resource "cloudflare_zero_trust_access_application" "cloudflare_app_web_intranet" {
account_id = local.cloudflare_account_id account_id = local.cloudflare_account_id
@@ -79,17 +99,20 @@ resource "cloudflare_zero_trust_access_application" "cloudflare_app_web_intranet
custom_deny_url = "https://denied.tips-of-mine.org/" custom_deny_url = "https://denied.tips-of-mine.org/"
custom_non_identity_deny_url = "https://denied.tips-of-mine.org/" custom_non_identity_deny_url = "https://denied.tips-of-mine.org/"
# Redirection vers le domaine public hébergeant lintranet
destinations = [{ destinations = [{
type = "public" type = "public"
uri = var.cloudflare_aws_subdomain_web uri = var.cloudflare_aws_subdomain_web
}] }]
# Authentification obligatoire via Authentik (OIDC)
allowed_idps = [ allowed_idps = [
cloudflare_zero_trust_access_identity_provider.authentik_oidc.id, cloudflare_zero_trust_access_identity_provider.authentik_oidc.id,
] ]
auto_redirect_to_identity = true auto_redirect_to_identity = true # Redirection immédiate vers Authentik
allow_authenticate_via_warp = false allow_authenticate_via_warp = false # Interdit laccès via WARP (client Zero Trust)
# Politique spécifique définissant qui peut accéder à lintranet
policies = [{ policies = [{
id = cloudflare_zero_trust_access_policy.policies["intranet_web_app"].id id = cloudflare_zero_trust_access_policy.policies["intranet_web_app"].id
}] }]

View File

@@ -8,7 +8,7 @@ resource "cloudflare_zero_trust_tunnel_cloudflared_virtual_network" "zero_trust_
name = "vpc-aws" name = "vpc-aws"
comment = "AWS VPC for data science" comment = "AWS VPC for data science"
is_default = false # is_default = false
is_default_network = false is_default_network = false
} }

View File

@@ -16,7 +16,7 @@ data "vault_generic_secret" "authentik" {
locals { locals {
# Secrets Cloudflare depuis Vault # Secrets Cloudflare depuis Vault
cloudflare_api_token = data.vault_generic_secret.cloudflare.data["api_token"] cloudflare_api_token = data.vault_generic_secret.cloudflare.data["api_token"]
cloudflare_account_id = data.vault_generic_secret.cloudflare.data["account_id"] cloudflare_account_id = data.vault_generic_secret.cloudflare.data["account_id"]
cloudflare_zone_id = data.vault_generic_secret.cloudflare.data["zone_id_org"] cloudflare_zone_id = data.vault_generic_secret.cloudflare.data["zone_id_org"]
cloudflare_email = data.vault_generic_secret.cloudflare.data["email"] cloudflare_email = data.vault_generic_secret.cloudflare.data["email"]