Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Azure Private Link

Fonctionnalité de l’offre Scale

Azure Private Link est disponible avec les offres Scale et Enterprise. Pour passer à une offre supérieure, consultez la page des offres dans la console Cloud.

Ce guide explique comment utiliser Azure Private Link pour assurer une connectivité privée via un réseau virtuel entre Azure (y compris les services détenus par les clients et les services de partenaires Microsoft) et ClickHouse Cloud. Azure Private Link simplifie l’architecture réseau et sécurise la connexion entre les endpoints dans Azure en évitant l’exposition des données à l’internet public.

Vue d’ensemble de PrivateLink

Azure prend en charge la connectivité inter-région via Private Link. Cela vous permet d’établir des connexions entre des VNets situés dans différentes régions où vous avez déployé des services ClickHouse.

Veuillez suivre les étapes suivantes pour activer Azure Private Link :

  1. Obtenez l’alias de connexion Azure pour Private Link
  2. Créez un Private Endpoint dans Azure
  3. Ajoutez le Private Endpoint Resource ID à votre organisation ClickHouse Cloud
  4. Ajoutez le Private Endpoint Resource ID à la liste d’autorisation de vos services
  5. Accédez à votre service ClickHouse Cloud à l’aide de Private Link

Attention

ClickHouse essaie de regrouper vos services afin de réutiliser le même service Private Link publié dans la région Azure. Cependant, ce regroupement n'est pas garanti, en particulier si vos services sont répartis entre plusieurs organisations ClickHouse. Si Private Link est déjà configuré pour d'autres services dans votre organisation ClickHouse, vous pouvez souvent ignorer la plupart des étapes grâce à ce regroupement et passer directement à l'étape finale : Ajouter le Resource ID du Private Endpoint à la liste d'autorisation de vos services.

Vous trouverez des exemples Terraform dans le dépôt du Terraform Provider de ClickHouse.

Option 1 : console ClickHouse Cloud

Dans la console ClickHouse Cloud, ouvrez le service que vous souhaitez connecter via PrivateLink, puis ouvrez le menu Paramètres. Cliquez sur le bouton Configurer un Private Endpoint. Notez le Service name et le DNS name, qui seront utilisés pour configurer Private Link.

Points de terminaison privés

Notez le Service name et le DNS name : ils seront nécessaires aux étapes suivantes.

Option 2 : API

Avant de commencer, vous aurez besoin d’une clé API ClickHouse Cloud. Vous pouvez créer une nouvelle clé ou utiliser une clé existante.

Une fois votre clé API en main, définissez les variables d’environnement suivantes avant d’exécuter des commandes :

REGION=<region code, use Azure format, for example: westus3>
PROVIDER=azure
KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<set ClickHouse organization ID>
SERVICE_NAME=<Your ClickHouse service name>

Récupérez votre INSTANCE_ID ClickHouse en filtrant par région, fournisseur de cloud et nom du service :

INSTANCE_ID=$(curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" \
"https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services" | \
jq ".result[] | select (.region==\"${REGION:?}\" and .provider==\"${PROVIDER:?}\" and .name==\"${SERVICE_NAME:?}\") | .id " -r)

Récupérez votre alias de connexion Azure et votre nom d’hôte DNS privé pour Private Link :

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}/privateEndpointConfig" | jq  .result
{
  "endpointServiceId": "production-westus3-0-0.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.westus3.azure.privatelinkservice",
  "privateDnsHostname": "xxxxxxxxxx.westus3.privatelink.azure.clickhouse.cloud"
}

Notez le endpointServiceId. Vous l’utiliserez à l’étape suivante.

Créer un Private Endpoint dans Azure

Dans cette section, nous allons créer un Private Endpoint dans Azure. Vous pouvez utiliser Azure Portal ou Terraform.

Option 1 : utiliser Azure Portal pour créer un Private Endpoint dans Azure

Dans Azure Portal, ouvrez Private Link Center → Private Endpoints.

Ouvrir Azure Private Center

Ouvrez la boîte de dialogue de création d’un Private Endpoint en cliquant sur le bouton Create.

Ouvrir Azure Private Center

Dans l’écran suivant, renseignez les options suivantes :

  • Subscription / Resource Group : choisissez l’abonnement Azure et le groupe de ressources du Private Endpoint.
  • Name : définissez un nom pour le Private Endpoint.
  • Region : choisissez une région où se trouve le VNet déployé qui sera connecté à ClickHouse Cloud via Private Link.

