Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

AWS PrivateLink

Recurso do plano Scale

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:

  1. Obtenha o "Service name" do Endpoint.
  2. Crie o endpoint da AWS.
  3. Adicione o "Endpoint ID" à organização do ClickHouse Cloud.
  4. 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:

  1. Sua conta da AWS.
  2. 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.

Endpoints privados

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 .result

Este 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 VPCEndpointsCreate 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:

Configurações do endpoint do AWS PrivateLink

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:

Selecione a VPC e as 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.

ID do endpoint da VPC

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_id3

Depois 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".

Filtro de endpoints privados

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 | jq

Para 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 | jq

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.

Nome DNS do endpoint privado
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 .result

Isso 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 inbound no grupo de segurança anexado ao endpoint e permita as portas do ClickHouse.
  • Verifique as regras de outbound no 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.privateEndpointIds
Conectando-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.

Navigation