Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

AWS PrivateLink

Fonctionnalité de l’offre Scale

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

Vous pouvez utiliser AWS PrivateLink pour établir une connectivité sécurisée entre des VPC, des services AWS, vos systèmes sur site et ClickHouse Cloud, sans exposer le trafic à l’Internet public. Ce document présente les étapes à suivre pour vous connecter à ClickHouse Cloud à l’aide d’AWS PrivateLink.

Pour restreindre l’accès à vos services ClickHouse Cloud exclusivement aux adresses AWS PrivateLink, suivez les instructions de ClickHouse Cloud relatives aux listes d’accès IP.

ClickHouse Cloud prend en charge le PrivateLink inter-région pour les services hébergés dans les régions AWS suivantes :

Le tableau couvre uniquement les régions d’hébergement des services. Les régions des endpoints VPC d’interface côté consommateur utilisent une liste d’autorisation distincte ; par exemple, mx-central-1 est une région consommateur autorisée, même si les services qui y sont hébergés ne peuvent pas activer l’accès inter-région.

Code de région Nom de région
af-south-1 Afrique (Le Cap)
ap-east-1 Asie-Pacifique (Hong Kong)
ap-northeast-1 Asie-Pacifique (Tokyo)
ap-northeast-2 Asie-Pacifique (Séoul)
ap-south-1 Asie-Pacifique (Mumbai)
ap-southeast-1 Asie-Pacifique (Singapour)
ap-southeast-2 Asie-Pacifique (Sydney)
ap-southeast-3 Asie-Pacifique (Jakarta)
ap-southeast-5 Asie-Pacifique (Malaisie)
ca-central-1 Canada (Centre)
eu-central-1 Europe (Francfort)
eu-north-1 Europe (Stockholm)
eu-west-1 Europe (Irlande)
eu-west-2 Europe (Londres)
il-central-1 Israël (Tel Aviv)
me-central-1 Moyen-Orient (EAU)
sa-east-1 Amérique du Sud (São Paulo)
us-east-1 Est des États-Unis (Virginie du Nord)
us-east-2 Est des États-Unis (Ohio)
us-west-2 Ouest des États-Unis (Oregon)

Veuillez effectuer les opérations suivantes pour activer AWS PrivateLink :

  1. Récupérez le "Service name" de l’endpoint.
  2. Créez l’endpoint AWS.
  3. Ajoutez l’"Endpoint ID" à l’organisation ClickHouse Cloud.
  4. Ajoutez l’"Endpoint ID" à la liste d’autorisation du service ClickHouse.

Vous trouverez des exemples Terraform ici.

Considérations importantes

ClickHouse essaie de regrouper vos services pour réutiliser le même endpoint de service publié au sein de la région AWS. Cependant, ce regroupement n'est pas garanti, surtout si vos services sont répartis entre plusieurs organisations ClickHouse. Si PrivateLink est déjà configuré pour d'autres services de votre organisation ClickHouse, vous pouvez souvent ignorer la plupart des étapes grâce à ce regroupement et passer directement à l'étape finale : ajouter l'« Endpoint ID » ClickHouse à la liste d'autorisation du service ClickHouse.

Prérequis pour cette procédure

Avant de commencer, vous aurez besoin de :

  1. Votre compte AWS.
  2. clé API ClickHouse avec les permissions nécessaires pour créer et gérer des endpoints privés côté ClickHouse.

Étapes

Suivez ces étapes pour connecter vos services ClickHouse Cloud à l’aide d’AWS PrivateLink.

Obtenir le « Service name » de l’endpoint

Option 1 : console ClickHouse Cloud

Dans la console ClickHouse Cloud, ouvrez le service auquel vous souhaitez vous connecter via PrivateLink, puis accédez au menu Settings.

Points de terminaison privés

Relevez le Service name et le nom DNS, puis passez à l’étape suivante.

Option 2 : API

Commencez par définir les variables d’environnement suivantes avant d’exécuter des commandes :

REGION=<Your region code using the AWS format, for example: us-west-2>
PROVIDER=aws
KEY_ID=<Your ClickHouse key ID>
KEY_SECRET=<Your ClickHouse key secret>
ORG_ID=<Your ClickHouse organization ID>
SERVICE_NAME=<Your ClickHouse service name>

