last update to day 24-11-25
This commit is contained in:
@@ -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 d’hôte et l’adresse 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 l’accès RDP via Cloudflare,
|
||||||
|
# directement dans le navigateur, sans client local. Elle s’appuie 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
|
||||||
|
|
||||||
|
|||||||
@@ -3,10 +3,15 @@
|
|||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
#======================================================
|
#======================================================
|
||||||
# INFRASTRUCTURE Application: Test Home Network Access
|
# APPLICATION SELF-HOSTED : Accès réseau privé (Home Network Access)
|
||||||
#======================================================
|
#======================================================
|
||||||
|
|
||||||
#
|
# ------------------------------------------------------
|
||||||
|
# Déclaration d’une 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 d’accéder à l’application
|
||||||
|
# via une URL publique, mais l’authentification 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 l’application Self-hosted créée ci-dessus.
|
||||||
|
# Cela permet de récupérer dynamiquement certaines valeurs internes (ID, etc.)
|
||||||
|
# utiles dans d’autres 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 l’application 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 d’accè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 l’accè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 l’application web Intranet, utilisée pour l’administration 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 l’intranet
|
||||||
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 l’accès via WARP (client Zero Trust)
|
||||||
|
|
||||||
|
# Politique spécifique définissant qui peut accéder à l’intranet
|
||||||
policies = [{
|
policies = [{
|
||||||
id = cloudflare_zero_trust_access_policy.policies["intranet_web_app"].id
|
id = cloudflare_zero_trust_access_policy.policies["intranet_web_app"].id
|
||||||
}]
|
}]
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
2
main.tf
2
main.tf
@@ -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"]
|
||||||
|
|||||||
Reference in New Issue
Block a user