Private Service Connect インスタンスを作成する

このページでは、Secure Source Manager の Private Service Connect インスタンスを作成する方法について説明します。

Private Service Connect インスタンスは、パブリック インターネットにエンドポイントを公開しません。Private Service Connect インスタンスを作成すると、インスタンスへの SSH(Git)アクセスと HTTPS(Git、ウェブ インターフェース、API)アクセスを提供するためのエンドポイントが作成されます。エンドポイントには、プライベート ネットワーク上の IP アドレスを割り当てる必要があります。Private Service Connect インスタンスとの間のすべてのトラフィックは、Private Service Connect エンドポイントを通過します。

Private Service Connect を使用して VPC ネットワーク内から マネージド サービスに非公開でアクセスする方法については、 Private Service Connect をご覧ください。

Secure Source Manager はシングルテナント サービスです。1 つの Secure Source Manager インスタンスには、契約 関係にある複数の企業が共同作業のために単一のインスタンスを使用する必要がある場合を除き、1 つの Google Cloud お客様のユーザーのみを含める必要があります。

複数の企業と連携してソースコードを共同で作業する場合は、企業ごとに個別のインスタンスを作成することをおすすめします。

始める前に

  1. ログイン Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、 新しいアカウントを登録します

  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Enable the Secure Source Manager API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  4. Google Cloud CLI をインストールします。

  5. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  6. gcloud CLI を初期化するには、次のコマンドを実行します:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  8. Enable the Secure Source Manager API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  9. Google Cloud CLI をインストールします。

  10. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  11. gcloud CLI を初期化するには、次のコマンドを実行します:

    gcloud init

必要なロール

Private Service Connect Secure Source Manager インスタンスの作成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

サービス ID と認証局プールを作成する

このセクションでは、独自の CA 証明書を使用する方法について説明します。プライベート インスタンスでカスタム ドメインを使用する場合は、独自の CA 証明書を使用する必要があります。カスタム ドメインを使用せずに Google-マネージド証明書を使用する場合は、 サービス ID と CA プールを作成せずに gcloud source-manager instances create コマンドを実行するだけで済みます。詳細については、Private Service Connect Secure Source Manager インスタンスを作成するをご覧ください。

独自の CA 証明書を使用する場合は、プライベート Secure Source Manager インスタンスを作成するときに認証局(CA)プール名を指定する必要があります。インスタンスの HTTPS SSL 証明書に署名するリクエストが CA プールに送信されます。

  1. 次のコマンドを実行して、プロジェクト内に Secure Source Manager API のサービス ID を作成します。

    gcloud beta services identity create \
        --service=securesourcemanager.googleapis.com \
        --project=PROJECT_ID
    

    ここで、PROJECT_ID は実際のプロジェクト ID です。

    出力は次のようになります。

    Service identity created: service-PROJECT_NUM@gcp-sa-sourcemanager.iam.gserviceaccount.com

    service-PROJECT_NUM@gcp-sa-sourcemanager.iam.gserviceaccount.com は Secure Source Manager サービス エージェント、 PROJECT_NUM はプロジェクト番号です。

  2. CSR ベースの 証明書リクエストが有効になっている認証局(CA)プールを作成します。

  3. CA を作成します。必要に応じて、ルート CA または下位 CA を作成できます。

    ルート CA と下位 CA の違いについて詳しくは、 認証局の設定を決定するをご覧ください。

  4. Secure Source Manager API サービス ID に、CA プールで新しい証明書をリクエストする権限を付与します。

    gcloud privateca pools add-iam-policy-binding CA_POOL_NAME \
        --location=CA_LOCATION \
        --member='serviceAccount:service-PROJECT_NUMBER@gcp-sa-sourcemanager.iam.gserviceaccount.com' \
        --role='roles/privateca.certificateRequester' \
        --project=CA_PROJECT_ID
    

    次のように置き換えます。

    • CA_POOL_NAME は、CA プールに付けた名前に置き換えます。
    • CA_LOCATION は、CA プールのリージョンまたはゾーンに置き換えます。
    • PROJECT_NUMBER は、Secure Source Manager が有効になっているプロジェクトのプロジェクト番号に置き換えます。プロジェクト番号を確認するには、 プロジェクトを特定するをご覧ください。
    • CA_PROJECT_ID は、CA プールを作成したプロジェクトのプロジェクト ID に置き換えます。

