Private Service Connect を使用して Google API にアクセスする

Private Service Connect を使用すると、VPC ネットワーク内の内部 IP アドレスを持つエンドポイントを使用してサービス プロデューサーに接続できます。

このドキュメントでは、Private Service Connect エンドポイントを使用して Google API に接続する方法について説明します。storage.googleapis.com などのサービス エンドポイント用に一般公開されている IP アドレスに送信するのではなく、Private Service Connect エンドポイントの内部 IP アドレスに API リクエストを送信できます。

また、Private Service Connect を使用して別の VPC ネットワーク内のサービスにアクセスし、サービスを公開することもできます。

ロール

このガイドのタスクを行うには、次の IAM ロールが必要です。

タスク ロール
Private Service Connect エンドポイントの作成 以下のすべてのロール:
Compute ネットワーク管理者roles/compute.networkAdmin)、
Service Directory 編集者roles/servicedirectory.editor)、
DNS 管理者roles/dns.admin
限定公開の Google アクセスの構成(省略可) Compute ネットワーク管理者roles/compute.networkAdmin

始める前に

  • Private Service Connect では、API は自動的に有効になりません。Google Cloud Console の [API とサービス] ページで、使用する Google API を有効にする必要があります。

  • プロジェクトで Compute Engine API有効にする必要があります。

  • プロジェクトで Service Directory API有効にする必要があります。

  • プロジェクトで Cloud DNS API有効にする必要があります。

  • 下り(外向き)ファイアウォール ルールで、Private Service Connect エンドポイントへのトラフィックを許可する必要があります。VPC ネットワークのデフォルトのファイアウォール構成には暗黙の下り(外向き)許可ルールが含まれ、このトラフィックが許可されます。トラフィックをブロックする優先度の高い下り(外向き)ルールがないことを確認します。

  • Private Service Connect エンドポイントを使用して Google API やサービスにアクセスするため、外部 IP アドレスが割り当てられていない仮想マシン(VM)インスタンスは、限定公開の Google アクセスが有効になっているサブネットを使用する必要があります。

    外部 IP アドレスを持つ VM は、そのサブネットで限定公開の Google アクセスが無効になっていても、Private Service Connect エンドポイントを使用して Google API とサービスにアクセスできます。Private Service Connect エンドポイントへの接続は Google のネットワーク内にとどまります。

  • VPC ネットワークに Private Service Connect エンドポイントが含まれていない場合は、p.googleapis.com に Cloud DNS 限定公開ゾーンが存在するかどうかを確認します。ゾーンが存在する場合は、Private Service Connect エンドポイントを作成する前にゾーンを削除します。これを削除しないと、Private Service Connect に使用される Service Directory の DNS ゾーンの作成は失敗します。詳細については、トラブルシューティングをご覧ください。

  • Private Service Connect エンドポイントは、ピアリングされた VPC ネットワークからアクセスできません。

サブネットで限定公開の Google アクセスを有効にする

プライベート IP アドレスのない VM は、Private Service Connect エンドポイントを使用して Google API やサービスにアクセスするために、限定公開の Google アクセスが有効なサブネットに接続する必要があります。

VM に複数のインターフェースがある場合、デフォルト ルート(通常は nic0)で構成されたインターフェースを接続します。

VM から送信されたパケットの送信元 IP アドレスが、VM インターフェースのプライマリ内部 IP アドレスまたはエイリアス IP 範囲の内部 IP アドレスと一致している必要があります。

サブネットで限定公開の Google アクセスを有効にする方法は次のとおりです。

Console

  1. Google Cloud Console で、[VPC ネットワーク] に移動します。
    [VPC ネットワーク] に移動
  2. 限定公開の Google アクセスを有効にするサブネットが含まれるネットワークの名前をクリックします。
  3. サブネットの名前をクリックします。[サブネットの詳細] ページが表示されます。
  4. [編集] をクリックします。
  5. [限定公開の Google アクセス] セクションで、[オン] を選択します。
  6. [保存] をクリックします。

gcloud

  1. サブネットの名前とリージョンを特定します。次のコマンドで特定のネットワークのサブネットを一覧表示します。

    gcloud compute networks subnets list --filter=NETWORK_NAME
    
  2. 次のコマンドを実行して、限定公開の Google アクセスを有効にします。

    gcloud compute networks subnets update SUBNET_NAME \
    --region=REGION \
    --enable-private-ip-google-access
    
  3. 次のコマンドで、限定公開の Google アクセスが有効になっていることを確認します。

    gcloud compute networks subnets describe SUBNET_NAME \
    --region=REGION \
    --format="get(privateIpGoogleAccess)"
    