Après avoir terminé les étapes ci-dessus, cliquez sur le bouton Next: Resource.

Créer un point de terminaison privé - paramètres de base

Sélectionnez l’option Connect to an Azure resource by resource ID or alias.

Pour Resource ID or alias, utilisez l’endpointServiceId obtenu à l’étape Obtain Azure connection alias for Private Link.

Cliquez sur le bouton Next: Virtual Network.

Sélection de la ressource du point de terminaison privé

  • Virtual network : choisissez le VNet que vous souhaitez connecter à ClickHouse Cloud à l’aide de Private Link
  • Subnet : choisissez le sous-réseau dans lequel le Private Endpoint sera créé

Facultatif :

  • Application security group : vous pouvez associer un ASG au Private Endpoint et l’utiliser dans les groupes de sécurité réseau pour filtrer le trafic réseau vers et depuis le Private Endpoint.

Cliquez sur le bouton Next: DNS.

Sélection du réseau virtuel du point de terminaison privé

Cliquez sur le bouton Next: Tags.


Configuration DNS du point de terminaison privé

Vous pouvez éventuellement ajouter des tags à votre Private Endpoint.

Cliquez sur le bouton Next: Review + create.


Tags du point de terminaison privé

Enfin, cliquez sur le bouton Create.

Vérification du point de terminaison privé

Le Connection status du Private Endpoint créé sera à l’état Pending. Il passera à l’état Approved une fois ce Private Endpoint ajouté à la liste d’autorisation du service.

Ouvrez la network interface associée au Private Endpoint et copiez l’adresse IPv4 privée (10.0.0.4 dans cet exemple) ; vous aurez besoin de cette information dans les étapes suivantes.

Adresse IP du point de terminaison privé

Option 2 : utiliser Terraform pour créer un Private Endpoint dans Azure

Utilisez le modèle ci-dessous avec Terraform pour créer un Private Endpoint :

resource "azurerm_private_endpoint" "example_clickhouse_cloud" {
  name                = var.pe_name
  location            = var.pe_location
  resource_group_name = var.pe_resource_group_name
  subnet_id           = var.pe_subnet_id

  private_service_connection {
    name                              = "test-pl"
    private_connection_resource_alias = "<data from 'Obtain Azure connection alias for Private Link' step>"
    is_manual_connection              = true
  }
}

Obtention du Private Endpoint Resource ID

Pour utiliser Private Link, vous devez ajouter le Resource ID de la connexion Private Endpoint à la liste d’autorisation de votre service.

Le Private Endpoint Resource ID est visible dans Azure Portal. Ouvrez le Private Endpoint créé à l’étape précédente, puis cliquez sur JSON View :

Vue du Private Endpoint

Copiez le champ id de niveau supérieur (le Resource ID du Private Endpoint, au format /subscriptions/.../providers/Microsoft.Network/privateEndpoints/<name>) — n’utilisez pas les champs id imbriqués dans l’objet properties :

Méthode recommandée : utiliser le Resource ID

Private Endpoint Resource ID

Méthode héritée : utiliser resourceGUID Vous pouvez toujours utiliser resourceGuid pour assurer la compatibilité descendante. Repérez le champ resourceGuid et copiez cette valeur :

Private Endpoint Resource GUID

Vous devrez créer une zone DNS privée (${location_code}.privatelink.azure.clickhouse.cloud) et la lier à votre VNet pour accéder aux ressources via Private Link.

Créer une zone DNS privée

Option 1 : Utilisation d’Azure Portal

Veuillez suivre ce guide pour créer une zone DNS privée Azure à l’aide d’Azure Portal.

Option 2 : Utilisation de Terraform

Utilisez le modèle Terraform suivant pour créer une zone DNS privée :

resource "azurerm_private_dns_zone" "clickhouse_cloud_private_link_zone" {
  name                = "${var.location}.privatelink.azure.clickhouse.cloud"
  resource_group_name = var.resource_group_name
}

Créer un enregistrement DNS générique

Créez un enregistrement générique pointant vers votre Private Endpoint :

Option 1 : Utilisation d’Azure Portal

  1. Ouvrez le groupe de ressources MyAzureResourceGroup et sélectionnez la zone privée ${region_code}.privatelink.azure.clickhouse.cloud.
  2. Sélectionnez + Record set.
  3. Pour Name, saisissez *.
  4. Pour IP Address, saisissez l’adresse IP affichée pour le Private Endpoint.
  5. Sélectionnez OK.
