《Cursor文档》-私有网络连接

Cursor 支持私有网络连接,满足企业版团队让 Cursor 与无法从公共互联网访问的系统协同工作的需求。这些系统包括自托管 GitHub Enterprise Server、GitLab Enterprise、Bitbucket Data Center、Artifactory、Nexus、私有源代码控制 API,以及这些系统回传至 Cursor 的 webhook 流量。

所有需要访问您的源代码控制系统的 Cursor 服务都使用相同的私有网络连接设置,包括 云端代理Bugbot 和 Cursor 后端服务。

如需设置私有网络连接,请联系 hi@cursor.com 或您的 Cursor 销售代表。

支持的选项

选项 最适合用于 云服务提供商 状态
AWS PrivateLink 在 Cursor 与您的 Git 提供商或软件包注册表之间建立私有网络连接,包括返回 Cursor 的 webhook 流量 AWS 支持
Cloudflare Tunnel 当 AWS PrivateLink 不适用时,让 Cursor 访问私有源站 可运行 cloudflared 的任何环境 支持

如何选择

如果您的私有 Git 提供商或软件包注册表位于 AWS 中,或可部署在 AWS 网络负载均衡器之后,请使用 AWS PrivateLink。这是自托管 GitHub Enterprise Server 和 GitLab Enterprise 的首选方案。

AWS PrivateLink 可覆盖两个方向的流量:

  • Cursor 访问您的私有 Git 提供商,以克隆仓库并调用 Git API。
  • 您的 Git 提供商通过 api2.cursor.sh 向 Cursor 发送 Webhook 或回调,无需经由公共互联网出站。

如果无法发布 AWS 端点服务,或需要仅从您的网络建立出站隧道的部署模式,请使用 Cloudflare Tunnel。

如果您的团队需要 Google Private Service Connect (PSC),请联系 Cursor。Cursor 目前不提供面向客户的 PSC 服务。

前提条件

开始前,请确保您具备:

  • Cursor 企业版工作区
  • 可通过 HTTPS 的 443 端口访问的自托管 GitHub Enterprise Server、GitLab Enterprise、Bitbucket Data Center 或私有软件包注册表 (如 Artifactory 或 Nexus)
  • Git 或注册表主机名的公信 TLS 证书
  • 该主机名的 DNS 所有权
  • 如果使用 AWS PrivateLink,具备创建端点服务或接口 VPC 端点的 AWS 权限
  • 如果使用 Cloudflare Tunnel,具备运行 cloudflared 的权限

Cursor 不支持在这些私有网络连接路径中使用自签名证书、未加密连接、SSH、自定义端口或仅支持 IPv6 的端点服务。

如果在 GitHub Enterprise Server 前部署了代理,请确保该代理允许 Cursor 的 GitHub App 集成使用经身份验证的 GitHub REST 和 GraphQL API。

AWS PrivateLink 支持在 Cursor 与您的 Git 提供商或软件包注册表之间双向传输私有流量。具体需要单向还是双向连接,取决于您的网络策略。

方向 1:从 Cursor 到你的 Git 提供商或软件包注册表

当 Cursor 需要克隆仓库、调用 Git API 或访问 Artifactory 或 Nexus 等私有软件包注册表时,请选择此选项。

1. 创建 AWS 端点服务

在 Git 提供商或软件包注册表的 HTTPS 端点前配置网络负载均衡器。将该负载均衡器发布为 AWS VPC 端点服务。

向 Cursor 提供以下信息:

  • 端点服务名称,例如 com.amazonaws.vpce.us-east-1.vpce-svc-0123456789abcdef0
  • AWS 区域
  • Git 或注册表主机名,例如 github.example.comartifactory.example.com
  • 端点服务是否启用了 AWS 托管私有 DNS
  • 网络负载均衡器是否保留客户端 IP,或后端是否按源 IP 进行筛选

如果端点服务不在 us-east-1,请在该端点服务上启用跨区域访问。

2. 授权 Cursor 的 AWS 主体