上記のコマンドすべてで、以下の値を有効な値に置き換えます。

  • SUBNET_NAME: サブネットの名前
  • REGION: サブネットのリージョン
  • NETWORK_NAME: サブネットを含む VPC ネットワークの名前

Terraform

Terraform リソースを使用して、サブネットで限定公開の Google アクセスを有効にできます。

resource "google_compute_network" "network" {
  provider                = google-beta
  project                 = var.project # Replace this with your project ID in quotes
  name                    = "tf-test"
  auto_create_subnetworks = false
}

resource "google_compute_subnetwork" "vpc_subnetwork" {
  provider                 = google-beta
  project                  = google_compute_network.network.project
  name                     = "test-subnetwork"
  ip_cidr_range            = "10.2.0.0/16"
  region                   = "us-central1"
  network                  = google_compute_network.network.id
  private_ip_google_access = true
}

Private Service Connect と Service Directory

Private Service Connect エンドポイントは、Service Directory に登録されています。Service Directory は、サービスを保存、管理、公開するためのプラットフォームです。Google API とサービスにアクセスするための Private Service Connect エンドポイントを作成するときに、Service Directory リージョンと Service Directory の名前空間を選択します。

Service Directory リージョン

Service Directory はリージョン サービスです。選択したリージョンによって、Service Directory のコントロール プレーンが存在するリージョンが定義されます。リージョン間で機能的な違いはありませんが、管理上の理由から検討が必要になる場合があります。

VPC ネットワークに Google API の最初の Private Service Connect エンドポイントを作成すると、選択したリージョンが、そのネットワークでそれ以降作成するすべてのエンドポイントのデフォルトのリージョンとして使用されます。リージョンがネットワークにまだ設定されておらず、リージョンを指定しないと、リージョンは us-central1 に設定されます。ネットワーク内のすべてのエンドポイントは同じ Service Directory リージョンを使用する必要があります。

Service Directory の名前空間

VPC ネットワークに Google API の最初の Private Service Connect エンドポイントを作成すると、選択した名前空間が、そのネットワークでその後に作成したすべてのエンドポイントのデフォルトの名前空間として使用されます。その名前空間がまだネットワークに設定されておらず、名前空間を指定しない場合、システム生成の名前空間が使用されます。ネットワーク内のすべてのエンドポイントは同じ Service Directory の名前空間を使用する必要があります。選択する名前空間は、Google API へのアクセスに使用される Private Service Connect エンドポイントにのみ使用する必要があります。複数のネットワークのエンドポイントに同じ名前空間を使用できます。

Private Service Connect エンドポイントを作成すると、次の DNS 構成が作成されます。

  • p.googleapis.comService Directory の限定公開 DNS ゾーンが作成されます。

  • DNS レコードは、Private Service Connect を使用して利用可能な一般的に使用される Google API とサービスのために p.googleapis.com で作成されており、末尾が googleapis.com のデフォルトの DNS 名となっています。

    p.googleapis.com に DNS レコードがない API とサービスの DNS レコードを作成する方法については、DNS レコードの作成をご覧ください。

利用可能なサービスは、all-apisvpc-sc のどちらの API バンドルを選択するかによって異なります。

Private Service Connect エンドポイントを含む VPC ネットワークごとに 1 つの Service Directory DNS ゾーンが作成されます。

Private Service Connect エンドポイントの DNS 名は、VPC ネットワークのすべてのリージョンからアクセスできます。

サポートされている API

Private Service Connect エンドポイントを作成して Google API とサービスにアクセスする場合は、アクセスする API のバンドルを選択します。すべての APIall-apis)か、VPC-SCvpc-sc)を選択します。

API バンドルを使用すると、限定公開の Google アクセス VIP で利用できる API にアクセスできます。

  • all-apis バンドルを使用すると、private.googleapis.com と同じ API にアクセスできます。

  • vpc-sc バンドルを使用すると、restricted.googleapis.com と同じ API にアクセスできます。

API バンドルは、TCP 上の HTTP ベースのプロトコル(HTTP、HTTPS、HTTP/2)のみをサポートしています。MQTT や ICMP などの他のプロトコルはサポートされていません。

