エンドポイントを介してリージョン Google API にアクセスする

このドキュメントでは、Private Service Connect エンドポイントを使用して、サポートされている Google API のリージョン エンドポイントに接続する方法について説明します。

他の Private Service Connect 構成については、Private Service Connect をご覧ください。

ロール

リージョン Private Service Connect エンドポイントの作成に必要な権限を取得するには、VPC ネットワークに対する次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

始める前に

  1. Install the Google Cloud CLI, then initialize it by running the following command:

    $ gcloud init

  2. Enable the Compute Engine, Network Connectivity Center, Cloud DNS, and Service Directory APIs.

    Enable the APIs

  3. Google Cloud コンソールの [API とサービス] ページで、Private Service Connect エンドポイントを介してアクセスする Google API を有効にします。Private Service Connect では、API は自動的に有効になりません。

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

  5. 制限事項を確認します。

リージョン Private Service Connect エンドポイントを作成する

リージョン Private Service Connect エンドポイントを作成して、ターゲット Google API のリージョン エンドポイントにリクエストを送信できます。

サポートされているリージョン エンドポイントの一覧については、リージョン サービス エンドポイントをご覧ください。

リージョン エンドポイントのホスト名には、次の 2 つの形式があります。

  • 公開ホスト名: SERVICE.REGION.rep.DOMAIN
  • 非公開ホスト名: SERVICE.REGION.p.rep.DOMAIN

    非公開ホスト名では、REGIONrep の間に p サブドメインを追加します。

ターゲット Google API を構成するときに、非公開形式のホスト名を指定します(例: spanner.me-central2.p.rep.googleapis.com)。エンドポイントを作成したら、同じ限定公開のリージョン エンドポイントのホスト名を使用して、エンドポイントの限定公開 DNS レコードを作成します。

Private Service Connect エンドポイントは任意の名前で構成できますが、メンテナンスを容易にするため、ターゲット Google API のサービス名を使用することをおすすめします。これにより、DNS 名がエンドポイント名と一致します。たとえば、エンドポイントのターゲットが spanner.me-central2.p.rep.googleapis.com の場合は、エンドポイント名として spanner を使用します。

gcloud

gcloud network-connectivity regional-endpoints create コマンドを使用します。

gcloud network-connectivity regional-endpoints create ENDPOINT_NAME \
    --region=REGION \
    --network=NETWORK_URI \
    --subnetwork=SUBNET_URI \
    --target-google-api=REP_NAME

エンドポイントを他のリージョンのリソースで使用できるようにするには、--enable-global-access フラグを追加します。

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

  • ENDPOINT_NAME: エンドポイントの名前。

  • REGION: エンドポイントを作成するリージョン。

  • NETWORK_URI: エンドポイント projects/PROJECT_ID/global/networks/NETWORK_NAME の VPC ネットワークの URI。

  • SUBNET_URI: エンドポイントを接続するサブネットの URI: projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME

  • REP_NAME: 接続するリージョン サービス エンドポイントの名前。例: spanner.me-central2.p.rep.googleapis.com

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

構成したエンドポイントの一覧を取得できます。

コンソール

  1. Google Cloud コンソールで [Private Service Connect] ページに移動します。

    [Private Service Connect] に移動

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

    リージョン エンドポイント ターゲットを含むすべてのエンドポイントが表示されます。

gcloud

gcloud network-connectivity regional-endpoints list コマンドを使用します。

gcloud network-connectivity regional-endpoints list \
    --region=REGION

REGION は、一覧取得するエンドポイントのリージョンに置き換えます。

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

エンドポイントが構成されている VPC ネットワークとリージョンに仮想マシン(VM)インスタンスを作成します。VM で次のコマンドを実行して、Private Service Connect エンドポイントが機能していることを確認します。エンドポイントは ping(ICMP)リクエストに応答しません。

curl --connect-to SERVICE.REGION.p.rep.DOMAIN:443:ENDPOINT_IP:443 \
'SERVICE.REGION.p.rep.DOMAIN/PATH'

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

  • SERVICE: エンドポイントが指しているサービス。たとえば、spannerlogging です。
  • REGION: エンドポイントのリージョン。
  • DOMAIN: サービスのドメイン。例: googleapis.com
  • ENDPOINT_IP: エンドポイントの IP アドレス。
  • PATH: このサービスによって提供されるリソースへのパス。たとえば、多くのサービスでは、パス $discovery/rest?version=v1 のディスカバリ ドキュメントが提供されています。