Private Service Connect Secure Source Manager インスタンスを作成する

HTML、API、Git HTTP、Git SSH エンドポイントのプライベート インスタンスにカスタム ドメインを割り当てることができます。カスタム ドメインには独自の CA 証明書が必要です。そのため、カスタム ドメインを使用してインスタンスを作成する場合は、CA プールを指定する必要があります。カスタム ドメインを構成できるのは、API を使用してインスタンスを作成するときのみです。インスタンスの作成後に変更することはできません。

gcloud

次のコマンドを使用して、Private Service Connect インスタンスを作成します。

gcloud source-manager instances create INSTANCE_ID \
  --region=LOCATION \
  --project=PROJECT_ID \
  --is-private \
  --ca-pool=projects/CA_PROJECT/locations/CA_LOCATION/caPools/CA_POOL_NAME

次のように置き換えます。

  • INSTANCE_ID は、インスタンスに付ける名前に置き換えます。
  • LOCATION は、インスタンスを作成するリージョンに置き換えます。サポートされているロケーションについては、ロケーションをご覧ください。
  • PROJECT_ID は、インスタンスを作成するプロジェクトの名前に置き換えます。
  • CA_PROJECT は、CA プール プロジェクトの名前に置き換えます。独自の CA 証明書を使用する場合は必須です。
  • CA_LOCATION は、CA プールを作成したリージョンに置き換えます。 独自の CA 証明書を使用する場合は必須です。
  • CA_POOL_NAME は、CA プールの名前に置き換えます。独自の CA 証明書を使用する場合は必須です。

API

次のコマンドを使用して、Private Service Connect インスタンスを作成します。

curl \
    -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://securesourcemanager.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances?instance_id=INSTANCE_ID \
    -H "Content-Type: application/json" \
    -d '{"private_config":{"is_private":true,"ca_pool":"projects/CA_PROJECT/locations/CA_LOCATION/caPools/CA_POOL_NAME","custom_host_config":{"api":"API_CUSTOM_DOMAIN", "html":"HTML_CUSTOM_DOMAIN", "git_ssh":"GIT_SSH_CUSTOM_DOMAIN", "git_http":"GIT_HTTP_CUSTOM_DOMAIN"}}}'

次のように置き換えます。

  • INSTANCE_ID は、インスタンスに付ける名前に置き換えます。
  • LOCATION は、インスタンスを作成するリージョンに置き換えます。サポートされているロケーションについては、ロケーションをご覧ください。
  • PROJECT_ID は、インスタンスを作成するプロジェクトの名前に置き換えます。
  • CA_PROJECT は、CA プール プロジェクトの名前に置き換えます。独自の CA 証明書またはカスタム ドメインを使用する場合は必須です。
  • CA_LOCATION は、CA プールを作成したリージョンに置き換えます。 独自の CA 証明書またはカスタム ドメインを使用する場合は必須です。
  • CA_POOL_NAME は、CA プールの名前に置き換えます。独自の CA 証明書またはカスタム ドメインを使用する場合は必須です。
  • API_CUSTOM_DOMAIN は、API アクセス用のカスタム ドメイン(api.source.example.com など)に置き換えます。カスタム ドメインを使用する場合にのみ必要です。
  • HTML_CUSTOM_DOMAIN は、ウェブ UI アクセス用のカスタム ドメイン(source.example.com など)に置き換えます。カスタム ドメインを使用する場合にのみ必要です。
  • GIT_SSH_CUSTOM_DOMAIN は、Git SSH アクセス用のカスタム ドメイン(ssh.source.example.com など)に置き換えます。カスタム ドメインを使用する場合にのみ必要です。
  • GIT_HTTP_CUSTOM_DOMAIN は、Git HTTP アクセス用のカスタム ドメイン(git.source.example.com など)に置き換えます。カスタム ドメインを使用する場合にのみ必要です。