API バンドル サポート対象のサービス 使用例
all-apis VPC Service Controls でサポートされているかどうかにかかわらず、ほとんどの Google API とサービスへの API アクセスを有効にします。マップ、Google 広告、Google Cloud、以下のリストを含むその他のほとんどの Google API への API アクセスが含まれます。Google Workspace ウェブ アプリケーションはサポートされていません。インタラクティブなウェブサイトには対応していません。

一致するドメイン名:
  • accounts.google.com(OAuth 認証に必要なパスのみ)
  • appengine.google.com
  • *.appspot.com
  • *.cloudfunctions.net
  • *.cloudproxy.app
  • *.datafusion.cloud.google.com
  • *.datafusion.googleusercontent.com
  • gcr.io または *.gcr.io
  • *.googleadapis.com
  • *.googleapis.com
  • *.gstatic.com
  • *.ltsapis.goog
  • *.notebooks.cloud.google.com
  • *.notebooks.googleusercontent.com
  • packages.cloud.google.com
  • pkg.dev または *.pkg.dev
  • pki.goog または *.pki.goog
  • *.run.app
  • source.developers.google.com
次の状況では all-apis を選択します。
  • VPC Service Controls を使用しない。
  • VPC Service Controls を使用するものの、VPC Service Controls でサポートされていない Google API とサービスにもアクセスする必要がある。
vpc-sc VPC Service Controls でサポートされている Google API およびサービスへの API アクセスを有効にします。

VPC Service Controls をサポートしていない Google API とサービスへのアクセスをブロックします。Google Workspace ウェブ アプリケーションと Google Workspace API はサポートされていません。

VPC Service Controls でサポートされている Google API とサービスにアクセスする必要がある場合にのみ vpc-sc を選択します。vpc-sc バンドルは VPC Service Controls をサポートしていない Google API とサービスへのアクセスを許可しません。

Private Service Connect エンドポイントの IP アドレスを選択する

VPC ネットワークで Private Service Connect を構成するときに、Private Service Connect エンドポイントで使用する IP アドレスを指定します。

このアドレスは、グローバル内部 IP アドレスのプロジェクトの割り当てにカウントされます。

IP アドレスは、次の仕様を満たしている必要があります。

  • IP アドレス範囲ではなく、1 つの IP アドレスを指定してください。

  • 有効な IPv4 アドレスを使用してください。RFC 1918 アドレスでも、RFC 1918 以外のアドレスでも構いません。Private Service Connect では、IPv6 アドレスはサポートされていません。

  • VPC ネットワークで構成されているサブネットの範囲内にすることはできません。

  • VPC ネットワークのサブネットのプライマリまたはセカンダリ IP アドレス範囲は使用できません。また、VPC ネットワーク ピアリングを使用して VPC ネットワークに接続されているネットワーク内のアドレスも使用できません。

  • ローカル VPC ネットワーク内の /32 カスタム静的ルートと重複することはできません。たとえば、VPC ネットワークに 10.10.10.10/32 のカスタム静的ルートがある場合、Private Service Connect のアドレスとして 10.10.10.10 を予約することはできません。

  • ピアリングされたネットワークにカスタムルートのエクスポートを構成し、VPC ネットワークにカスタムルートのインポートを構成している場合は、/32 ピアリング カスタム静的ルートと重複することはできません。

  • ローカル VPC ネットワークが自動モード ネットワークの場合、または自動モードのネットワークとピアリングされている場合は、10.128.0.0/9自動モードの IP 範囲を使用することはできません。

  • ローカル VPC ネットワークに割り振り済みの IP 範囲を使用することはできません。ただし、ピアリングされる VPC ネットワークに割り振り済みの IP 範囲は使用できます。

  • Private Service Connect エンドポイントが、宛先が同じ /32 のカスタム動的ルートと重複する場合、Private Service Connect エンドポイントが優先されます。

  • Private Service Connect エンドポイントの IP アドレスが、カスタム静的ルートカスタム動的ルート、またはピアリング カスタムルートの宛先の範囲内にあり、そのルートのサブネット マスクが /32 より短かい場合は、Private Service Connect エンドポイントが優先されます。

Private Service Connect エンドポイントを作成する

要件を満たす IP アドレスを選択したら、Private Service Connect エンドポイントを作成できます。

Private Service Connect エンドポイントは、グローバル転送ルールを使用して Google API とサービスに接続します。各転送ルールは、Private Service Connect の VPC ネットワークごとの割り当てにカウントされます。

