AWS PrivateLink está disponível nos planos Scale e Enterprise. Para fazer upgrade, acesse a página de planos no Console do Cloud.
Você pode usar o AWS PrivateLink para estabelecer conectividade segura entre VPCs, serviços da AWS, seus sistemas on-premise e o ClickHouse Cloud sem expor o tráfego à internet pública. Este documento descreve as etapas para se conectar ao ClickHouse Cloud usando o AWS PrivateLink.
Para restringir o acesso aos seus serviços do ClickHouse Cloud exclusivamente por meio de endereços do AWS PrivateLink, siga as instruções fornecidas pelo ClickHouse Cloud em IP Access Lists.
O ClickHouse Cloud oferece suporte a PrivateLink entre regiões para serviços hospedados nas seguintes regiões da AWS:
A tabela abrange apenas regiões de hospedagem de serviços. As regiões de endpoint de VPC de interface do consumidor usam uma lista de permissões separada; por exemplo, mx-central-1 é uma região de consumidor permitida, embora os serviços hospedados nela não possam habilitar o acesso entre regiões.
| Código da região | Nome da região |
|---|---|
af-south-1 |
África (Cidade do Cabo) |
ap-east-1 |
Ásia-Pacífico (Hong Kong) |
ap-northeast-1 |
Ásia-Pacífico (Tóquio) |
ap-northeast-2 |
Ásia-Pacífico (Seul) |
ap-south-1 |
Ásia-Pacífico (Mumbai) |
ap-southeast-1 |
Ásia-Pacífico (Singapura) |
ap-southeast-2 |
Ásia-Pacífico (Sydney) |
ap-southeast-3 |
Ásia-Pacífico (Jacarta) |
ap-southeast-5 |
Ásia-Pacífico (Malásia) |
ca-central-1 |
Canadá (Central) |
eu-central-1 |
Europa (Frankfurt) |
eu-north-1 |
Europa (Estocolmo) |
eu-west-1 |
Europa (Irlanda) |
eu-west-2 |
Europa (Londres) |
il-central-1 |
Israel (Tel Aviv) |
me-central-1 |
Oriente Médio (EAU) |
sa-east-1 |
América do Sul (São Paulo) |
us-east-1 |
Leste dos EUA (N. Virginia) |
us-east-2 |
Leste dos EUA (Ohio) |
us-west-2 |
Oeste dos EUA (Oregon) |
Conclua as etapas a seguir para habilitar o AWS PrivateLink:
- Obtenha o "Service name" do Endpoint.
- Crie o endpoint da AWS.
- Adicione o "Endpoint ID" à organização do ClickHouse Cloud.
- Adicione o "Endpoint ID" à lista de permissões do serviço do ClickHouse.
Encontre exemplos de Terraform aqui.
Considerações importantes
O ClickHouse tenta agrupar seus serviços para reutilizar o mesmo endpoint de serviço publicado na mesma região da AWS. No entanto, esse agrupamento não é garantido, especialmente se você distribuir seus serviços entre várias organizações do ClickHouse. Se você já tiver o PrivateLink configurado para outros serviços na sua organização do ClickHouse, muitas vezes poderá pular a maior parte das etapas graças a esse agrupamento e seguir diretamente para a etapa final: adicionar o "Endpoint ID" do ClickHouse à lista de permissões do serviço ClickHouse.
Pré-requisitos para este processo
Antes de começar, você precisará de:
- Sua conta da AWS.
- Chave de API do ClickHouse com as permissões necessárias para criar e gerenciar endpoints privados no lado do ClickHouse.
Passos
Siga estes passos para conectar seus serviços no ClickHouse Cloud por meio do AWS PrivateLink.
Obtenha o endpoint "Service name"
Opção 1: console do ClickHouse Cloud
No console do ClickHouse Cloud, abra o serviço ao qual você deseja se conectar via PrivateLink e, em seguida, acesse o menu Settings.

Anote o Service name e o DNS name e siga para a próxima etapa.
Opção 2: API
Primeiro, defina as seguintes variáveis de ambiente antes de executar qualquer comando:
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>Obtenha o INSTANCE_ID do seu ClickHouse filtrando por região, provedor e nome do serviço:
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)Obtenha endpointServiceId e privateDnsHostname para sua configuração do PrivateLink:
curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" \
"https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}/privateEndpointConfig" | \
jq .resultEste comando deve retornar algo parecido com:
{
"endpointServiceId": "com.amazonaws.vpce.us-west-2.vpce-svc-xxxxxxxxxxxxxxxxx",
"privateDnsHostname": "xxxxxxxxxx.us-west-2.vpce.aws.clickhouse.cloud"
}Anote o endpointServiceId e o privateDnsHostname siga para a próxima etapa.
Criar endpoint da AWS
Opção 1: Console da AWS
Abra o Console da AWS e vá para VPC → Endpoints → Create endpoints.
Selecione Endpoint services that use NLBs and GWLBs e use Service nameconsole ou endpointServiceIdAPI obtido na etapa Obtain Endpoint "Service name" , no campo Service Name. Clique em Verify service:

Se você receber o erro "Service name couldn't be verified.", entre em contato com o Suporte ao Cliente para solicitar a adição de novas regiões à lista de regiões compatíveis.
Em seguida, selecione sua VPC e sub-redes:

Como etapa opcional, atribua Security groups/Tags:
Após criar o endpoint da VPC, anote o valor de Endpoint ID; você precisará dele em uma próxima etapa.