Terraform

Terraform で Private Service Connect インスタンスを作成するには、 google_secure_source_manager_instance リソースをprivate_config.is_privateフィールドをtrueに設定して使用します。

長時間実行されるインスタンス作成オペレーションが開始されます。インスタンスの作成には最大 60 分かかります。出力は次のようになります。

Create request issued for [my-instance].
done: false
metadata:
  '@type': type.googleapis.com/google.cloud.securesourcemanager.v1.OperationMetadata
  apiVersion: v1
  createTime: '2023-02-27T20:57:52.315609549Z'
  requestedCancellation: false
  target: projects/my-project/locations/us-central1/instances/my-instance
  verb: create
name: projects/my-project/locations/us-central1/operations/operation-1234567894561-5ec69948c0f2b-60dd727f-a9b97a2e

ここで、projects/my-project/locations/us-central1/operations/operation-1234567894561-5ec69948c0f2b-60dd727f-a9b97a2e は OPERATION_NAME です。

オペレーションのステータスを確認するには、OPERATION_NAME が必要です。

オペレーションのステータスを確認するには、次のコマンドを実行します。

gcloud source-manager operations describe OPERATION_NAME \
    --region=LOCATION

次のように置き換えます。

  • OPERATION_NAME は、create コマンドのレスポンスのオペレーション名に置き換えます。
  • LOCATION は、インスタンスを作成するリージョンに置き換えます。サポートされているロケーションについては、 ロケーションをご覧ください。

インスタンスが作成されると、Private Service Connect エンドポイント httpServiceAttachmentsshServiceAttachmenthtmlapigitHttpgitSsh のホスト名が出力に表示されます。

プライベート インスタンスにアクセスする

Private Service Connect インスタンスにアクセスするには、転送ルールに基づいて Private Service Connect エンドポイントを作成するか、ロードバランサに基づいて Private Service Connect バックエンドを作成します。

ロードバランサに基づく Private Service Connect バックエンドはより 柔軟性が高く、他の Google Cloud サービス( Cloud Build など)と統合できますが、複雑で追加の課金が発生します。

転送ルールに基づく Private Service Connect エンドポイントはシンプルで費用も抑えられます。ただし、Cloud Build や他の Google Cloud サービスに接続することはできません。

ロードバランサに基づく Private Service Connect バックエンドを Private Service Connect インスタンスに設定して Cloud Build に接続するには、 Cloud Build を Private Service Connect インスタンスに接続するをご覧ください。