次のリクエストの例では、IP アドレス 192.168.1.100 のエンドポイントが me-central2 のリージョン エンドポイントから Cloud Spanner API ディスカバリ ドキュメントをリクエストできるかどうかをテストします。

curl --connect-to spanner.me-central2.p.rep.googleapis.com:443:192.168.1.100:443 \
'https://spanner.me-central2.p.rep.googleapis.com/$discovery/rest?version=v1'

エンドポイントの限定公開 DNS エントリを作成する

エンドポイントの DNS エントリは SERVICE.REGION.p.rep.DOMAIN の形式で作成する必要があります。Cloud DNS を使用して DNS エントリを作成できます。

  1. REGION.p.rep.DOMAIN 形式の限定公開 DNS ゾーンを作成します。

    たとえば、googleapis.com ドメインのリージョン エンドポイントを使用する場合は、リージョン me-central2me-central2.p.rep.googleapis.com という名前の限定公開 DNS ゾーンを作成します。

  2. エンドポイントに割り当てられた IP アドレスを参照する DNS レコードを作成します。ホスト名はサービス名 SERVICE と一致する必要があります。たとえば、spannerlogging はサービス名です。

たとえば、エンドポイントがターゲット spanner.me-central2.p.rep.googleapis.com で構成されている場合、me-central2.p.rep.googleapis.com という限定公開 DNS ゾーンと、エンドポイントの IP アドレスを参照する spanner という A レコードを作成します。エンドポイントの完全修飾ドメイン名は spanner.me-central2.p.rep.googleapis.com です。

非公開のエンドポイント名を使用するようにクライアントを構成する

公開 DNS 名ではなく限定公開 DNS 名を使用するようにクライアントを構成する必要があります。カスタム エンドポイントを使用するように構成する方法については、クライアントまたはクライアント ライブラリのドキュメントをご覧ください。次に例を示します。

  • Python: Client optionsapi_endpoint を構成できます。

  • Go: ClientOptionsWithEndpoint を構成できます。

  • .NET: クライアントのビルダークラスで Endpoint を構成できます。

  • gcloud: gcloud CLIapi_endpoint_overrides を構成できます。

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

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

gcloud

gcloud network-connectivity regional-endpoints describe コマンドを使用します。

gcloud network-connectivity regional-endpoints describe \
    ENDPOINT_NAME --region=REGION

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

  • ENDPOINT_NAME: エンドポイントの名前。
  • REGION: エンドポイントのリージョン。

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

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

gcloud

gcloud network-connectivity regional-endpoints delete コマンドを使用します。

gcloud network-connectivity regional-endpoints delete \
    ENDPOINT_NAME --region=REGION

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

  • ENDPOINT_NAME: エンドポイントの名前。
  • REGION: エンドポイントのリージョン。

ハイブリッド ネットワークからエンドポイントにアクセスする

Cloud Interconnect または Cloud VPN トンネル用の VLAN アタッチメントを使用して Google Cloud に接続しているネットワーク上のクライアントは、Private Service Connect エンドポイントにアクセスできます。

  • VLAN アタッチメントまたは Cloud VPN トンネルは、エンドポイントと同じ VPC ネットワーク(または共有 VPC ネットワーク)で終端する必要があります。ピアリングされた VPC ネットワーク内のクライアントはエンドポイントに到達できません。

  • グローバル アクセスが構成されている場合、VLAN アタッチメントまたは Cloud VPN トンネルからのクライアント トラフィックは、別のリージョンのエンドポイントに到達できます。

  • VLAN アタッチメントでは、Dataplane v1 と Dataplane v2 の両方がサポートされています。Dataplane のバージョンの詳細については、Dataplane v2 をご覧ください。

相手側のネットワークのシステムを構成して、限定公開 DNS ゾーンにクエリを実行できるようにする必要があります。

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

  • 他のネットワークが接続する VPC ネットワークにインバウンド サーバー ポリシーを作成します。

  • 他のネットワークが接続する VPC ネットワークで、VLAN アタッチメントまたは Cloud VPN トンネルが配置されているリージョンのインバウンド フォワーダー エントリ ポイントを特定します。

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