Opção 2: AWS CloudFormation
Em seguida, você precisa criar um endpoint da VPC usando Service nameconsole ou endpointServiceIdAPI obtido na etapa Obter endpoint "Service name" .
Certifique-se de usar os IDs de sub-rede, os grupos de segurança e o ID da VPC corretos.
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_id3Depois de criar o endpoint da VPC, anote o valor de Endpoint ID; você vai precisar dele em um próximo passo.
Opção 3: Terraform
service_name abaixo corresponde a Service nameconsole ou endpointServiceIdAPI obtido na etapa Obter o endpoint "Service name"
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."
}Após criar o endpoint da VPC, anote o valor de Endpoint ID; você precisará dele em um próximo passo.
Defina o nome DNS privado do endpoint
Você precisa apontar o "DNS name", obtido na etapa Obtain Endpoint "Service name" , para as interfaces de rede do AWS Endpoint. Isso garante que os serviços/componentes dentro da sua VPC/rede consigam resolvê-lo corretamente.
Adicione o "Endpoint ID" à lista de permissões do serviço ClickHouse
Opção 1: console do ClickHouse Cloud
Para adicionar, navegue até o console do ClickHouse Cloud, abra o serviço ao qual você deseja se conectar via PrivateLink e depois vá para Configurações. Clique em Set up private endpoint para abrir as configurações de endpoints privados. Insira o Endpoint ID obtido na etapa Create AWS Endpoint. Clique em "Create endpoint".

Para remover, navegue até o console do ClickHouse Cloud, localize o serviço e depois vá para Configurações do serviço. Localize o endpoint que deseja remover. Remova-o da lista de endpoints.
Opção 2: API
Você precisa adicionar um Endpoint ID à lista de permissões de cada instância que deve ficar disponível via PrivateLink.
Defina a variável de ambiente ENDPOINT_ID usando os dados da etapa Criar AWS Endpoint.
Defina as seguintes variáveis de ambiente antes de executar qualquer comando:
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>Para adicionar um ID do endpoint a uma lista de permissões:
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 | jqPara remover um ID de endpoint de uma lista de permissões:
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 | jqAcessando uma instância usando PrivateLink
Cada serviço com o Private Link habilitado tem um endpoint público e outro privado. Para se conectar via Private Link, você precisa usar um endpoint privado, que será privateDnsHostnameAPI ou DNS Nameconsole, obtido em Obter endpoint "Service name".
Como obter o hostname DNS privado
Opção 1: console do ClickHouse Cloud
No console do ClickHouse Cloud, acesse Settings. Clique no botão Set up private endpoint. No painel lateral aberto, copie o DNS Name.

Opção 2: API
Defina as seguintes variáveis de ambiente antes de executar quaisquer comandos:
KEY_ID=<Your ClickHouse key ID>
KEY_SECRET=<Your ClickHouse key secret>
ORG_ID=<Your ClickHouse organization ID>
INSTANCE_ID=<Your ClickHouse service name>Você pode obter INSTANCE_ID na etapa.
curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" \
"https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}/privateEndpointConfig" | \
jq .resultIsso deve retornar algo como:
{
"endpointServiceId": "com.amazonaws.vpce.us-west-2.vpce-svc-xxxxxxxxxxxxxxxxx",
"privateDnsHostname": "xxxxxxxxxx.us-west-2.vpce.aws.clickhouse.cloud"
}Neste exemplo, a conexão usando o valor do nome de host privateDnsHostname será roteada pelo PrivateLink, mas a conexão usando o nome de host endpointServiceId será roteada pela Internet.
Solução de problemas
Vários PrivateLinks em uma região
Na maioria dos casos, você só precisa criar um único serviço de endpoint para cada VPC. Esse endpoint pode rotear solicitações da VPC para vários serviços do ClickHouse Cloud. Consulte aqui
Tempo limite esgotado na conexão com o endpoint privado
- Anexe o grupo de segurança ao endpoint da VPC.
- Verifique as regras de
inboundno grupo de segurança anexado ao endpoint e permita as portas do ClickHouse. - Verifique as regras de
outboundno grupo de segurança anexado à VM usada para o teste de conectividade e permita conexões com as portas do ClickHouse.
Hostname privado: endereço do host não encontrado
- Verifique sua configuração de DNS
Conexão redefinida pelo par
- Muito provavelmente, o ID do endpoint não foi adicionado à lista de permissões do serviço. Consulte a etapa
Verificando filtros de endpoint
Defina as seguintes variáveis de ambiente antes de executar qualquer comando:
KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<please set ClickHouse organization ID>
INSTANCE_ID=<Instance ID>Você pode obter INSTANCE_ID na etapa.
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.privateEndpointIdsConectando-se a um banco de dados remoto
De acordo com a documentação do AWS PrivateLink:
Use o AWS PrivateLink quando houver uma configuração cliente/servidor em que você queira permitir que uma ou mais VPCs consumidoras tenham acesso unidirecional a um serviço específico ou a um conjunto de instâncias na VPC do provedor de serviço. Somente os clientes na VPC consumidora podem iniciar uma conexão com o serviço na VPC do provedor de serviço.
Para conectar as funções de tabela MySQL ou PostgreSQL no ClickHouse Cloud a um banco de dados hospedado na sua VPC da AWS, configure seus grupos de segurança da AWS para permitir conexões do ClickHouse Cloud. Consulte os endereços IP de egress padrão das regiões do ClickHouse Cloud, juntamente com os endereços IP estáticos disponíveis.