Cursor 会提供需要添加到端点服务“允许的主体”列表中的 AWS 主体。请添加 Cursor 提供的确切主体:

arn:aws:iam::<cursor-aws-account-id>:role/<cursor-provided-role>

在允许此主体访问前,Cursor 无法创建接口端点。如果该主体缺失或不完全匹配,AWS 会返回 InvalidServiceName

如果您的负载均衡器保留客户端 IP,或后端会筛选源 IP,请允许以下 Cursor PrivateLink 子网 CIDR:

10.2.8.0/21
10.2.24.0/21
10.2.40.0/21

3. 接受端点连接

Cursor 创建接口端点后,如果端点服务需要手动接受,请在您的 AWS 账户中接受该端点连接。

4. 配置 DNS

如果端点服务为 Git 或注册表主机名提供 AWS 托管的私有 DNS,Cursor 会在其接口端点上启用私有 DNS。

如果端点服务不提供私有 DNS,Cursor 会自行创建私有 DNS,并将该主机名映射到端点 DNS 名称。

在 Cursor 中使用与 TLS 证书和 DNS 中相同的主机名。

方向 2:从您的 Git 提供商到 api2.cursor.sh

如果您的 GitHub Enterprise Server 或 GitLab Enterprise 主机无法访问公共互联网,但仍需向 Cursor 发送 Webhook 或回调,请使用此选项。

Cursor 为 api2.cursor.sh 提供 AWS PrivateLink 端点服务。您可以在 AWS 账户中创建接口 VPC 端点并启用私有 DNS,使您的 Git 提供商网络将 api2.cursor.sh 解析为私有端点 IP 地址。

端点服务详情

创建端点前,Cursor 会确认您的 AWS 主体已加入允许列表。

字段
服务名称 com.amazonaws.vpce.us-east-1.vpce-svc-054b15427d4bea2b7
服务 ID vpce-svc-054b15427d4bea2b7
主区域 us-east-1
支持的使用方区域 us-east-1, us-east-2, us-west-2, eu-central-1, eu-west-1, ap-southeast-2
IP 地址类型 仅 IPv4
私有 DNS 名称 api2.cursor.sh

模式 1:AWS 托管的私有 DNS

这是推荐模式。设置 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 会将您的 VPC 与 api2.cursor.sh 的私有托管区域关联。在 VPC 内,api2.cursor.sh 会解析为端点 ENI 的 IP 地址。无需创建 Route 53 记录。

模式 2:客户管理的私有托管区域

如果您希望自行管理 DNS 记录,请使用此模式。将 private_dns_enabled = false,然后为消费者 VPC 创建一个解析 api2.cursor.sh 的私有托管区域。

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

如果 GitHub Enterprise Server 或 GitLab Enterprise 使用端点 VPC 外部的 DNS,请将对 api2.cursor.sh 的查询转发至 VPC 解析器,或创建等效的私有 DNS 覆盖。请勿创建公共 DNS 覆盖。

Cloudflare Tunnel

当 AWS PrivateLink 不适用时,请使用 Cloudflare Tunnel。

Cursor 会创建隧道,并提供:

  • 由 Cursor 控制的 DNS 下的公共主机名
  • 通过安全的 1Password 共享提供的隧道令牌
  • cloudflared 配置示例

您的网络运行 cloudflared 并向 Cloudflare 建立出站连接,无需配置入站防火墙规则。

cloudflared 配置示例:

ingress:
  - hostname: <cursor-provided-hostname>
    service: https://<your-internal-service>:443
  - service: http_status:404

运行命令示例:

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>

请妥善保管隧道令牌,切勿通过电子邮件或 chat 发送。

完成源代码控制连接

配置好私有网络后,请在 Cursor 中完成源代码控制设置:

  • 如果使用 GitHub Enterprise Server,请按照 GitHub 集成设置 操作。
  • 如果使用 GitLab Enterprise,请按照 GitLab 集成设置 操作。
  • 如果使用 Bitbucket Data Center,请按照 Bitbucket 集成设置 操作。
  • 请使用 TLS 证书和私有 DNS 配置中包含的同一主机名。
  • 如果 Git 提供商前部署了代理,请确保其允许前提条件中所述的已认证 API 流量。