Configuration d’un DNS générique pour Private Link

Option 2 : Utilisation de Terraform

Utilisez le modèle Terraform suivant pour créer un enregistrement DNS générique :

resource "azurerm_private_dns_a_record" "example" {
  name                = "*"
  zone_name           = var.zone_name
  resource_group_name = var.resource_group_name
  ttl                 = 300
  records             = ["10.0.0.4"]
}

Pour lier la zone DNS privée à un réseau virtuel, vous devez créer un lien de réseau virtuel.

Option 1 : utiliser Azure Portal

Veuillez suivre ce guide pour lier le réseau virtuel à votre zone DNS privée.

Option 2 : utiliser Terraform

Vous devez faire pointer le "DNS name", obtenu à l’étape Obtain Azure connection alias for Private Link, vers l’adresse IP du Private Endpoint. Cela garantit que les services/composants au sein de votre VPC/réseau peuvent le résoudre correctement.

Vérifiez la configuration DNS

Le domaine xxxxxxxxxx.westus3.privatelink.azure.clickhouse.cloud doit pointer vers l’adresse IP du Private Endpoint (10.0.0.4 dans cet exemple).

nslookup xxxxxxxxxx.westus3.privatelink.azure.clickhouse.cloud.
Server: 127.0.0.53
Address: 127.0.0.53#53

Non-authoritative answer:
Name: xxxxxxxxxx.westus3.privatelink.azure.clickhouse.cloud
Address: 10.0.0.4

Ajouter le Private Endpoint Resource ID de votre organisation ClickHouse Cloud

Option 1 : console ClickHouse Cloud

Pour ajouter un endpoint à l’organisation, passez à l’étape Ajouter le Private Endpoint Resource ID à la liste d’autorisation de vos services. L’ajout du Private Endpoint Resource ID à la liste d’autorisation de vos services à l’aide de la console ClickHouse Cloud l’ajoute automatiquement à l’organisation.

Pour supprimer un endpoint, ouvrez Organization details -> Private Endpoints et cliquez sur le bouton Supprimer pour retirer l’endpoint.

Supprimer le Private Endpoint

Option 2 : API

Définissez les variables d’environnement suivantes avant d’exécuter toute commande :

PROVIDER=azure
KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<set ClickHouse organization ID>
ENDPOINT_ID=<Private Endpoint Resource ID>
REGION=<region code, use Azure format>

Définissez la variable d’environnement ENDPOINT_ID à l’aide des informations de l’étape Obtaining the Private Endpoint Resource ID.

Exécutez la commande suivante pour ajouter le Private Endpoint :

cat <<EOF | tee pl_config_org.json
{
  "privateEndpoints": {
    "add": [
      {
        "cloudProvider": "azure",
        "id": "${ENDPOINT_ID:?}",
        "description": "Azure private endpoint",
        "region": "${REGION:?}"
      }
    ]
  }
}
EOF

Vous pouvez également exécuter la commande suivante pour supprimer un Private Endpoint :

cat <<EOF | tee pl_config_org.json
{
  "privateEndpoints": {
    "remove": [
      {
        "cloudProvider": "azure",
        "id": "${ENDPOINT_ID:?}",
        "region": "${REGION:?}"
      }
    ]
  }
}
EOF

Après avoir ajouté ou supprimé un Private Endpoint, exécutez la commande suivante pour l’appliquer à votre organisation :

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" -X PATCH -H "Content-Type: application/json" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}" -d @pl_config_org.json

Ajoutez le Private Endpoint Resource ID à la liste d’autorisation de vos services

Par défaut, un service ClickHouse Cloud n’est pas accessible via une connexion Private Link, même si cette connexion Private Link a été approuvée et établie. Vous devez ajouter explicitement le Private Endpoint Resource ID de chaque service devant être accessible via Private Link.

Option 1 : console ClickHouse Cloud

Dans la console ClickHouse Cloud, ouvrez le service auquel vous souhaitez vous connecter via PrivateLink, puis accédez à Settings. Saisissez le Resource ID obtenu à l’étape précédente.

Filtre des Private Endpoints

Option 2 : API

Définissez ces variables d’environnement avant d’exécuter toute commande :