Console

  1. Google Cloud Console で、[Private Service Connect] に移動します。

    [Private Service Connect] に移動

  2. [接続エンドポイント] タブをクリックします。

  3. [エンドポイントを接続] をクリックします。

  4. [対象] で、使用する対象 API バンドルを選択します。

    • すべての Google API
    • VPC-SC
  5. [エンドポイント名] にエンドポイントの名前を入力します。

  6. エンドポイントのネットワークを選択します。

  7. エンドポイントの IP アドレスを選択します。

    IP アドレスが所定の要件を満たしている必要があります。

    新しい IP アドレスが必要な場合は、次のように作成します。

    1. [IP アドレスを作成] をクリックします。
    2. IP アドレスの名前説明を入力します。
    3. 使用する IP アドレスを入力し、[保存] をクリックします。
  8. この VPC ネットワークで Service Directory リージョンがまだ構成されていない場合は、使用するリージョンを選択します。

    特定の VPC ネットワークで Google API とサービスへのアクセスに使用されるすべてのエンドポイントは同じ Service Directory リージョンを使用します。

  9. この VPC ネットワークに対して Service Directory の名前空間がまだ構成されていない場合は、使用する名前空間を構成します。

    • 自動的に割り当てられた名前空間を使用するには、[名前空間] プルダウン メニューをクリックして、自動的に割り当てられた名前空間を選択します。

    • 別のネットワークで使用されている既存の名前空間を選択するには、[名前空間] プルダウン メニューをクリックして、リストから名前空間を選択します。このリストには、プロジェクト内のすべての名前空間が表示されます。Google API へのアクセスに使用される Private Service Connect エンドポイントにのみ使用される名前空間を選択する必要があります。

    • 新しい名前空間を作成するには、[名前空間] プルダウン メニューをクリックして、[名前空間の作成] をクリックします。名前空間を入力し、[作成] をクリックします。

    特定の VPC ネットワークで Google API とサービスへのアクセスに使用するすべてのエンドポイントは同じ Service Directory 名前空間を使用します。

  10. [エンドポイントを追加] をクリックします。

gcloud

  1. エンドポイントに割り振るグローバル内部 IP アドレスを予約します。

    gcloud compute addresses create ADDRESS_NAME \
      --global \
      --purpose=PRIVATE_SERVICE_CONNECT \
      --addresses=ENDPOINT_IP \
      --network=NETWORK_NAME
    

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

    • ADDRESS_NAME: 予約済みの IP アドレスに割り当てる名前。

    • ENDPOINT_IP: エンドポイントに予約する IP アドレス。

      IP アドレスが所定の要件を満たしている必要があります。

    • NETWORK_NAME: エンドポイントの VPC ネットワークの名前。

  2. エンドポイントを Google API およびサービスに接続する転送ルールを作成します。

    gcloud compute forwarding-rules create ENDPOINT_NAME \
      --global \
      --network=NETWORK_NAME \
      --address=ADDRESS_NAME \
      --target-google-apis-bundle=API_BUNDLE \
      [ --service-directory-registration=REGION_NAMESPACE_URI ]
    

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

    • ENDPOINT_NAME: エンドポイントに割り当てる名前。名前は 1~20 文字にし、小文字と数字のみを使用する必要があります。名前の先頭は文字にしてください。

    • NETWORK_NAME: エンドポイントの VPC ネットワークの名前。

    • ADDRESS_NAME: 関連付けられたネットワークに予約されたアドレスの名前。

    • API_BUNDLE: エンドポイントで使用できる API のバンドル。サポートされている API のリストをご覧ください。

      • all-apis を使用して、サポートされているすべての API へのアクセスを許可します。

      • vpc-sc を使用して、VPC Service Controls をサポートする Google API へのアクセスを制限します。

    • REGION_NAMESPACE_URI: 使用する Service Directory のリージョンまたは名前空間の URI。この URI は、Private Service Connect エンドポイントを作成するプロジェクトを参照する必要があります。

      • リージョンは projects/PROJECT_NAME/locations/REGION でのみ定義できます。

      • projects/PROJECT_NAME/locations/REGION/namespaces/NAMESPACE を使用してリージョンと名前空間を定義できます。

      --service-directory-registration を完全に省略するか、名前空間のないリージョンを設定すると、次のようになります。

      • この VPC ネットワークにリージョンまたは名前空間がすでに構成されている場合は、これらのデフォルトが使用されます。

      • リージョンが構成されていない場合、リージョンは us-central1 に設定されます。名前空間が構成されていない場合、システム生成の名前空間が割り当てられます。

