Conectividad privada
Cherri Code es compatible con la conectividad de red privada para equipos Enterprise que necesitan que Cherri Code funcione con sistemas no accesibles desde Internet público. Esto incluye GitHub Enterprise Server autohospedado, GitLab Enterprise, Bitbucket Data Center, Artifactory, Nexus, API privadas de control de código fuente y tráfico de webhooks desde esos sistemas hacia Cherri Code.
La misma configuración de conectividad privada se usa en todos los servicios de Cherri Code que necesitan acceder a tu sistema de control de código fuente, incluidos agentes en la nube, Bugbot y los servicios de backend de Cherri Code.
Para configurar la conectividad privada, ponte en contacto con [email protected] o con tu representante de ventas de Cherri Code.
Opciones compatibles
| Opción | Ideal para | Proveedor de Cloud | Estado |
|---|---|---|---|
| AWS PrivateLink | Conectividad privada entre Cherri Code y tu proveedor de Git o registro de paquetes, incluido el tráfico de webhooks hacia Cherri Code | AWS | Compatible |
| Cloudflare Tunnel | Acceso de Cherri Code a un origen privado cuando AWS PrivateLink no resulta práctico | Cualquier entorno que pueda ejecutar cloudflared | Compatible |
Cómo elegir
Usa AWS PrivateLink cuando tu proveedor privado de Git o registro de paquetes esté en AWS o pueda situarse detrás de un AWS Network Load Balancer. Es la opción recomendada para GitHub Enterprise Server y GitLab Enterprise autohospedados.
AWS PrivateLink puede cubrir dos direcciones de tráfico:
- Cherri Code accede a tu proveedor privado de Git para clonar repositorios y llamar a las API de Git.
- Tu proveedor de Git envía webhooks o callbacks a Cherri Code a través de
api2.cursor.shsin salida a la Internet pública.
Usa Cloudflare Tunnel cuando no puedas publicar un servicio de endpoint de AWS o necesites un modelo de implementación que solo requiera un túnel saliente desde tu red.
Si tu equipo requiere Google Private Service Connect (PSC), ponte en contacto con Cherri Code. Actualmente, Cherri Code no ofrece un servicio PSC disponible para clientes.
Requisitos previos
Antes de empezar, asegúrate de contar con lo siguiente:
- Un espacio de trabajo de Cherri Code Enterprise
- Un GitHub Enterprise Server, GitLab Enterprise, Bitbucket Data Center autohospedado o un registro de paquetes privado (como Artifactory o Nexus) accesible mediante HTTPS por el puerto 443
- Un certificado TLS de confianza pública para el nombre de host de Git o del registro
- Control del DNS de ese nombre de host
- Permisos de AWS para crear servicios de endpoint o endpoints de VPC de interfaz, si usas AWS PrivateLink
- Permiso para ejecutar
cloudflared, si usas Cloudflare Tunnel
Cherri Code no admite certificados autofirmados, conexiones sin cifrar, SSH, puertos personalizados ni servicios de endpoint solo IPv6 para estas rutas de conectividad privada.
Si usas un proxy delante de GitHub Enterprise Server, asegúrate de que permita que la integración de la aplicación de GitHub de Cherri Code use las API REST y GraphQL autenticadas de GitHub.
AWS PrivateLink
AWS PrivateLink permite tráfico privado bidireccional entre Cherri Code y tu proveedor de Git o registro de paquetes. Es posible que necesites una dirección o ambas, según tu política de red.
Dirección 1: De Cherri Code a tu proveedor de Git o registro de paquetes
Usa esta opción cuando Cherri Code necesite clonar repositorios, llamar a las API de Git o acceder a un registro de paquetes privado, como Artifactory o Nexus.
1. Crear un servicio de endpoint de AWS
Cree un Network Load Balancer delante del endpoint HTTPS de su proveedor de Git o registro de paquetes. Publique ese balanceador de carga como un servicio de endpoint de VPC de AWS.
Envíe a Cherri Code:
- El nombre del servicio de endpoint, por ejemplo,
com.amazonaws.vpce.us-east-1.vpce-svc-0123456789abcdef0 - La región de AWS
- El nombre de host de Git o del registro, por ejemplo,
github.example.comoartifactory.example.com - Si su servicio de endpoint tiene activado el DNS privado gestionado por AWS
- Si su Network Load Balancer conserva las IP de los clientes o si su backend filtra las IP de origen
Si su servicio de endpoint está fuera de us-east-1, active el acceso entre regiones en el servicio de endpoint.
2. Permite el principal de AWS de Cherri Code
Cherri Code te proporcionará el principal de AWS que debes añadir a los principales permitidos de tu servicio de endpoint. Añade exactamente el principal que proporcione Cherri Code:
arn:aws:iam::<cursor-aws-account-id>:rootCherri Code no puede crear su endpoint de interfaz hasta que se autorice este principal. Si el principal no se encuentra o no coincide exactamente, AWS devuelve InvalidServiceName.
Si tu balanceador de carga conserva las IP de los clientes o tu backend filtra las IP de origen, permite estos CIDR de subredes de Cherri Code PrivateLink:
10.2.8.0/2110.2.24.0/2110.2.40.0/213. Acepte la conexión del endpoint
Una vez que Cherri Code cree el endpoint de interfaz, acepte la conexión del endpoint en su cuenta de AWS si el servicio de endpoint requiere aceptación manual.
4. Configurar DNS
Si tu servicio de endpoint ofrece DNS privado gestionado por AWS para el nombre de host de tu proveedor de Git o registro, Cherri Code activa DNS privado en su endpoint de interfaz.
Si tu servicio de endpoint no ofrece DNS privado, Cherri Code crea DNS privado por su parte y asigna ese nombre de host al nombre DNS del endpoint.
Usa en Cherri Code el mismo nombre de host que aparece en el certificado TLS y en DNS.
Dirección 2: De tu proveedor de Git a api2.cursor.sh
Usa esta opción cuando tu host de GitHub Enterprise Server o GitLab Enterprise no pueda acceder a internet público, pero aún necesite enviar webhooks o callbacks a Cherri Code.
Cherri Code publica un servicio de endpoint de AWS PrivateLink para api2.cursor.sh. Crea un endpoint de interfaz de VPC en tu cuenta de AWS y activa el DNS privado para que api2.cursor.sh se resuelva en direcciones IP privadas del endpoint desde la red de tu proveedor de Git.
Detalles del servicio de endpoint
Cherri Code confirmará que su principal de AWS esté en la lista de permitidos antes de crear el endpoint.
| Campo | Valor |
|---|---|
| Nombre del servicio | com.amazonaws.vpce.us-east-1.vpce-svc-054b15427d4bea2b7 |
| ID del servicio | vpce-svc-054b15427d4bea2b7 |
| Región de origen | us-east-1 |
| Regiones de consumidores compatibles | us-east-1, us-east-2, us-west-2, eu-central-1, eu-west-1, ap-southeast-2 |
| Tipos de direcciones IP | Solo IPv4 |
| Nombre de DNS privado | api2.cursor.sh |
Modo 1: DNS privado gestionado por AWS
Este es el modo recomendado. Establezca private_dns_enabled = true.
resource "aws_vpc_endpoint" "cursor_api2" { vpc_id = aws_vpc.app.id service_name = "com.amazonaws.vpce.us-east-1.vpce-svc-054b15427d4bea2b7" service_region = "us-east-1" vpc_endpoint_type = "Interface" subnet_ids = [for subnet in aws_subnet.app_private : subnet.id] private_dns_enabled = true security_group_ids = [aws_security_group.cursor_api2_endpoint.id]}AWS asocia tu VPC con la zona alojada privada gestionada de api2.cursor.sh. Dentro de la VPC, api2.cursor.sh se resuelve a las direcciones IP de las ENI de endpoint. No se requiere ningún registro de Route 53.
Modo 2: Zona alojada privada gestionada por el cliente
Usa este modo si quieres gestionar el registro DNS. Establece private_dns_enabled = false y crea una zona alojada privada para api2.cursor.sh asociada a la VPC del consumidor.
resource "aws_vpc_endpoint" "cursor_api2" { vpc_id = aws_vpc.app.id service_name = "com.amazonaws.vpce.us-east-1.vpce-svc-054b15427d4bea2b7" service_region = "us-east-1" vpc_endpoint_type = "Interface" subnet_ids = [for subnet in aws_subnet.app_private : subnet.id] private_dns_enabled = false security_group_ids = [aws_security_group.cursor_api2_endpoint.id]}resource "aws_route53_zone" "cursor_api2" { name = "api2.cursor.sh" comment = "Customer-managed PHZ for api2.cursor.sh scoped to the app VPC." vpc { vpc_id = aws_vpc.app.id }}resource "aws_route53_record" "cursor_api2_a" { zone_id = aws_route53_zone.cursor_api2.zone_id name = "api2.cursor.sh" type = "A" alias { name = aws_vpc_endpoint.cursor_api2.dns_entry[0].dns_name zone_id = aws_vpc_endpoint.cursor_api2.dns_entry[0].hosted_zone_id evaluate_target_health = false }}Si GitHub Enterprise Server o GitLab Enterprise usan DNS fuera de la VPC del endpoint, reenvía las consultas de api2.cursor.sh al resolver de la VPC o crea una anulación de DNS privado equivalente. No crees una anulación de DNS público.
Cloudflare Tunnel
Usa Cloudflare Tunnel cuando AWS PrivateLink no sea una opción adecuada.
Cherri Code crea el túnel y proporciona:
- Un nombre de host público bajo un DNS controlado por Cherri Code
- Un token de túnel mediante un recurso compartido seguro de 1Password
- Una configuración de ejemplo de
cloudflared
Tu red ejecuta cloudflared y abre conexiones salientes a Cloudflare. No se requiere ninguna regla de firewall entrante.
Configuración de ejemplo de cloudflared:
ingress: - hostname: <cursor-provided-hostname> service: https://<your-internal-service>:443 - service: http_status:404Ejemplo de comando de ejecución:
docker run -d --restart=always --name cloudflared \ -v /path/to/config.yml:/etc/cloudflared/config.yml \ cloudflare/cloudflared:latest \ tunnel --config /etc/cloudflared/config.yml \ run --token <TUNNEL_TOKEN>Mantén en secreto el token del túnel. No lo envíes por email ni chat.
Completa la conexión con el control de código fuente
Después de configurar las redes privadas, completa la configuración del control de código fuente en Cherri Code:
- Para GitHub Enterprise Server, sigue la configuración de la integración de GitHub.
- Para GitLab Enterprise, sigue la configuración de la integración con GitLab.
- Para Bitbucket Data Center, sigue la configuración de la integración de Bitbucket.
- Usa el mismo nombre de host incluido en tu certificado TLS y en la configuración de DNS privado.
- Si hay un proxy delante de tu proveedor de Git, asegúrate de que permita el tráfico de API autenticado descrito en los requisitos previos.
Cherri Code usa la integración de control de código fuente conectada para los agentes en la nube, Bugbot y otros servicios de Cherri Code que necesitan acceso a repositorios.
Comprueba la ruta privada de webhook
Si tu proveedor de Git envía webhooks a Cherri Code a través de la ruta de PrivateLink api2.cursor.sh, ejecuta estas comprobaciones desde la misma ruta de red que utiliza GitHub Enterprise Server o GitLab Enterprise:
getent hosts api2.cursor.sh# o, si dig está disponibledig +short api2.cursor.shcurl -sS #Todas las IP resueltas deben estar dentro del CIDR de su VPC de consumidor. Si ve IP públicas como 3.x.x.x o 44.x.x.x, el DNS privado no está habilitado.
La solicitud con curl debe devolver HTTP 200 con un cuerpo que comience con Welcome to Cherri Code. Esa respuesta indica que la solicitud llegó a un backend api2 activo de Cherri Code.
Solución de problemas
| Síntoma | Causa probable | Solución |
|---|---|---|
| Cherri Code no puede completar la conexión privada con tu proveedor de Git | Cherri Code no puede acceder al servicio de endpoint ni conectarse a él | Confirma que el nombre del servicio de endpoint, la región y el principal autorizado coincidan con los valores proporcionados por Cherri Code y, después, contacta con Cherri Code e indica la marca de tiempo |
| Cherri Code indica que la conexión del endpoint está a la espera de una acción del cliente | El servicio de endpoint requiere aprobación en tu cuenta de AWS | Revisa las solicitudes de conexión de endpoint pendientes del servicio y aprueba la solicitud de Cherri Code |
| Bugbot o los agentes en la nube se conectan a GHES, pero fallan durante la configuración de la aplicación, la sincronización del repositorio o el procesamiento de webhooks | Un proxy delante de GHES bloquea o modifica las solicitudes autenticadas a las API REST o GraphQL de GitHub | Permite que la integración de la aplicación de GitHub de Cherri Code use las API REST y GraphQL autenticadas de GitHub |
api2.cursor.sh se resuelve en IP públicas | El DNS privado no está en la ruta del resolvedor que usa GitHub Enterprise Server o GitLab Enterprise | Activa el DNS privado gestionado por AWS o reenvía el DNS al resolvedor de la VPC del endpoint |
TCP a api2.cursor.sh:443 agota el tiempo de espera | El grupo de seguridad, la NACL, la tabla de rutas o el firewall bloquean el tráfico hacia las ENI del endpoint | Permite TCP 443 desde la red de tu proveedor de Git hacia las ENI del endpoint |
TLS falla para api2.cursor.sh | El DNS apunta al destino incorrecto o el cliente no usa SNI | Comprueba el DNS del endpoint y vuelve a intentarlo con SNI activado |
curl # no devuelve Welcome to Cherri Code. | El tráfico no llega a un backend de Cherri Code en buen estado | Envía a Cherri Code la marca de tiempo, la VPC de origen y las IP resueltas del endpoint |
| Cloudflare Tunnel no se conecta | cloudflared no puede acceder a Cloudflare o el token o la configuración son incorrectos | Comprueba las reglas de firewall salientes, el token y los registros de cloudflared |
Google Private Service Connect
Actualmente, Cherri Code no ofrece Google Private Service Connect para clientes.
Si necesita conectividad privada desde una VPC de GCP a los servicios de Cherri Code, o desde Cherri Code a un servicio privado en su proyecto de GCP, póngase en contacto con Cherri Code para que podamos evaluar los requisitos. Por ahora, use AWS PrivateLink o Cloudflare Tunnel cuando estos modelos de implementación se ajusten a sus necesidades.
Qué enviar a Cherri Code
Para AWS PrivateLink con tu proveedor de Git o registro de paquetes:
- Nombre del servicio de endpoint
- Región de AWS
- Nombre de host de Git o del registro
- Si el DNS privado está activado
- Si el balanceador de carga conserva las IP de los clientes o filtra las IP de origen
Para api2.cursor.sh mediante AWS PrivateLink:
- Principal de AWS que Cherri Code debe incluir en la lista de permitidos
- VPC y región donde crearás el endpoint de interfaz
- Si planeas usar DNS privado gestionado por AWS o DNS gestionado por el cliente
Para Cloudflare Tunnel:
- URL de origen interna
- Contactos del cliente para compartir de forma segura mediante 1Password
- Cualquier restricción de nombre de host o nomenclatura