転送ルールに基づいて Private Service Connect エンドポイントを設定する

  1. Private Service Connect エンドポイントを作成するには、 エンドポイントを通じて公開サービスにアクセスするの手順に沿って操作します。

  2. Secure Source Manager インスタンスの HTTP サービス アタッチメントと SSH サービス アタッチメントの URI を取得するには、次のコマンドを実行します。

    gcloud source-manager instances describe INSTANCE_ID \
        --region=LOCATION
    

    次のように置き換えます。

    • INSTANCE_ID は、インスタンスの名前に置き換えます。特定のリージョン内のインスタンスを一覧表示するには、 を実行します gcloud source-manager instances list --region=LOCATION
    • LOCATION は、インスタンスのロケーションに置き換えます。サポートされているロケーションについては、ロケーションをご覧ください。

    出力には次のものが含まれます。

    createTime: '2023-09-22T18:21:35.729454612Z'
    hostConfig:
      api: my-project-012345678901-api.us-central1.p.sourcemanager.dev
      gitHttp: my-project-012345678901-git.us-central1.p.sourcemanager.dev
      gitSsh: my-project-012345678901-ssh.us-central1.p.sourcemanager.dev
      html: my-project-012345678901.us-central1.p.sourcemanager.dev
    name: projects/my-project/locations/us-central1/instances/my-instance
    privateConfig:
      caPool: projects/my-project/locations/us-central1/caPools/my-ca-pool
      httpServiceAttachment: projects/abc12345d1a1234a0a-tp/regions/us-central1/serviceAttachments/http-psc
      isPrivate: true
      sshServiceAttachment: projects/abc12345d1a1234a0a-tp/regions/us-central1/serviceAttachments/ssh-psc
    state: ACTIVE
    updateTime: '2023-09-22T18:39:53.390563549Z'
    
    • projects/abc12345d1a1234a0a-tp/regions/us-central1/serviceAttachments/http-psc は、インスタンスの HTTP サービス アタッチメント URI です。
    • projects/abc12345d1a1234a0a-tp/regions/us-central1/serviceAttachments/ssh-psc は、インスタンスの SSH サービス アタッチメント URI です。
  3. Private Service Connect エンドポイントを作成したら、プライベート DNS レコードを設定する必要があります。プライベート DNS レコードを設定する手順については、DNS を手動で構成するをご覧ください。インスタンスにカスタム ドメインを構成した場合は、カスタム ドメインをサービス アタッチメントの内部 IP アドレスにマッピングする DNS レコードを作成します。それ以外の場合は、インスタンスの hostConfig フィールドのホスト名を使用します。

    1. hostConfig.html(または HTML カスタム ドメイン)、hostConfig.api(または API カスタム ドメイン)、hostConfig.gitHttp(または Git HTTP カスタム ドメイン)の値を HTTP サービス アタッチメントの内部 IP アドレスにマッピングします。
    2. hostConfig.ssh(または Git SSH カスタム ドメイン)の値を SSH サービス アタッチメントの内部 IP アドレスにマッピングします。

    たとえば、前の出力例では、hostConfig.html の値は my-project-012345678901.us-central1.p.sourcemanager.dev です。

    Google Cloud

カスタム ドメインを使用した Git 認証

プライベート インスタンスにカスタム ドメインを使用する場合は、HTTPS 経由で Git を使用するために、各マシンで次のクライアントサイド構成を行います。 この構成により、Git が gcloud 認証情報ヘルパーに接続され、カスタム ドメインに対して認証が行われます。

  1. カスタム Git HTTP ドメインに gcloud ヘルパーを使用するように Git を構成します。

    git config --global credential.'https://GIT_HTTP_CUSTOM_DOMAIN'.helper gcloud.sh
    

    GIT_HTTP_CUSTOM_DOMAIN は、Git HTTP アクセス用に構成したカスタム ドメインに置き換えます。

  2. gcloud でカスタム ドメインを承認します。

    gcloud config set core/credentialed_hosted_repo_domains GIT_HTTP_CUSTOM_DOMAIN
    

    複数のドメインを承認するには、カンマ区切りのリストとして指定します。

Secure Source Manager API で CA を使用する

Secure Source Manager には、コントロール プレーンとデータプレーンがあります。データプレーン エンドポイントは Secure Source Manager インスタンスによって直接ホストされるため、アクセスするにはインスタンスの API ホスト名に接続する必要があります。

プライベート Secure Source Manager インスタンスを使用するには、 サービス ID と認証局プールを作成する で作成した CA を使用します。

  1. CA をダウンロードするには、次のコマンドを実行します。

    gcloud privateca pools get-ca-certs CA_POOL \
        --location LOCATION \
        --output-file=root-cert.pem \
        --project PROJECT
    
  2. インスタンスに対して API 呼び出しを行うには、CA 証明書をデータプレーン Secure Source Manager API に渡します。

    たとえば、次のコマンドは CA 証明書 root-cert.pem を Secure Source Manager API に渡して、ロケーション us-central1 のプライベート インスタンス my-instance 内のリポジトリを一覧表示します。

    curl \
        --cacert root-cert.pem \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        https://my-instance-01234567890-api.us-central1.sourcemanager.dev/v1/projects/01234567890/locations/us-central1/repositories
    

次のステップ