API

  1. エンドポイントに割り振るグローバル内部 IP アドレスを予約します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses
    
    {
    "name": ADDRESS_NAME,
    "address": ENDPOINT_IP,
    "addressType": "INTERNAL",
    "purpose": PRIVATE_SERVICE_CONNECT,
    "network": NETWORK_URL
    }
    

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

    • PROJECT_ID: プロジェクト ID。

    • ADDRESS_NAME: 予約済みの IP アドレスに割り当てる名前。

    • ENDPOINT_IP: エンドポイントに予約する IP アドレス。

      IP アドレスが所定の要件を満たしている必要があります。

    • NETWORK_URL: エンドポイントの VPC ネットワーク。network.list メソッドまたは gcloud compute networks list --uri を使用して、ネットワークの URL を検索します。

  2. エンドポイントを Google API およびサービスに接続する転送ルールを作成します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules
    {
     "IPAddress": ADDRESS_URL,
     "network": NETWORK_URL,
     "name": ENDPOINT_NAME,
     "target": API_BUNDLE,
     "serviceDirectoryRegistrations : [
       {
         "service_directory_region": REGION,
         "namespace": "NAMESPACE"
    
       }
     ],
    }
    

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

    • PROJECT_ID: プロジェクト ID。

    • ENDPOINT_NAME: エンドポイントに割り当てる名前。名前は 1~20 文字にし、小文字と数字のみを使用する必要があります。名前の先頭は文字にしてください。

    • NETWORK_URL: エンドポイントの VPC ネットワーク。network.list メソッドまたは gcloud compute networks list --uri を使用して、ネットワークの URL を検索します。

    • ADDRESS_URL: 関連付けられたネットワークに予約されたアドレスの URL。globalAddresses.list メソッドまたは gcloud compute addresses list --uri を使用して、予約されたアドレスの URL を検索します。

    • API_BUNDLE: エンドポイントで使用できる API のバンドル。サポートされている API のリストをご覧ください。

      • all-apis を使用して、サポートされているすべての API へのアクセスを許可します。

      • vpc-sc を使用して、VPC Service Controls をサポートする Google API へのアクセスを制限します。

    • REGION: 使用する Service Directory リージョン。例: us-central1REGION を省略し、この VPC ネットワークにリージョンがすでに構成されている場合、そのリージョンが使用されます。リージョンが構成されていない場合、リージョンは us-central1 に設定されます。

    • NAMESPACE: 使用する Service Directory の名前空間の名前。NAMESPACE を省略し、この VPC ネットワークに名前空間がすでに構成されている場合、その名前空間が使用されます。名前空間が構成されていない場合、システム生成の名前空間が割り当てられます。

Terraform

次の Terraform リソースを使用して、Private Service Connect エンドポイントを作成できます。

resource "google_compute_global_address" "default" {
  provider     = google-beta
  project      = google_compute_network.network.project
  name         = "global-psconnect-ip"
  address_type = "INTERNAL"
  purpose      = "PRIVATE_SERVICE_CONNECT"
  network      = google_compute_network.network.id
  address      = "10.3.0.5"
}
resource "google_compute_global_forwarding_rule" "default" {
  provider              = google-beta
  project               = google_compute_network.network.project
  name                  = "globalrule"
  target                = "all-apis"
  network               = google_compute_network.network.id
  ip_address            = google_compute_global_address.default.id
  load_balancing_scheme = ""
}

エンドポイントが機能していることを確認する

Private Service Connect が構成されている VPC ネットワークに VM インスタンスを作成し、次のコマンドを VM で実行して、Private Service Connect エンドポイントが機能していることを確認します。

curl -v ENDPOINT_IP/generate_204

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

  • ENDPOINT_IP: Private Service Connect エンドポイントの IP アドレス。

エンドポイントが機能している場合は、HTTP 204 レスポンス コードが表示されます。

エンドポイントの一覧を取得する

構成済みの Private Service Connect エンドポイントの一覧を取得できます。

Console

  1. Google Cloud Console で、[Private Service Connect] に移動します。

    [Private Service Connect] に移動

  2. [接続エンドポイント] タブをクリックします。

    Private Service Connect エンドポイントが表示されます。