PROVIDER=azure
KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<set ClickHouse organization ID>
ENDPOINT_ID=<Private Endpoint Resource ID>
INSTANCE_ID=<Instance ID>

Exécutez-la pour chaque service qui doit être accessible via Private Link.

Exécutez la commande suivante pour ajouter le Private Endpoint à la liste d'autorisation des services :

cat <<EOF | tee pl_config.json
{
  "privateEndpointIds": {
    "add": [
      "${ENDPOINT_ID:?}"
    ]
  }
}
EOF

Vous pouvez également exécuter la commande suivante pour retirer un Private Endpoint de la liste d’autorisation du service :

cat <<EOF | tee pl_config.json
{
  "privateEndpointIds": {
    "remove": [
      "${ENDPOINT_ID:?}"
    ]
  }
}
EOF

Après avoir ajouté ou supprimé un Private Endpoint de la liste d’autorisation des services, exécutez la commande suivante pour l’appliquer à votre organisation :

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" -X PATCH -H "Content-Type: application/json" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}" -d @pl_config.json | jq

Chaque service pour lequel Private Link est activé possède un endpoint public et un endpoint privé. Pour vous connecter à l’aide de Private Link, vous devez utiliser l’endpoint privé, c’est-à-dire privateDnsHostnameAPI ou DNS nameconsole, obtenu à partir de Obtenir l’alias de connexion Azure pour Private Link.

Obtenir le nom d’hôte DNS privé

Option 1 : console ClickHouse Cloud

Dans la console ClickHouse Cloud, accédez à Settings. Cliquez sur le bouton Set up private endpoint. Dans le volet qui s’ouvre, copiez le DNS Name.

Nom DNS du Private Endpoint

Option 2 : API

Définissez les variables d’environnement suivantes avant d’exécuter toute commande :

KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<set ClickHouse organization ID>
INSTANCE_ID=<Instance ID>

Exécutez la commande suivante :

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}/privateEndpointConfig" | jq  .result

Vous devriez obtenir une réponse semblable à la suivante :

{
  ...
  "privateDnsHostname": "xxxxxxx.<region code>.privatelink.azure.clickhouse.cloud"
}

Dans cet exemple, la connexion au hostname xxxxxxx.region_code.privatelink.azure.clickhouse.cloud passera par Private Link. En revanche, xxxxxxx.region_code.azure.clickhouse.cloud passera par internet.

Utilisez privateDnsHostname pour vous connecter à votre service ClickHouse Cloud via Private Link.

Dépannage

Tester la configuration DNS

Exécutez la commande suivante :

nslookup <dns name>

où « nom DNS » correspond à privateDnsHostnameAPI ou à DNS nameconsole dans Obtenir l’alias de connexion Azure pour Private Link

Vous devriez obtenir la réponse suivante :

Non-authoritative answer:
Name: <dns name>
Address: 10.0.0.4

Connexion réinitialisée par le pair

Il est très probable que le Private Endpoint Resource ID n’ait pas été ajouté à la liste d’autorisation de vos services. Revenez à l’étape Ajouter le Private Endpoint Resource ID à la liste d’autorisation de vos services.

Le Private Endpoint est en attente

Il est fort probable que le Private Endpoint Resource ID n’ait pas été ajouté à la liste d’autorisation du service. Reprenez l’étape Ajouter le Private Endpoint Resource ID à la liste d’autorisation de vos services.

Tester la connectivité

Si vous rencontrez des problèmes de connexion via Private Link, vérifiez la connectivité avec openssl. Assurez-vous que l’état du point de terminaison Private Link est Accepted.

OpenSSL doit pouvoir établir la connexion (la sortie doit afficher CONNECTED). errno=104 est attendu.

openssl s_client -connect abcd.westus3.privatelink.azure.clickhouse.cloud:9440
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 335 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)

Vérifier les filtres du point de terminaison privé

Définissez les variables d’environnement suivantes avant d’exécuter des commandes :

KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<please set ClickHouse organization ID>
INSTANCE_ID=<Instance ID>

Exécutez la commande suivante pour vérifier les filtres du Private Endpoint :

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" -X GET -H "Content-Type: application/json" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}" | jq .result.privateEndpointIds

Plus d’informations

Pour en savoir plus sur Azure Private Link, veuillez consulter azure.microsoft.com/en-us/products/private-link.

Navigation