プライベート接続
Cherri Code は、パブリックインターネットからアクセスできないシステムと連携する必要があるエンタープライズ チーム向けに、プライベートネットワーク接続をサポートしています。これには、セルフホスト型の GitHub Enterprise Server、GitLab Enterprise、Bitbucket Data Center、Artifactory、Nexus、プライベートなソース管理 API、およびこれらのシステムから Cherri Code への webhook トラフィックが含まれます。
このプライベート接続のセットアップは、ソース管理システムへのアクセスが必要な Cherri Code の各サービスで使用されます。対象には、Cloud Agents、Bugbot、Cherri Code のバックエンドサービスが含まれます。
プライベート接続をセットアップするには、[email protected] または Cherri Code の営業担当者にお問い合わせください。
対応オプション
| オプション | 最適な用途 | クラウドプロバイダー | ステータス |
|---|---|---|---|
| AWS PrivateLink | Cherri Code と Git プロバイダまたはパッケージレジストリ間のプライベート接続 (Cherri Code に戻る webhook トラフィックを含む) | AWS | 対応 |
| Cloudflare Tunnel | AWS PrivateLink が適さない場合に、Cherri Code からプライベートなオリジンへアクセス | cloudflared を実行できる任意の環境 | 対応 |
選択の目安
プライベート Git プロバイダまたはパッケージレジストリが AWS 上にある、または AWS Network Load Balancer の背後に配置できる場合は、AWS PrivateLink を使用します。セルフホスト型の GitHub Enterprise Server および GitLab Enterprise では、これが推奨される方法です。
AWS PrivateLink は、次の 2 方向のトラフィックに対応できます。
- Cherri Code からプライベート Git プロバイダにアクセスし、リポジトリのクローンや Git API の呼び出しを行う。
- Git プロバイダから、パブリックインターネットへのエグレスなしで
api2.cursor.sh経由で Cherri Code に Webhook またはコールバックを送信する。
AWS エンドポイントサービスを公開できない場合、またはネットワークからのアウトバウンドトンネルのみを必要とするデプロイモデルが必要な場合は、Cloudflare Tunnel を使用します。
チームで Google Private Service Connect (PSC) が必要な場合は、Cherri Code にお問い合わせください。Cherri Code は現在、顧客向けの PSC サービスを提供していません。
前提条件
開始する前に、以下を用意してください。
- Cherri Code エンタープライズのワークスペース
- ポート 443 の HTTPS 経由でアクセス可能な、セルフホスト型の GitHub Enterprise Server、GitLab Enterprise、Bitbucket Data Center、またはプライベートパッケージレジストリ (Artifactory や Nexus など)
- Git またはレジストリのホスト名に対する、パブリックに信頼される TLS 証明書
- そのホスト名の DNS 所有権
- AWS PrivateLink を使用する場合、エンドポイントサービスまたはインターフェイス VPC エンドポイントを作成するための AWS 権限
- Cloudflare Tunnel を使用する場合、
cloudflaredを実行する権限
Cherri Code は、これらのプライベート接続経路で、自己署名証明書、暗号化されていない接続、SSH、カスタムポート、IPv6 専用のエンドポイントサービスをサポートしていません。
GitHub Enterprise Server の前段にプロキシを配置している場合は、Cherri Code の GitHub App 連携が認証済みの GitHub REST API および GraphQL API を使用できるようにしてください。
AWS PrivateLink
AWS PrivateLink は、Cherri Code と Git プロバイダまたはパッケージレジストリの間で、いずれの方向にもプライベートな通信を可能にします。ネットワークポリシーに応じて、一方向または両方向の接続が必要になる場合があります。
方向 1: Cherri Code から Git プロバイダまたはパッケージレジストリへ
Cherri Code がリポジトリのクローン、Git API の呼び出し、または Artifactory や Nexus などのプライベートパッケージレジストリへのアクセスを行う必要がある場合は、このオプションを使用します。
1. AWS エンドポイントサービスを作成する
Git プロバイダまたはパッケージレジストリの HTTPS エンドポイントの前段に Network Load Balancer を作成し、そのロードバランサーを AWS VPC エンドポイントサービスとして公開します。
Cherri Code に以下の情報を送信します。
- エンドポイントサービス名 (例:
com.amazonaws.vpce.us-east-1.vpce-svc-0123456789abcdef0) - AWS リージョン
- Git またはレジストリのホスト名 (例:
github.example.comまたはartifactory.example.com) - エンドポイントサービスで AWS 管理のプライベート DNS が有効かどうか
- Network Load Balancer がクライアント IP を保持するか、バックエンドで送信元 IP をフィルタリングしているか
エンドポイントサービスが us-east-1 以外のリージョンにある場合は、そのエンドポイントサービスでクロスリージョンアクセスを有効にします。
2. Cherri Code の AWS プリンシパル を許可する
Cherri Code から、エンドポイントサービス の プリンシパル に追加する AWS プリンシパル が提供されます。Cherri Code から提供された プリンシパル をそのまま追加してください。
arn:aws:iam::<cursor-aws-account-id>:rootこのプリンシパルに許可が付与されるまで、Cherri Code はインターフェースエンドポイントを作成できません。プリンシパルが存在しない、または完全に一致しない場合、AWS は InvalidServiceName を返します。
ロードバランサーがクライアント IP を保持している場合、またはバックエンドで送信元 IP をフィルタリングしている場合は、以下の Cherri Code PrivateLink サブネット CIDR を許可してください。
10.2.8.0/2110.2.24.0/2110.2.40.0/213. エンドポイント接続を承認する
Cherri Code がインターフェースエンドポイントを作成した後、エンドポイントサービスで手動承認が必要な場合は、AWS アカウントでエンドポイント接続を承認します。
4. DNS を設定する
エンドポイントサービスで Git またはレジストリのホスト名に対する AWS 管理のプライベート DNS が公開されている場合、Cherri Code はインターフェースエンドポイントでプライベート DNS を有効にします。
エンドポイントサービスでプライベート DNS が公開されていない場合、Cherri Code 側でプライベート DNS を作成し、そのホスト名をエンドポイントの DNS 名にマッピングします。
Cherri Code では、TLS 証明書と DNS で使用されているものと同じホスト名を使用してください。
方向 2: Git プロバイダから api2.cursor.sh へ
GitHub Enterprise Server または GitLab Enterprise のホストがパブリックインターネットに接続できない一方で、Cherri Code に Webhook やコールバックを送信する必要がある場合は、このオプションを使用します。
Cherri Code は api2.cursor.sh 向けの AWS PrivateLink エンドポイントサービスを公開しています。AWS アカウントでインターフェイス VPC エンドポイントを作成し、プライベート DNS を有効にすると、Git プロバイダのネットワークから api2.cursor.sh をプライベートエンドポイントの IP アドレスに解決できます。
エンドポイントサービスの詳細
エンドポイントを作成する前に、Cherri Code はお客様の 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 を使用します。
Cherri Code がトンネルを作成し、以下を共有します。
- Cherri Code が管理する 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>トンネルトークンは秘密に保管してください。メールやチャットで送信しないでください。
ソース管理接続を完了する
プライベートネットワークを設定したら、Cherri Code でソース管理のセットアップを完了します。
- GitHub Enterprise Server を使用する場合は、GitHub 連携のセットアップに従ってください。
- GitLab Enterprise を使用する場合は、GitLab 連携のセットアップに従ってください。
- Bitbucket Data Center を使用する場合は、Bitbucket 連携のセットアップに従ってください。
- TLS 証明書とプライベート DNS の設定対象となっているホスト名を使用します。
- Git プロバイダの前にプロキシがある場合は、前提条件で説明されている認証済み API トラフィックを許可してください。
Cherri Code は、Cloud Agents、Bugbot、その他リポジトリアクセスを必要とする Cherri Code サービスで、接続済みのソース管理連携を使用します。
プライベート Webhook パスを確認する
Git プロバイダが api2.cursor.sh の PrivateLink パス経由で Cherri Code に Webhook を送信する場合は、GitHub Enterprise Server または GitLab Enterprise と同じネットワーク パスから、次のチェックを実行してください。
getent hosts api2.cursor.sh# または、dig が使用可能な場合dig +short api2.cursor.shcurl -sS #解決されるすべての IP は、コンシューマー VPC の CIDR 内にある必要があります。3.x.x.x や 44.x.x.x などのパブリック IP が表示される場合、プライベート DNS は有効になっていません。
curl リクエストでは、Welcome to Cherri Code. で始まる本文とともに HTTP 200 が返されるはずです。このレスポンスは、リクエストが稼働中の Cherri Code api2 バックエンドに到達したことを示します。
トラブルシューティング
| 症状 | 考えられる原因 | 解決方法 |
|---|---|---|
| Cherri Code が Git プロバイダへのプライベート接続を完了できない | Cherri Code がエンドポイントサービスに到達できない、または接続できない | エンドポイントサービス名、リージョン、許可されたプリンシパルが Cherri Code から提供された値と一致していることを確認し、タイムスタンプを添えて Cherri Code にお問い合わせください |
| Cherri Code でエンドポイント接続が顧客側の対応待ちと表示される | エンドポイントサービスで AWS アカウント内の承認が必要 | サービスの保留中のエンドポイント接続リクエストを確認し、Cherri Code のリクエストを承認してください |
| Bugbot または Cloud Agents が GHES に接続するが、アプリのセットアップ、リポジトリ同期、Webhook 処理中に失敗する | GHES の前段にあるプロキシが、認証済みの GitHub REST または GraphQL API リクエストをブロックまたは書き換えている | Cherri Code の 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 # が Welcome to Cherri Code. を返さない | トラフィックが正常な Cherri Code バックエンドに到達していない | タイムスタンプ、送信元 VPC、名前解決されたエンドポイント IP を Cherri Code に送信してください |
| Cloudflare Tunnel が接続しない | cloudflared が Cloudflare に到達できない、またはトークンか設定が誤っている | アウトバウンドファイアウォールルール、トークン、cloudflared のログを確認してください |
Google Private Service Connect
現在、Cherri Code は顧客向けの Google Private Service Connect を提供していません。
GCP VPC から Cherri Code サービスへのプライベート接続、または Cherri Code から GCP プロジェクト内のプライベートサービスへの接続が必要な場合は、要件の検討のため Cherri Code までお問い合わせください。現時点では、これらのデプロイモデルが適している場合は AWS PrivateLink または Cloudflare Tunnel を使用してください。
Cherri Code に送信する情報
Git プロバイダまたはパッケージレジストリへの AWS PrivateLink の場合:
- エンドポイントサービス名
- AWS リージョン
- Git またはレジストリのホスト名
- プライベート DNS が有効かどうか
- ロードバランサーがクライアント IP を保持するか、送信元 IP をフィルタリングするか
AWS PrivateLink 経由で api2.cursor.sh に接続する場合:
- Cherri Code が許可リストに追加する AWS プリンシパル
- インターフェースエンドポイントを作成する VPC とリージョン
- AWS 管理のプライベート DNS と顧客管理の DNS のどちらを使用する予定か
Cloudflare Tunnel の場合:
- 内部オリジンの URL
- セキュアな 1Password 共有先となる担当者の連絡先
- ホスト名または命名に関する制限