gcloud

gcloud compute forwarding-rules list  \
--filter target="(all-apis OR vpc-sc)" --global

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

NAME  REGION  IP_ADDRESS  IP_PROTOCOL  TARGET
RULE          IP          TCP          all-apis

エンドポイントに関する情報を取得する

Private Service Connect エンドポイントの構成の詳細を表示できます。

Console

  1. Google Cloud Console で、[Private Service Connect] に移動します。

    [Private Service Connect] に移動

  2. [接続エンドポイント] タブをクリックします。

    Private Service Connect エンドポイントが表示されます。

  3. 詳細を表示する Private Service Connect エンドポイントをクリックします。

gcloud

gcloud compute forwarding-rules describe \
    ENDPOINT_NAME --global

エンドポイントにラベルを付ける

Private Service Connect エンドポイントのラベルを管理できます。詳細については、リソースのラベル付けをご覧ください。

エンドポイントを削除する

Private Service Connect エンドポイントを削除できます。

Console

  1. Google Cloud Console で、[Private Service Connect] に移動します。

    [Private Service Connect] に移動

  2. [接続エンドポイント] タブをクリックします。

  3. 削除する Private Service Connect エンドポイントを選択し、[削除] をクリックします。

gcloud

    gcloud compute forwarding-rules delete \
        ENDPOINT_NAME --global

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

  • ENDPOINT_NAME: 削除するエンドポイントの名前。

エンドポイントを使用する

Private Service Connect エンドポイントを使用するには、エンドポイントの IP アドレスに解決される DNS ホスト名にリクエストを送信します。

  • カスタム エンドポイントを使用するようにクライアントを構成し、使用する API とサービスに p.googleapis.com DNS レコードが作成されている場合、自動的に作成される p.googleapis.com DNS 名を使用できます。詳細については、p.googleapis.com DNS 名の使用をご覧ください。

    たとえば、エンドポイント名が xyz の場合、API バンドルに storage-xyz.p.googleapis.comcompute-xyz.p.googleapis.com、その他の一般的に使用される API の DNS レコードが作成されます。

  • カスタム エンドポイントを使用するように構成されていないクライアントを使用している場合、または使用するサービスに p.googleapis.com DNS レコードが存在しない場合は、デフォルトの DNS 名を使用して DNS レコードを作成できます。詳細については、デフォルトの DNS 名を使用して DNS レコードを作成するをご覧ください。

    たとえば、storage.googleapis.comcompute.googleapis.com の DNS レコードを作成します。

p.googleapis.com DNS 名の使用

Private Service Connect エンドポイントを作成すると、そのエンドポイントを使用して利用可能な一般的に使用されている API とサービスの DNS レコードが Service Directory によって作成されます。DNS レコードは、末尾が googleapis.com のデフォルトの DNS 名を有する API とサービスと、それらの API とサービスのサブセットに対してのみ作成されます。

DNS レコードは p.googleapis.com 限定公開ゾーンに作成されます。レコードはエンドポイント IP アドレスを指し、SERVICE-ENDPOINT.p.googleapis.com の形式を使用します。

たとえば、エンドポイント名が xyz の場合、storage-xyz.p.googleapis.comcompute-xyz.p.googleapis.com と、他のサポートされている API の DNS レコードが作成されます。

カスタム エンドポイントを使用するように構成できるクライアントは、p.googleapis.com DNS 名を使用して Private Service Connect エンドポイントにリクエストを送信できます。

カスタム エンドポイントを使用するように構成する方法については、クライアントまたはクライアント ライブラリのドキュメントをご覧ください。例:

  • Python: google-api-core パッケージのクライアント オプション クラスapi_endpoint を構成できます。

  • Go: api パッケージのクライアント オプション パッケージWithEndpoint を構成できます。

  • gcloud: 次のコマンドで api_endpoint_overrides を構成できます。

    gcloud config set api_endpoint_overrides/SERVICE ENDPOINT_URL

    例: gcloud config set api_endpoint_overrides/compute https://compute-xyz.p.googleapis.com/compute/v1/

デフォルトの DNS 名を使用して DNS レコードを作成する

次の状況では、API とサービスのデフォルトの DNS 名を Private Service Connect エンドポイントに転送するために DNS レコードを作成する必要があります。

  • クライアントまたはアプリケーションが p.googleapis.com DNS 名を使用するように構成することができない。

  • サポートされているサービスにアクセスする必要があるが、そのサービス用に自動的に作成される p.googleapis.com DNS 名がない。

