Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

AWS PrivateLink

Característica del plan Scale

AWS PrivateLink está disponible en los planes Scale y Enterprise. Para actualizar el plan, visita la página de planes en Cloud Console.

Puede usar AWS PrivateLink para establecer una conectividad segura entre VPC, servicios de AWS, sus sistemas on-premise y ClickHouse Cloud sin exponer el tráfico a Internet pública. Este documento describe los pasos para conectarse a ClickHouse Cloud mediante AWS PrivateLink.

Para restringir el acceso a sus servicios de ClickHouse Cloud exclusivamente a través de direcciones de AWS PrivateLink, siga las instrucciones proporcionadas por ClickHouse Cloud en IP Access Lists.

ClickHouse Cloud admite PrivateLink entre regiones para servicios alojados en las siguientes regiones de AWS:

La tabla solo abarca regiones de alojamiento de servicios. Las regiones de endpoints de VPC de interfaz de consumidor utilizan una lista de permitidos independiente; por ejemplo, mx-central-1 es una región de consumidor permitida aunque los servicios alojados allí no puedan habilitar el acceso entre regiones.

Código de región Nombre de región
af-south-1 África (Ciudad del Cabo)
ap-east-1 Asia Pacífico (Hong Kong)
ap-northeast-1 Asia Pacífico (Tokio)
ap-northeast-2 Asia Pacífico (Seúl)
ap-south-1 Asia Pacífico (Mumbai)
ap-southeast-1 Asia Pacífico (Singapur)
ap-southeast-2 Asia Pacífico (Sídney)
ap-southeast-3 Asia Pacífico (Yakarta)
ap-southeast-5 Asia Pacífico (Malasia)
ca-central-1 Canadá (Central)
eu-central-1 Europa (Fráncfort)
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 Medio (EAU)
sa-east-1 América del Sur (São Paulo)
us-east-1 Este de EE. UU. (Virginia del Norte)
us-east-2 Este de EE. UU. (Ohio)
us-west-2 Oeste de EE. UU. (Oregón)

Complete lo siguiente para habilitar AWS PrivateLink:

  1. Obtenga el "Service name" del endpoint.
  2. Cree el endpoint de AWS.
  3. Agregue el "Endpoint ID" a la organización de ClickHouse Cloud.
  4. Agregue el "Endpoint ID" a la lista de permitidos del servicio de ClickHouse.

Puede encontrar ejemplos de Terraform aquí.

Consideraciones importantes

ClickHouse intenta agrupar sus servicios para reutilizar el mismo endpoint de servicio publicado dentro de la región de AWS. Sin embargo, esta agrupación no está garantizada, especialmente si distribuye sus servicios entre varias organizaciones de ClickHouse. Si ya tiene PrivateLink configurado para otros servicios de su organización de ClickHouse, a menudo puede omitir la mayoría de los pasos gracias a esa agrupación y pasar directamente al paso final: agregar el "Endpoint ID" de ClickHouse a la lista de permitidos del servicio de ClickHouse.

Requisitos previos para este proceso

Antes de comenzar, necesitará lo siguiente:

  1. Su cuenta de AWS.
  2. Una clave de API de ClickHouse con los permisos necesarios para crear y administrar endpoints privados en ClickHouse.

Pasos

Siga estos pasos para conectar sus servicios de ClickHouse Cloud a través de AWS PrivateLink.

Obtener el «Service name» del endpoint

Opción 1: consola de ClickHouse Cloud

En la consola de ClickHouse Cloud, abra el servicio que quiera conectar a través de PrivateLink y vaya al menú Settings.

Private Endpoints

Anote el Service name y el DNS name, y luego continúe con el siguiente paso.

Opción 2: API

Primero, define las siguientes variables de entorno antes de ejecutar cualquier 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>

Obtén el INSTANCE_ID de tu instancia de ClickHouse filtrando por región, proveedor y nombre del servicio:

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)

Obtén endpointServiceId y privateDnsHostname de tu configuración de PrivateLink:

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

Este comando debería devolver algo similar a:

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

Toma nota de endpointServiceId y privateDnsHostname continúa con el siguiente paso.

Crear endpoint de AWS

Opción 1: Consola de AWS

Abra la consola de AWS y vaya a VPCEndpointsCreate endpoints.

Seleccione Endpoint services that use NLBs and GWLBs y use Service nameconsole o endpointServiceIdAPI que obtuvo en el paso Obtain Endpoint "Service name" en el campo Service Name. Haga clic en Verify service:

Configuración del endpoint de AWS PrivateLink

Si aparece el error "Service name couldn't be verified.", póngase en contacto con el servicio de atención al cliente para solicitar que se añadan nuevas regiones a la lista de regiones compatibles.

A continuación, seleccione la VPC y las subredes:

Seleccione la VPC y las subredes

Como paso opcional, asigne grupos de seguridad/etiquetas:

Después de crear el endpoint de la VPC, anote el valor de Endpoint ID; lo necesitará en un paso posterior.

ID del endpoint de la VPC