Obtenez votre INSTANCE_ID ClickHouse en filtrant par région, fournisseur 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 endpointServiceId et privateDnsHostname pour votre configuration PrivateLink :

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

Cette commande devrait renvoyer quelque chose comme :

{
  "endpointServiceId": "com.amazonaws.vpce.us-west-2.vpce-svc-xxxxxxxxxxxxxxxxx",
  "privateDnsHostname": "xxxxxxxxxx.us-west-2.vpce.aws.clickhouse.cloud"
}

Prenez note des valeurs de endpointServiceId et privateDnsHostname passez à l’étape suivante.

Créer un endpoint AWS

Option 1 : console AWS

Ouvrez la console AWS et accédez à VPCEndpointsCreate endpoints.

Sélectionnez Endpoint services that use NLBs and GWLBs et utilisez Service nameconsole ou endpointServiceIdAPI obtenu à l’étape Obtenir le "Service name" de l’endpoint dans le champ Service Name. Cliquez sur Verify service :

Paramètres de l’endpoint AWS PrivateLink

Si vous obtenez l’erreur "Service name couldn't be verified.", veuillez contacter le support client pour demander l’ajout de nouvelles régions à la liste des régions prises en charge.

Ensuite, sélectionnez votre VPC et vos sous-réseaux :

Sélectionner le VPC et les sous-réseaux

À titre facultatif, attribuez des groupes de sécurité/Tags :

Après avoir créé le VPC Endpoint, notez la valeur de Endpoint ID ; vous en aurez besoin à l’étape suivante.

ID du VPC Endpoint

Option 2 : AWS CloudFormation

Ensuite, vous devez créer un VPC Endpoint à l’aide du Service nameconsole ou de l’endpointServiceIdAPI obtenu à l’étape Obtenir le "Service name" de l’endpoint . Assurez-vous d’utiliser les bons ID de sous-réseau, groupes de sécurité et ID de VPC.

Resources:
  ClickHouseInterfaceEndpoint:
    Type: 'AWS::EC2::VPCEndpoint'
    Properties:
      VpcEndpointType: Interface
      PrivateDnsEnabled: false
      ServiceName: <Service name(endpointServiceId), pls see above>
      VpcId: vpc-vpc_id
      SubnetIds:
        - subnet-subnet_id1
        - subnet-subnet_id2
        - subnet-subnet_id3
      SecurityGroupIds:
        - sg-security_group_id1
        - sg-security_group_id2
        - sg-security_group_id3

Après avoir créé le VPC Endpoint, notez la valeur de l’Endpoint ID ; vous en aurez besoin à l’étape suivante.

Option 3 : Terraform

service_name ci-dessous correspond à Service nameconsole ou à endpointServiceIdAPI que vous avez obtenu à l’étape Obtenir le "Service name" de l’endpoint

resource "aws_vpc_endpoint" "this" {
  vpc_id            = var.vpc_id
  service_name      = "<pls see comment above>"
  vpc_endpoint_type = "Interface"
  security_group_ids = [
    Var.security_group_id1,var.security_group_id2, var.security_group_id3,
  ]
  subnet_ids          = [var.subnet_id1,var.subnet_id2,var.subnet_id3]
  private_dns_enabled = false
  service_region      = "(Optional) If specified, the VPC endpoint will connect to the service in the provided region. Define it for multi-regional PrivateLink connections."
}

Après avoir créé le VPC Endpoint, notez la valeur de Endpoint ID ; vous en aurez besoin à l’étape suivante.

Définir le nom DNS privé de l’endpoint

Vous devez faire pointer le « nom DNS », obtenu à l’étape Obtain Endpoint "Service name" , vers les interfaces réseau de l’AWS Endpoint. Cela garantit que les services et composants de votre VPC/réseau pourront le résoudre correctement.

Ajouter l’« Endpoint ID » à la liste d’autorisation du service ClickHouse

Option 1 : console ClickHouse Cloud

Pour l’ajouter, accédez à la console ClickHouse Cloud, ouvrez le service que vous souhaitez connecter via PrivateLink, puis accédez à Settings. Cliquez sur Set up private endpoint pour ouvrir les paramètres des endpoints privés. Saisissez l’Endpoint ID obtenu à l’étape Create AWS Endpoint. Cliquez sur « Create endpoint ».