Private Service Connect エンドポイントを指定する DNS レコードを作成する手順は次のとおりです。

  1. 使用するドメインの DNS ゾーンを作成します(例: googleapis.comgcr.io)。そのためには、Cloud DNS 限定公開ゾーンの作成を検討してください。

  2. この DNS ゾーンで次のことを行います。

    1. ドメイン(ゾーン)名自体の A レコード(例: googleapis.comgcr.io)を作成します。この A レコードが Private Service Connect エンドポイントの IP アドレスを指すようにします。Cloud DNS を使用している場合は、レコードの追加をご覧ください。

    2. アスタリスクとドットに続くドメイン(ゾーン)名を使用して、可能性のあるすべての追加ドメインのホスト名に対する CNAME レコードを作成します(例: *.googleapis.com*.gcr.io)。この CNAME レコードが、同じゾーンの A レコードを指すようにします。たとえば、*.googleapis.comgoogleapis.com を指し、*.gcr.iogcr.io を指します。

オンプレミス ホストから Private Service Connect を使用する

オンプレミス ネットワークが VPC ネットワークに接続されている場合、Private Service Connect を使用すると、Private Service Connect エンドポイントの内部 IP アドレスを使用して、オンプレミス ホストから Google API とサービスにアクセスできます。

  • オンプレミス ネットワークは、Cloud VPN トンネルまたは Cloud Interconnect アタッチメント(VLAN)を使用して VPC ネットワークに接続されている必要があります。

  • Private Service Connect エンドポイントは、オンプレミス ネットワークに接続されている VPC ネットワーク内にあります。

  • オンプレミス ネットワークには、Private Service Connect エンドポイントの適切なルートが必要です。Cloud VPN トンネルまたは Cloud Interconnect アタッチメント(VLAN)のルートを管理する BGP セッションで Private Service Connect エンドポイントのルートを通知するように、Cloud Router のカスタムルート アドバタイズを構成します。

  • 限定公開 DNS ゾーンにクエリを実行できるように、オンプレミス システムを構成する必要があります。

    Cloud DNS を使用して限定公開 DNS ゾーンを実装している場合は、次の手順を行います。

    • オンプレミス ネットワークが接続する VPC ネットワークに受信サーバー ポリシーを作成します。

    • オンプレミス ネットワークが接続する VPC ネットワークで、Cloud VPN トンネルと Cloud Interconnect アタッチメント(VLAN)が配置されているリージョンの受信フォワーダー エントリ ポイントを特定します。

    • VPC ネットワークに接続する Cloud VPN トンネルまたは Cloud Interconnect アタッチメント(VLAN)と同じリージョン内の受信フォワーダーのエントリ ポイントに Private Service Connect エンドポイントの DNS 名を転送するように、オンプレミス システムとオンプレミスの DNS ネームサーバーを構成します。

ユースケース

同じ VPC ネットワーク内に複数の Private Service Connect エンドポイントを作成できます。特定のエンドポイントに送信される合計帯域幅に上限はありません。Private Service Connect エンドポイントはグローバル内部 IP アドレスを使用するため、VPC ネットワーク内のすべてのリソースで使用できます。また、Cloud VPN トンネルまたは Cloud Interconnect アタッチメントを使用して接続されたオンプレミス ネットワークでも使用できます。

