# ============================================================================= # CLOUDFLARE : Access Controls : Applications > RDP # ============================================================================= #====================================================== # APPLICATION SELF-HOSTED : Contrôleur de Domaine (AWS) #====================================================== # ------------------------------------------------------ # 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" { account_id = local.cloudflare_account_id hostname = var.cloudflare_aws_target_rdp_name ip = { ipv4 = { ip_addr = var.aws_windows_vm_internal_ip } } } # ------------------------------------------------------ # 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" { account_id = local.cloudflare_account_id # Type d’application (RDP, SSH, VNC, etc.) type = "rdp" # Nom d’affichage de l’application dans le launcher Cloudflare name = var.cloudflare_aws_browser_rdp_app_name # Afficher l’application dans l’App Launcher Cloudflare 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" # Attribution d’un tag pour organiser les applications (ex: équipe d’ingénieurs) 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" # URL personnalisée affichée en cas de refus d’accès custom_deny_url = "https://denied.tips-of-mine.org/" custom_non_identity_deny_url = "https://denied.tips-of-mine.org/" # Nom de domaine public utilisé pour rendre l’interface RDP accessible via navigateur domain = var.cloudflare_aws_subdomain_rdp # Critères de correspondance pour relier cette application à la cible RDP AWS # Indique quel protocole et port utiliser, ainsi que la cible. target_criteria = [{ port = 3389 protocol = "RDP" target_attributes = { hostname = [var.cloudflare_aws_target_rdp_name] # This will be "Domain-Controller" } }] # Paramètres relatifs au fournisseur d'identité (IdP) # Ici, Authentik via un connecteur OIDC. allowed_idps = [ cloudflare_zero_trust_access_identity_provider.authentik_oidc.id, ] auto_redirect_to_identity = true enable_binding_cookie = false http_only_cookie_attribute = false options_preflight_bypass = false # Référence à la politique d’accès définie dans Access_Controls-Policies-Reusable_Policies.tf policies = [{ id = cloudflare_zero_trust_access_policy.policies["domain_controller"].id }] # Déclare explicitement que la création dépend de la cible RDP depends_on = [ cloudflare_zero_trust_access_infrastructure_target.aws_rdp_target ] } #====================================================== # APPLICATION SELF-HOSTED : Contrôleur de Domaine (GCP) #====================================================== # 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" { account_id = local.cloudflare_account_id hostname = var.cloudflare_gcp_target_rdp_name ip = { ipv4 = { ip_addr = var.gcp_windows_vm_internal_ip } } } # 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" { account_id = local.cloudflare_account_id # Type d’application (RDP, SSH, VNC, etc.) type = "rdp" # Nom d’affichage de l’application dans le launcher Cloudflare name = var.cloudflare_gcp_browser_rdp_app_name # Afficher l’application dans l’App Launcher Cloudflare 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" # Attribution d’un tag pour organiser les applications (ex: équipe d’ingénieurs) 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" # URL personnalisée affichée en cas de refus d’accès custom_deny_url = "https://denied.tips-of-mine.org/" custom_non_identity_deny_url = "https://denied.tips-of-mine.org/" # Nom de domaine public utilisé pour rendre l’interface RDP accessible via navigateur domain = var.cloudflare_gcp_subdomain_rdp # Critères de correspondance pour relier cette application à la cible RDP AWS # Indique quel protocole et port utiliser, ainsi que la cible. target_criteria = [{ port = 3389 protocol = "RDP" target_attributes = { hostname = [var.cloudflare_gcp_target_rdp_name] # This will be "Domain-Controller" } }] # Paramètres relatifs au fournisseur d'identité (IdP) # Ici, Authentik via un connecteur OIDC. allowed_idps = [ cloudflare_zero_trust_access_identity_provider.authentik_oidc.id, ] auto_redirect_to_identity = true enable_binding_cookie = false http_only_cookie_attribute = false options_preflight_bypass = false # Référence à la politique d’accès définie dans Access_Controls-Policies-Reusable_Policies.tf policies = [{ id = cloudflare_zero_trust_access_policy.policies["domain_controller"].id }] # Déclare explicitement que la création dépend de la cible RDP depends_on = [ cloudflare_zero_trust_access_infrastructure_target.gcp_rdp_target ] }