120 lines
5.5 KiB
HCL
120 lines
5.5 KiB
HCL
# =============================================================================
|
||
# CLOUDFLARE : Access Controls : Applications > self_hosted
|
||
# =============================================================================
|
||
|
||
#======================================================
|
||
# 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" {
|
||
account_id = local.cloudflare_account_id
|
||
|
||
type = "self_hosted"
|
||
name = "Home Network Access Application"
|
||
domain = "home.tips-of-mine.org"
|
||
session_duration = "24h"
|
||
skip_interstitial = true
|
||
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 = [
|
||
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" {
|
||
account_id = local.cloudflare_account_id
|
||
|
||
app_id = cloudflare_zero_trust_access_application.zero_trust_access_application.id
|
||
}
|
||
|
||
#======================================================
|
||
# APPLICATION SELF-HOSTED : Application de Compétition
|
||
#======================================================
|
||
|
||
# ------------------------------------------------------
|
||
# 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" {
|
||
account_id = local.cloudflare_account_id
|
||
|
||
type = "self_hosted"
|
||
name = var.cloudflare_sensitive_web_app_name
|
||
app_launcher_visible = true
|
||
logo_url = "https://img.freepik.com/free-vector/trophy_78370-345.jpg"
|
||
tags = [cloudflare_zero_trust_access_tag.tags["engineers"].name]
|
||
session_duration = "0s"
|
||
custom_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 = [{
|
||
type = "public"
|
||
uri = var.cloudflare_aws_subdomain_web_sensitive
|
||
}]
|
||
|
||
# Autorisation uniquement via Authentik (OIDC)
|
||
allowed_idps = [
|
||
cloudflare_zero_trust_access_identity_provider.authentik_oidc.id,
|
||
]
|
||
auto_redirect_to_identity = true # Redirection immédiate vers Authentik
|
||
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 = [{
|
||
id = cloudflare_zero_trust_access_policy.policies["competition_web_app"].id
|
||
}]
|
||
}
|
||
|
||
#======================================================
|
||
# APPLICATION SELF-HOSTED : Intranet Macharpe
|
||
#======================================================
|
||
|
||
# ------------------------------------------------------
|
||
# 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" {
|
||
account_id = local.cloudflare_account_id
|
||
|
||
type = "self_hosted"
|
||
name = var.cloudflare_intranet_web_app_name
|
||
app_launcher_visible = true
|
||
logo_url = "https://raw.githubusercontent.com/uditkumar489/Icon-pack/master/Entrepreneur/digital-marketing/svg/computer-1.svg"
|
||
tags = [cloudflare_zero_trust_access_tag.tags["engineers"].name]
|
||
session_duration = "0s"
|
||
custom_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 = [{
|
||
type = "public"
|
||
uri = var.cloudflare_aws_subdomain_web
|
||
}]
|
||
|
||
# Authentification obligatoire via Authentik (OIDC)
|
||
allowed_idps = [
|
||
cloudflare_zero_trust_access_identity_provider.authentik_oidc.id,
|
||
]
|
||
auto_redirect_to_identity = true # Redirection immédiate vers Authentik
|
||
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 = [{
|
||
id = cloudflare_zero_trust_access_policy.policies["intranet_web_app"].id
|
||
}]
|
||
}
|