Opción 2: AWS CloudFormation

A continuación, debes crear un endpoint de la VPC con Service nameconsole o endpointServiceIdAPI que obtuviste en el paso Obtener el "Service name" del endpoint. Asegúrate de usar los ID de subred, los grupos de seguridad y el ID de la VPC correctos.

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

Después de crear el endpoint de la VPC, toma nota del valor de Endpoint ID; lo necesitarás en un paso posterior.

Opción 3: Terraform

service_name a continuación corresponde a Service nameconsola o endpointServiceIdAPI que obtuviste en el paso Obtener "Service name" del 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."
}

Después de crear el VPC Endpoint, anota el valor de Endpoint ID; lo necesitarás en el siguiente paso.

Configurar el nombre DNS privado para el endpoint

Debe hacer que "DNS name", obtenido en el paso Obtener el "Service name" del endpoint , apunte a las interfaces de red del AWS Endpoint. Esto garantiza que los servicios/componentes dentro de su VPC/red puedan resolverlo correctamente.

Añadir "Endpoint ID" a la lista de permitidos del servicio de ClickHouse

Opción 1: consola de ClickHouse Cloud

Para agregarlo, vaya a la consola de ClickHouse Cloud, abra el servicio que desea conectar mediante PrivateLink y, a continuación, vaya a Settings. Haga clic en Set up private endpoint para abrir la configuración de los endpoints privados. Introduzca el Endpoint ID obtenido en el paso Create AWS Endpoint. Haga clic en "Create endpoint".

Filtro de endpoints privados

Para eliminarlo, vaya a la consola de ClickHouse Cloud, busque el servicio y, a continuación, vaya a Settings del servicio. Busque el endpoint que desea eliminar y elimínelo de la lista de endpoints.

Opción 2: API

Debes agregar un Endpoint ID a la lista de permitidos de cada instancia que deba estar disponible a través de PrivateLink.

Establece la variable de entorno ENDPOINT_ID con los datos del paso Crear AWS Endpoint.

Establece las siguientes variables de entorno antes de ejecutar cualquier 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 añadir un ID de endpoint a una lista de permitidos:

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 eliminar un Endpoint ID de una lista de autorizados:

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 servicio con Private Link habilitado tiene un endpoint público y uno privado. Para conectarse mediante Private Link, debe usar un endpoint privado, que será privateDnsHostnameAPI o DNS Nameconsole, obtenido en Obtener endpoint "Service name".

Obtener el hostname DNS privado

Opción 1: consola de ClickHouse Cloud

En la consola de ClickHouse Cloud, ve a Configuración. Haz clic en el botón Set up private endpoint. En el flyout que se abre, copia el DNS Name.

DNS Name del endpoint privado
Opción 2: API

Configura las siguientes variables de entorno antes de ejecutar cualquier comando:

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

Puedes obtener INSTANCE_ID en el paso.

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

Esto debería mostrar algo como esto:

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

En este ejemplo, la conexión mediante el valor del nombre de host privateDnsHostname se enrutará a PrivateLink, pero la conexión mediante el nombre de host endpointServiceId se enrutará a través de Internet.

Solución de problemas

Varios PrivateLinks en una región

En la mayoría de los casos, solo necesitas crear un único servicio de endpoint para cada VPC. Este endpoint puede enrutar solicitudes desde la VPC a varios servicios de ClickHouse Cloud. Consulta aquí

Se agotó el tiempo de espera de la conexión al endpoint privado
  • Asocia un grupo de seguridad al endpoint de la VPC.
  • Verifica las reglas de inbound del grupo de seguridad asociado al endpoint y permite los puertos de ClickHouse.
  • Verifica las reglas de outbound del grupo de seguridad asociado a la VM que se usa para probar la conectividad y permite conexiones a los puertos de ClickHouse.
Hostname privado: no se encontró la dirección del host
  • Comprueba la configuración de DNS.
La conexión fue restablecida por el par
  • Lo más probable es que el ID de endpoint no se haya añadido a la lista de permitidos del servicio. Consulta el paso.
Comprobación de filtros de endpoint

Establece las siguientes variables de entorno antes de ejecutar cualquier comando:

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

Puedes obtener INSTANCE_ID en el paso.

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
Conexión a una base de datos remota

Según la documentación de AWS PrivateLink:

Usa AWS PrivateLink cuando tengas una configuración cliente/servidor en la que quieras permitir a una o más VPC consumidoras acceso unidireccional a un servicio específico o a un conjunto de instancias en la VPC del proveedor de servicios. Solo los clientes de la VPC consumidora pueden iniciar una conexión al servicio en la VPC del proveedor de servicios.

Para conectar las funciones de tabla de MySQL o PostgreSQL en ClickHouse Cloud a una base de datos alojada en tu VPC de AWS, configura tus grupos de seguridad de AWS para permitir conexiones desde ClickHouse Cloud. Consulta las direcciones IP de salida predeterminadas de las regiones de ClickHouse Cloud, junto con las direcciones IP estáticas disponibles.

Navigation