複数のエンドポイントが存在する場合、Cloud Router とファイアウォール ルールを使用して異なるネットワーク パスを指定できます。

  • Private Service Connect エンドポイント経由の Google API へのアクセスを一部の VM に許可し、残りの VM には許可しないように、ファイアウォール ルールを作成できます。

  • インターネットへのトラフィックを許可しないファイアウォール ルールを VM インスタンスに設定できます。この場合、Private Service Connect エンドポイントに送信されたトラフィックは Google に送信されます。

  • Cloud VPN トンネルまたは Cloud Interconnect アタッチメント(VLAN)を使用して VPC に接続されているオンプレミス ホストがある場合、一部のリクエストをトンネルまたは VLAN 経由で送信し、残りのリクエストをインターネット経由で送信できます。この構成を行うと、限定公開の Google アクセスでサポートされていないサービス(Google ブックスなど)でトンネルや VLAN を回避できます。

    この構成を作成するには、Private Service Connect エンドポイントを作成し、Cloud Router のカスタムルート アドバタイズを使用して Private Service Connect エンドポイントの IP アドレスをアドバタイズします。さらに、Cloud DNS 受信転送ポリシーを有効にします。一部のリクエストは、Private Service Connect エンドポイントの名前を使用して Cloud VPN トンネルまたは Cloud Interconnect アタッチメント(VLAN)経由で送信され、残りのリクエストはデフォルトの DNS 名を使用してインターネット経由で送信されます。

  • 複数の Cloud Interconnect アタッチメント(VLAN)を使用して、オンプレミス ネットワークを VPC ネットワークに接続する場合、図 3 のように、オンプレミスからの一部のトラフィックを VLAN 経由で送信し、残りのトラフィックを VLAN 以外で送信できます。これにより、Google ではなく広域ネットワークを使用し、地理的要件に合わせてデータの移動を制御できます。

    この構成を作成するには、2 つの Private Service Connect エンドポイントを作成します。最初の VLAN を管理する Cloud Router の BGP セッションで、最初のエンドポイントにカスタムルート アドバタイズを作成します。2 番目の VLAN を管理する Cloud Router の BGP セッションで、2 番目のエンドポイントに別のカスタム ルート アドバタイズを作成します。Private Service Connect エンドポイント名を使用するように構成されたオンプレミス ホストは、対応する Cloud Interconnect アタッチメント(VLAN)経由でトラフィックを送信します。

  • アクティブ / アクティブ トポロジでは、複数の Cloud Interconnect アタッチメント(VLAN)を使用できます。VLAN を管理する Cloud Router の BGP セッションで、カスタムルート アドバタイズを使用して同じ Private Service Connect エンドポイントの IP アドレスをアドバタイズすると、オンプレミス システムからエンドポイントに送信されるパケットは、ECMP を使用して VLAN 間でルーティングされます。

    図 3. Private Service Connect、Cloud Router、オンプレミス ホストを構成することで、Google API へのトラフィックの送信に使用する Cloud Interconnect アタッチメント(VLAN)を制御できます。

トラブルシューティング

限定公開 DNS ゾーンを作成できない

Private Service Connect エンドポイントを作成すると、Service Directory DNS ゾーンが作成されます。ゾーンの作成が失敗する理由には、次のようなものがあります。

  • プロジェクトで Cloud DNS API が有効になっていない。

  • Service Directory DNS ゾーンを作成するために必要な権限がない。

  • この VPC ネットワークに同じゾーン名を持つ DNS ゾーンが存在する。

  • この VPC ネットワークに p.googleapis.com の DNS ゾーンがすでに存在する。

前の削除が失敗して、ゾーンの競合が発生している可能性があります。

Service Directory DNS ゾーンを作成するには、次の手順を行います。

  1. プロジェクトで Cloud DNS API が有効になっていることを確認します。

  2. Service Directory DNS ゾーンの作成に必要な権限があることを確認します。

    • dns.managedZones.create
    • servicedirectory.namespaces.associatePrivateZone
  3. DNS ゾーンを削除します

  4. Private Service Connect エンドポイントに関連付けられている Service Directory 名前空間に基づく Service Directory DNS ゾーンを作成します。

    ゾーンを作成するときに、次の値を使用します。

    • ゾーン名: 作成に失敗したときに使用したゾーン名を使用します。使用したゾーン名はエラー メッセージに表示されています。

    • DNS 名: p.googleapis.com.(末尾のドットも含む)。

    • Service Directory 名前空間: 作成した Private Service Connect エンドポイントの Service Directory 名前空間を検索し、Service Directory DNS ゾーンの作成時にこの名前空間を使用します。

    Service Directory の名前空間は goog-psc-NETWORK_NAME-NETWORK_ID という形式になります。

限定公開 DNS ゾーンを削除できない

VPC ネットワーク内にある最後の Private Service Connect エンドポイントを削除すると、関連する Service Directory の構成(DNS ゾーンを含む)が削除されます。

次の理由により、この削除が失敗することがあります。

  • DNS ゾーンを削除するために必要な権限がない。

  • このゾーンには、Service Directory 以外で作成されたユーザー定義の DNS エントリが含まれている。

この問題を解決するには、次の手順を行います。

  1. dns.managedZones.delete 権限があることを確認します。詳細については、Cloud DNS ドキュメントのアクセス制御をご覧ください。

  2. DNS ゾーンを削除します