Cursor 会使用已连接的源代码控制集成,为云端代理、Bugbot 及其他需要访问代码仓库的 Cursor 服务提供支持。

检查私有 Webhook 路径

如果您的 Git 提供商通过 api2.cursor.sh PrivateLink 路径将 Webhook 发送到 Cursor,请从 GitHub Enterprise Server 或 GitLab Enterprise 所使用的同一网络路径运行以下检查:

getent hosts api2.cursor.sh
# 或者,如果有 dig 命令
dig +short api2.cursor.sh
curl -sS https://api2.cursor.sh/

解析出的每个 IP 都应位于您的 consumer VPC CIDR 内。如果看到 3.x.x.x44.x.x.x 等 public IPs,说明私有 DNS 未生效。

curl 请求应返回 HTTP 200,且响应体以 Welcome to Cursor. 开头。这表明请求已到达正常运行的 Cursor api2 backend。

疑难排查

症状 可能原因 解决方法
Cursor 无法完成与您的 Git 提供商之间的私有连接 Cursor 无法访问或连接到端点服务 确认端点服务名称、区域和获准主体与 Cursor 提供的信息一致,然后将时间戳告知 Cursor
Cursor 显示端点连接正在等待客户操作 端点服务需要在您的 AWS 账户中批准 查看该服务待处理的端点连接请求,并批准 Cursor 的请求
Bugbot 或 Cloud Agents 可以连接到 GHES,但在 app 设置、仓库同步或 webhook 处理时失败 GHES 前端的代理阻止或改写了经过身份验证的 GitHub REST 或 GraphQL API 请求 允许 Cursor 的 GitHub App 集成使用经过身份验证的 GitHub REST 和 GraphQL API
api2.cursor.sh 解析为公共 IP 地址 GitHub Enterprise Server 或 GitLab Enterprise 使用的解析器路径中未配置私有 DNS 启用 AWS 托管的私有 DNS,或将 DNS 转发到端点 VPC 解析器
api2.cursor.sh:443 的 TCP 连接超时 安全组、NACL、路由表或防火墙阻止了流向端点 ENI 的流量 允许从您的 Git 提供商网络到端点 ENI 的 TCP 443 流量
api2.cursor.sh 的 TLS 连接失败 DNS 指向错误的目标,或客户端未使用 SNI 检查端点 DNS,并启用 SNI 后重试
curl https://api2.cursor.sh/ 未返回 Welcome to Cursor. 流量未到达正常运行的 Cursor 后端 将时间戳、源 VPC 和解析得到的端点 IP 地址告知 Cursor
Cloudflare Tunnel 无法连接 cloudflared 无法连接到 Cloudflare,或 token/config 不正确 检查出站防火墙规则、token 及 cloudflared 日志

Google Private Service Connect

Cursor 目前尚未提供面向客户的 Google Private Service Connect。

如果您需要从 GCP VPC 私有网络连接到 Cursor 服务,或从 Cursor 连接到 GCP 项目中的私有服务,请联系 Cursor,以便我们评估具体需求。目前,在适用的情况下,请使用 AWS PrivateLink 或 Cloudflare Tunnel。

需提供给 Cursor 的信息

对于连接您的 Git 提供商或软件包注册表的 AWS PrivateLink:

  • 端点服务名称
  • AWS 区域
  • Git 或注册表主机名
  • 是否启用了私有 DNS
  • 负载均衡器是否保留客户端 IP 地址或筛选源 IP 地址

对于通过 AWS PrivateLink 访问 api2.cursor.sh

  • 需要加入 Cursor 允许列表的 AWS 主体
  • 将创建接口端点的 VPC 和区域
  • 是否计划使用 AWS 托管的私有 DNS 或客户管理的 DNS

对于 Cloudflare Tunnel:

  • 内部源站 URL
  • 用于安全的 1Password 共享的客户联系人
  • 任何主机名或命名限制

延伸阅读

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