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¶
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.com或artifactory.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.x 或 44.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 共享的客户联系人
- 任何主机名或命名限制