Filtre des endpoints privés

Pour le supprimer, accédez à la console ClickHouse Cloud, recherchez le service, puis accédez à ses Settings. Trouvez l’endpoint que vous souhaitez supprimer. Supprimez-le de la liste des endpoints.

Option 2 : API

Vous devez ajouter un Endpoint ID à la liste d’autorisation de chaque instance devant être accessible via PrivateLink.

Définissez la variable d’environnement ENDPOINT_ID à l’aide des données de l’étape Créer un AWS Endpoint.

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

REGION=<Your region code using the AWS format, for example: us-west-2>
PROVIDER=aws
KEY_ID=<Your ClickHouse key ID>
KEY_SECRET=<Your ClickHouse key secret>
ORG_ID=<Your ClickHouse organization ID>
SERVICE_NAME=<Your ClickHouse service name>

Pour ajouter un ID d’endpoint à une liste d’autorisation :

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

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

Pour supprimer un Endpoint ID d’une liste d’autorisation :

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

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é dispose d’un endpoint public et d’un endpoint privé. Pour vous connecter via Private Link, vous devez utiliser un endpoint privé : privateDnsHostnameAPI ou Nom DNSconsole, obtenu à partir de Obtenir le « Service name » de l’endpoint.

Récupération du nom d’hôte DNS privé

Option 1 : ClickHouse Cloud console

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

Nom DNS du Private Endpoint
Option 2 : API

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

KEY_ID=<Your ClickHouse key ID>
KEY_SECRET=<Your ClickHouse key secret>
ORG_ID=<Your ClickHouse organization ID>
INSTANCE_ID=<Your ClickHouse service name>

Vous pouvez récupérer INSTANCE_ID à l’étape.

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

Cela devrait afficher quelque chose comme :

{
  "endpointServiceId": "com.amazonaws.vpce.us-west-2.vpce-svc-xxxxxxxxxxxxxxxxx",
  "privateDnsHostname": "xxxxxxxxxx.us-west-2.vpce.aws.clickhouse.cloud"
}

Dans cet exemple, la connexion via le nom d’hôte correspondant à la valeur de privateDnsHostname sera acheminée vers PrivateLink, tandis que la connexion via le nom d’hôte endpointServiceId passera par Internet.

Résolution des problèmes

Plusieurs PrivateLinks dans une même région

Dans la plupart des cas, il suffit de créer un seul service de point de terminaison par VPC. Ce point de terminaison peut acheminer les requêtes du VPC vers plusieurs services ClickHouse Cloud. Consultez cette section.

Délai d’attente lors de la connexion au endpoint privé
  • Associez un groupe de sécurité au VPC Endpoint.
  • Vérifiez les règles inbound du groupe de sécurité associé au point de terminaison et autorisez les ports ClickHouse.
  • Vérifiez les règles outbound du groupe de sécurité associé à la VM utilisée pour tester la connectivité et autorisez les connexions aux ports ClickHouse.
Nom d’hôte privé : adresse de l’hôte introuvable
  • Vérifiez votre configuration DNS.
Connexion réinitialisée par le pair
  • L’Endpoint ID n’a probablement pas été ajouté à la liste d’autorisation du service. Consultez l’étape.
Vérification des filtres de point de terminaison

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

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

Vous pouvez récupérer INSTANCE_ID à partir de l’étape.

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
Connexion à une base de données distante

Selon la documentation AWS PrivateLink :

Utilisez AWS PrivateLink dans une configuration client/serveur lorsque vous souhaitez autoriser un ou plusieurs VPC consommateurs à accéder, de manière unidirectionnelle, à un service spécifique ou à un ensemble d’instances dans le VPC du fournisseur de services. Seuls les clients du VPC consommateur peuvent initier une connexion au service dans le VPC du fournisseur de services.

Pour connecter les fonctions de table MySQL ou PostgreSQL de ClickHouse Cloud à une base de données hébergée dans votre VPC AWS, configurez vos groupes de sécurité AWS afin d’autoriser les connexions depuis ClickHouse Cloud. Consultez les adresses IP de sortie par défaut des régions ClickHouse Cloud, ainsi que les adresses IP statiques disponibles.

Navigation