@@ -1,12 +1,17 @@
# =============================================================================
# =============================================================================
# CLOUDFLARE : Access Controls : Applications
# CLOUDFLARE : Access Controls : Applications > RDP
# =============================================================================
# =============================================================================
#======================================================
#======================================================
# SELF-HOSTED APP: Domain Controller
# APPLICATION SELF-HOSTED : Contrôleur de Domaine (AWS)
#======================================================
#======================================================
# Creating the Target
# ------------------------------------------------------
# Création de la cible RDP côté AWS
# 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 " " aws_rdp_target " {
resource " cloudflare_zero_trust_access_infrastructure_target " " aws_rdp_target " {
account_id = local . cloudflare_account_id
account_id = local . cloudflare_account_id
@@ -18,23 +23,41 @@ resource "cloudflare_zero_trust_access_infrastructure_target" "aws_rdp_target" {
}
}
}
}
# Domain Controller Browser-Rendered RDP Application
# ------------------------------------------------------
# Application RDP rendue dans le navigateur pour le Contrôleur de Domaine AWS
# 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_aws_app_rdp_domain " {
resource " cloudflare_zero_trust_access_application " " cloudflare_aws_app_rdp_domain " {
account_id = local . cloudflare_account_id
account_id = local . cloudflare_account_id
# Type d’ application (RDP, SSH, VNC, etc.)
type = " rdp "
type = " rdp "
# Nom d’ affichage de l’ application dans le launcher Cloudflare
name = var . cloudflare_aws_browser_rdp_app_name
name = var . cloudflare_aws_browser_rdp_app_name
# Afficher l’ application dans l’ App Launcher Cloudflare
app_launcher_visible = true
app_launcher_visible = true
# Icône personnalisée visible par les utilisateurs
logo_url = " https://www.kevinsubileau.fr/wp-content/uploads/2016/05/RDP_icon.png "
logo_url = " https://www.kevinsubileau.fr/wp-content/uploads/2016/05/RDP_icon.png "
# Attribution d’ un tag pour organiser les applications (ex: équipe d’ ingénieurs)
tags = [ cloudflare_zero_trust_access_tag . tags [ " engineers " ] . name ]
tags = [ cloudflare_zero_trust_access_tag . tags [ " engineers " ] . name ]
# Durée de session (0s = durée illimitée tant que l’ authentification reste valide)
session_duration = " 0s "
session_duration = " 0s "
# URL personnalisée affichée en cas de refus d’ accès
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/ "
# Public hostname for browser rendering
# Nom de domaine public utilisé pour rendre l’ interface RDP accessible via navigateur
domain = var . cloudflare_aws_subdomain_rdp
domain = var . cloudflare_aws_subdomain_rdp
# Target criteria - references the existing gcp_rdp_target
# Critères de correspondance pour relier cette application à la cible RDP AWS
# Indique quel protocole et port utiliser, ainsi que la cible.
target_criteria = [ {
target_criteria = [ {
port = 3389
port = 3389
protocol = " RDP "
protocol = " RDP "
@@ -43,7 +66,8 @@ resource "cloudflare_zero_trust_access_application" "cloudflare_aws_app_rdp_doma
}
}
} ]
} ]
# Identity provider settings
# Paramètres relatifs au fournisseur d'identité (IdP)
# Ici, Authentik via un connecteur OIDC.
allowed_idps = [
allowed_idps = [
cloudflare_zero_trust_access_identity_provider . authentik_oidc . id ,
cloudflare_zero_trust_access_identity_provider . authentik_oidc . id ,
]
]
@@ -52,22 +76,23 @@ resource "cloudflare_zero_trust_access_application" "cloudflare_aws_app_rdp_doma
http_only_cookie_attribute = false
http_only_cookie_attribute = false
options_preflight_bypass = false
options_preflight_bypass = false
# Refe rence the policy from cloudflare-app-p olicies.tf
# Réfé rence à la politique d’ accès définie dans Access_Controls-Policies-Reusable_P olicies.tf
policies = [ {
policies = [ {
id = cloudflare_zero_trust_access_policy . policies [ " domain_controller " ] . id
id = cloudflare_zero_trust_access_policy . policies [ " domain_controller " ] . id
} ]
} ]
# Depends on the existing target
# Déclare explicitement que la création dépend de la cible RDP
depends_on = [
depends_on = [
cloudflare_zero_trust_access_infrastructure_target . aws_rdp_target
cloudflare_zero_trust_access_infrastructure_target . aws_rdp_target
]
]
}
}
#======================================================
#======================================================
# SELF-HOSTED APP: Domain Controller
# APPLICATION SELF-HOSTED : Contrôleur de Domaine (GCP)
#======================================================
#======================================================
# Cre ating the Target
# Cré ation de la cible RDP côté GCP
# Identique au bloc AWS mais appliqué à une VM Windows hébergée dans GCP.
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
@@ -79,23 +104,38 @@ resource "cloudflare_zero_trust_access_infrastructure_target" "gcp_rdp_target" {
}
}
}
}
# Domain Controller Browser-Rendered RDP Application
# 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.
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
# Type d’ application (RDP, SSH, VNC, etc.)
type = " rdp "
type = " rdp "
# Nom d’ affichage de l’ application dans le launcher Cloudflare
name = var . cloudflare_gcp_browser_rdp_app_name
name = var . cloudflare_gcp_browser_rdp_app_name
# Afficher l’ application dans l’ App Launcher Cloudflare
app_launcher_visible = true
app_launcher_visible = true
# Icône personnalisée visible par les utilisateurs
logo_url = " https://www.kevinsubileau.fr/wp-content/uploads/2016/05/RDP_icon.png "
logo_url = " https://www.kevinsubileau.fr/wp-content/uploads/2016/05/RDP_icon.png "
# Attribution d’ un tag pour organiser les applications (ex: équipe d’ ingénieurs)
tags = [ cloudflare_zero_trust_access_tag . tags [ " engineers " ] . name ]
tags = [ cloudflare_zero_trust_access_tag . tags [ " engineers " ] . name ]
# Durée de session (0s = durée illimitée tant que l’ authentification reste valide)
session_duration = " 0s "
session_duration = " 0s "
# URL personnalisée affichée en cas de refus d’ accès
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/ "
# Public hostname for browser rendering
# Nom de domaine public utilisé pour rendre l’ interface RDP accessible via navigateur
domain = var . cloudflare_gcp_subdomain_rdp
domain = var . cloudflare_gcp_subdomain_rdp
# Target criteria - references the existing gcp_rdp_target
# Critères de correspondance pour relier cette application à la cible RDP AWS
# Indique quel protocole et port utiliser, ainsi que la cible.
target_criteria = [ {
target_criteria = [ {
port = 3389
port = 3389
protocol = " RDP "
protocol = " RDP "
@@ -104,7 +144,8 @@ resource "cloudflare_zero_trust_access_application" "cloudflare_gcp_app_rdp_doma
}
}
} ]
} ]
# Identity provider settings
# Paramètres relatifs au fournisseur d'identité (IdP)
# Ici, Authentik via un connecteur OIDC.
allowed_idps = [
allowed_idps = [
cloudflare_zero_trust_access_identity_provider . authentik_oidc . id ,
cloudflare_zero_trust_access_identity_provider . authentik_oidc . id ,
]
]
@@ -113,12 +154,12 @@ resource "cloudflare_zero_trust_access_application" "cloudflare_gcp_app_rdp_doma
http_only_cookie_attribute = false
http_only_cookie_attribute = false
options_preflight_bypass = false
options_preflight_bypass = false
# Refe rence the policy from cloudflare-app-p olicies.tf
# Réfé rence à la politique d’ accès définie dans Access_Controls-Policies-Reusable_P olicies.tf
policies = [ {
policies = [ {
id = cloudflare_zero_trust_access_policy . policies [ " domain_controller " ] . id
id = cloudflare_zero_trust_access_policy . policies [ " domain_controller " ] . id
} ]
} ]
# Depends on the existing target
# Déclare explicitement que la création dépend de la cible RDP
depends_on = [
depends_on = [
cloudflare_zero_trust_access_infrastructure_target . gcp_rdp_target
cloudflare_zero_trust_access_infrastructure_target . gcp_rdp_target
]
]