Private Service Connect, Private Endpoints & Interconnect

Connectivité privée multi-cloud pour vos services managés (GCP, Azure, AWS)

Olivier Brun - Architecte Cloud

Olivier Brun

Architecte cloud & cybersécurité freelance, certifié AWS, Azure, GCP. Spécialiste des architectures hybrides et de la connectivité privée.

Accéder à un service cloud managé (Cloud SQL, Storage, Key Vault, S3) sans exposer d'IP publique est un besoin critique pour toute architecture sécurisée. Chaque fournisseur a sa solution : Private Service Connect (PSC) chez Google Cloud, Private Endpoint sur Azure, et PrivateLink sur AWS. Associés à Interconnect, Direct Connect ou ExpressRoute, ils permettent une connectivité privée de bout en bout. Cet article détaille ces concepts avec des exemples Terraform et des bonnes pratiques.

🔒 Pourquoi utiliser des points de terminaison privés ?

L'exposition publique d'un service (base de données, API, queue) augmente la surface d'attaque. Les solutions de private endpoint créent une IP privée (RFC1918) pour le service, accessible uniquement depuis votre VPC ou votre réseau on‑premise via un peering ou un interconnect.

📦 Private Service Connect (GCP) – focus technique

Private Service Connect (PSC) permet de consommer un service (Google managé, partenaire ou votre propre workload) via une IP interne de votre VPC. Deux modes :

Exemple Terraform : Cloud SQL avec PSC

# Déclaration d'un endpoint PSC vers un service Google (ex: Cloud SQL)
resource "google_compute_global_address" "psc_ip" {
  name          = "psc-sql-ip"
  address_type  = "INTERNAL"
  purpose       = "PRIVATE_SERVICE_CONNECT"
  network       = google_compute_network.vpc.id
  address       = "10.0.0.100"
}

resource "google_compute_forwarding_rule" "psc_sql" {
  name                  = "psc-forwarder"
  network               = google_compute_network.vpc.id
  load_balancing_scheme = ""
  target                = "projects/project-id/regions/region/serviceAttachments/cloudsql"
  ip_address            = google_compute_global_address.psc_ip.id
}

# Dans Cloud SQL, activer Private Service Connect
# (via gcloud ou console) : 
# gcloud sql instances patch mon-instance --psc-enabled
💡 Astuce : PSC supporte les résolutions DNS automatiques via Cloud DNS (enregistrement A pointant vers l’IP PSC). Activez Private Service Connect DNS forwarding pour une intégration transparente.

☁️ Private Endpoint (Azure) & PrivateLink (AWS)

Azure Private Link + Private Endpoint

Un Private Endpoint assigne une IP privée d’un sous‑réseau à un service PaaS Azure (Storage, SQL, Key Vault, etc.) ou à un service partenaire. Le trafic reste dans le backbone Microsoft.

# Terraform Azure
resource "azurerm_private_endpoint" "example" {
  name                = "pe-storage"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
  subnet_id           = azurerm_subnet.subnet.id

  private_service_connection {
    name                           = "psc-storage"
    private_connection_resource_id = azurerm_storage_account.sa.id
    is_manual_connection           = false
    subresource_names              = ["blob"]
  }
}

AWS PrivateLink (VPC Endpoints)

Interface VPC Endpoint (type Interface) permet d’accéder à un service AWS (S3, DynamoDB, etc.) ou à un service propriétaire via un NLB interne. Utilise des adresses IP privées et des en‐têtes DNS.

# Terraform AWS
resource "aws_vpc_endpoint" "s3" {
  vpc_id       = aws_vpc.main.id
  service_name = "com.amazonaws.us-east-1.s3"
  vpc_endpoint_type = "Gateway"
  route_table_ids = [aws_route_table.private.id]
}

⚠️ Note : S3 et DynamoDB utilisent plutôt Gateway Endpoints (gratuits) ; les autres services (ECR, Secrets Manager, etc.) utilisent des Interface Endpoints (payants).

🔌 Interconnect GCP, Direct Connect AWS, ExpressRoute Azure

Pour connecter votre datacenter ou vos bureaux à un cloud, les connexions dédiées offrent une bande passante garantie et une latence réduite. Voici comment elles s’articulent avec les private endpoints :

Cas concret : Application sur‑premise (serveur SAP) qui doit requêter une base Cloud SQL dans GCP :

🔐 Sécurité avancée : Combinez PSC / Private Endpoint avec des policies IAM, des firewall rules internes et des contrôles de service perimeter (VPC Service Controls chez GCP, Private Link policies chez AWS) pour un Zero Trust effectif.

🌐 Tableau comparatif multi-cloud

GCPAzureAWS
Nom du servicePrivate Service Connect (PSC)Private Link + Private EndpointPrivateLink + VPC Endpoint
Ressources ciblesServices Google, partenaires, workloads persoPaaS Azure, services partenaires, vos apps via Standard LBAWS services, partenaires, NLB interne
Adresse IPIP interne dédiée (glissée via Forwarding Rule)IP du sous‑réseauIP du sous‑réseau (pour Interface Endpoints)
Intégration InterconnectOui (BGP), routage direct vers PSCOui via ExpressRoute (peering privé)Oui via Direct Connect + Private VIF
FacturationHeure d’utilisation + trafic traitéHeure d’utilisation + trafic entrant/sortantHeure d’utilisation + Go traités

🤖 Automatisation avec Terraform (module multi-cloud)

Voici un squelette modulaire pour déployer un PSC sur GCP, un Private Endpoint sur Azure et observer les similitudes :

# GCP : PSC vers Cloud SQL
resource "google_compute_forwarding_rule" "psc" {
  name   = "psc-sql-prod"
  target = "projects/project-id/regions/us-central1/serviceAttachments/cloudsql-mysql"
  ip_address = google_compute_global_address.psc_ip.id
}

# Azure : Private Endpoint vers Storage Account
resource "azurerm_private_endpoint" "pe" {
  name = "pe-storage-prod"
  private_service_connection {
    private_connection_resource_id = azurerm_storage_account.sa.id
    subresource_names              = ["blob"]
  }
}

# AWS : Interface Endpoint pour Secrets Manager
resource "aws_vpc_endpoint" "secrets" {
  vpc_id            = aws_vpc.main.id
  service_name      = "com.amazonaws.region.secretsmanager"
  vpc_endpoint_type = "Interface"
  subnet_ids        = [aws_subnet.private.id]
  security_group_ids = [aws_security_group.endpoint.id]
}

⚠️ Attention aux résolutions DNS : chaque cloud recommande d'utiliser ses zones DNS privées (Cloud DNS, Azure Private DNS, Route53 Resolver) pour que les noms canoniques du service pointent automatiquement vers l'IP privée.

📌 Bonnes pratiques et pièges à éviter

✔ À faire

⚠️ Limites connues

📖 Conclusion : quand utiliser quoi ?

La mise en place de ces mécanismes est un prérequis pour tout projet cloud souhaitant atteindre un haut niveau de sécurité et de conformité. Commencez par un audit de vos accès publics, puis planifiez la migration des services critiques vers des points de terminaison privés.

🔥 Recommandation : Utilisez des Service Directory (GCP) ou Private DNS Resolver (Azure) pour une résolution DNS automatisée, et n'oubliez pas de tester la connectivité depuis vos environnements CI/CD (agents auto‑hébergés dans le VPC).