Private Service Connect を使用してマネージド サービスを公開する

サービス プロデューサーとして Private Service Connect を利用し、VPC ネットワークの内部 IP アドレスを使用してサービスを公開できます。サービス コンシューマは、VPC ネットワークの内部 IP アドレスを使用して、公開サービスにアクセスできます。

このガイドでは、Private Service Connect を使用して、内部 TCP / UDP ロードバランサまたは内部 HTTP(S) ロードバランサにホストされているサービスを公開する方法について説明します。

Google Kubernetes Engine の内部 TCP / UDP ロードバランサにホストされているサービスを公開する場合は、GKE ドキュメントの Private Service Connect を使用した内部 TCP / UDP ロードバランサの作成をご覧ください。

サービスを公開するには、次の操作を行います。

  • サービス プロデューサー VPC ネットワークで内部 TCP / UDP ロードバランサまたは内部 HTTP(S) ロードバランサを使用するサービスをホストします。

  • ロードバランサと同じリージョンにサービス アタッチメントを作成します。

公開サービスに接続できる Private Service Connect エンドポイントには、次の 2 種類があります。

これらのエンドポイント タイプでは、プロデューサー構成が若干異なります。詳しくは、仕様をご覧ください。

ロール

次の IAM ロールは、このガイドのタスクを行うために必要な権限を備えています。

始める前に

制限事項

  • Private Service Connect サービス アタッチメントを含む VPC ネットワークで、Packet Mirroring を有効にしないでください。両方の構成が存在すると、トラフィックがドロップされる可能性があります。

  • コンシューマ HTTP(S) サービス コントロールを使用する Private Service Connect エンドポイントは、接続されたクライアントのリストに表示されません。

  • 共有 VPC ホスト プロジェクトで Private Service Connect サブネットを作成し、サービス プロジェクトでサービス アタッチメントを作成する場合は、Google Cloud CLI または API を使用してサービス アタッチメントを作成する必要があります。

  • 問題と回避策については、既知の問題をご覧ください。

仕様

公開サービスに接続できる Private Service Connect エンドポイント タイプは 2 つありますが、構成要件が異なります。次の表は、公開サービスが各エンドポイント タイプをサポートするために必要な構成をまとめたものです。

サービス プロデューサーの構成 Private Service Connect エンドポイント(転送ルールに基づく) HTTP(S) サービス制御を使用する Private Service Connect エンドポイント(グローバル外部 HTTP(S) ロードバランサに基づく)
サービス プロデューサー ロードバランサ
サポートされているロードバランサの種類 内部 TCP / UDP ロードバランサまたは内部 HTTP(S) ロードバランサ 内部 TCP / UDP ロードバランサのみ
サポートされているプロトコル ロードバランサでサポートされているトラフィック 内部 TCP / UDP ロードバランサは HTTPS トラフィックを処理する必要があります。
内部 TCP / UDP ロードバランサの構成
グローバル アクセス 非対応 必須
同じ IP アドレスを使用する複数の転送ルール
非対応 非対応
サブセット化 非対応 非対応
2 タプルまたは 3 タプルに設定されたセッション アフィニティ

非対応。

5 タプルのセッション アフィニティを構成します1

非対応。

5 タプルのセッション アフィニティを構成します1

Packet Mirroring 非対応 非対応
サービス アタッチメント
PROXY プロトコル 内部 TCP / UDP ロードバランサでホストされている TCP サービスでサポートされています。

次の構成ではサポートされていません。
  • 内部 TCP / UDP ロードバランサによってホストされる UDP サービス。ただし、この構成を作成することは可能です。
  • 内部 HTTP(S) ロードバランサでホストされるサービス
非対応
公開モード
プロジェクトの自動承認 任意のプロジェクトのエンドポイントが接続可能 任意のプロジェクトのエンドポイントが接続可能
明示的な承認 コンシューマ プロジェクトは、エンドポイントが作成される前後に受け入れられます。 エンドポイントを作成する前にコンシューマ プロジェクトを承認する必要があります。
1 Google Cloud Console を使用して、セッション アフィニティを [なし] または [クライアント IP、ポート、プロトコル] に設定します。または、Google Cloud CLI または API を使用して NONE または CLIENT_IP_PORT_PROTO に設定します。

DNS 構成

サービスを公開するとき(サービス アタッチメントを作成するとき)に、必要に応じて DNS ドメイン名を構成できます。

構成するドメイン名は所有している必要があります。ドメインを所有していない場合、ドメイン名を指定してもサービスを公開できません。所有権を確認するには、Google Search Console に移動します。ドメインの確認方法については、ウェブサイト プロパティを追加するをご覧ください。サービス アタッチメントには、検証するドメインのサブドメインをドメイン名として指定できます。たとえば、example.com を登録し、ドメイン名 us-west1.p.example.com を使用してサービス アタッチメントを作成できます。

サービスのドメイン名を構成した場合、そのサービスに接続する Private Service Connect エンドポイントが作成されると、サービス コンシューマの VPC ネットワークで次の構成が行われます。

  • 指定したドメインに Service Directory DNS ゾーンが作成されます。

  • ゾーンに各 Private Service Connect エンドポイントの DNS エントリが作成されます。

ドメイン名に推奨される形式は REGION.p.DOMAIN です。このドメイン名は、サービス コンシューマの VPC ネットワークで DNS エントリを作成するために使用されます。そのため、既存の DNS ドメイン名と競合しない名前を使用することが重要です。この形式を使用すると、競合リスクを軽減できます。

たとえば、us-west1.p.example.com というドメイン名でサービスが構成されている場合、サービス コンシューマは analytics という名前で Private Service Connect エンドポイントを作成します。analytics.us-west1.p.example.com の DNS レコードは自動的に作成されます。

サービスをホストしているロードバランサが、このドメイン名に対するリクエストを受け入れるようにする必要があります。内部 HTTP(S) ロードバランサを使用している場合は、サービス コンシューマが使用するドメイン名を反映するようにロードバランサの構成の更新が必要になることがあります。たとえば、証明書URL マップを更新します。

Private Service Connect 用のサブネットを作成する

Private Service Connect で使用する 1 つ以上の専用サブネットを作成します。Google Cloud Console を使用してサービスを公開する場合、その作業中にサブネットを作成できます。

既存のサービスで利用可能な IP アドレスを増やす必要がある場合は、公開サービスに対してサブネットの追加または削除を行うをご覧ください。

共有 VPC ホスト プロジェクトで Private Service Connect サブネットを作成できます。ただし、ホスト プロジェクトのサブネットを使用してサービス プロジェクトにサービス アタッチメントを作成する場合は、Google Cloud CLI または API を使用してサービス アタッチメントを作成する必要があります。

Console

  1. [VPC ネットワーク] ページに移動します。
    [VPC ネットワーク] に移動
  2. VPC ネットワークの名前をクリックして、[VPC ネットワークの詳細] ページを表示します。
  3. [サブネットを追加] をクリックします。表示されたパネルで、次の操作を行います。
    1. 名前を入力します。
    2. リージョンを選択します。
    3. [目的] セクションで [Private Service Connect] を選択します。
    4. IP アドレス範囲を入力します。例: 10.10.10.0/24
    5. [追加] をクリックします。

gcloud

gcloud compute networks subnets create SUBNET_NAME \
    --network=NETWORK_NAME --region=REGION \
    --range=SUBNET_RANGE --purpose=PRIVATE_SERVICE_CONNECT

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

  • SUBNET_NAME: サブネットに割り当てる名前。

  • NETWORK_NAME: 新しいサブネットの VPC の名前。

  • REGION: 新しいサブネットのリージョン。これは、公開するサービスと同じリージョンにする必要があります。

  • SUBNET_RANGE: サブネットに使用する IP アドレス範囲。例: 10.10.10.0/24

API

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks

{
  "ipCidrRange": "SUBNET_RANGE",
  "name": "SUBNET_NAME",
  "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
  "purpose": "PRIVATE_SERVICE_CONNECT",
}

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

  • PROJECT_ID: サブネットのプロジェクト。

  • SUBNET_NAME: サブネットに割り当てる名前。

  • NETWORK_NAME: 新しいサブネットの VPC ネットワークの名前。

  • REGION: 新しいサブネットのリージョン。これは、公開するサービスと同じリージョンにする必要があります。

  • SUBNET_RANGE: サブネットに使用する IP アドレス範囲。例: 10.10.10.0/24

ファイアウォール ルールを構成する

Private Service Connect エンドポイントとサービス アタッチメント間のトラフィックを許可するファイアウォール ルールを構成します。クライアント リクエストは、Private Service Connect エンドポイントの種類に応じて異なる場所から送信されます。

エンドポイントのタイプ クライアント トラフィックの IP アドレス範囲 詳細
Private Service Connect エンドポイント(転送ルールに基づく) このサービスに関連付けられている Private Service Connect サブネットの IP アドレス範囲。 デフォルトのネットワークを使用している場合は、事前に入力された default-allow-internal では、このトラフィックをブロックする優先度の高いルールがない限り、このトラフィックが許可されます。
コンシューマ HTTP(S) サービス制御を備えた Private Service Connect エンドポイント(グローバル外部 HTTP(S) ロードバランサに基づく)
  • 130.211.0.0/22
  • 35.191.0.0/16
グローバル外部 HTTP(S) ロードバランサは、これらの IP アドレス範囲を使用する Google Front End(GFE)に実装されます。

ファイアウォール構成で、適切なエンドポイント タイプからのトラフィックが許可されていない場合は、それを許可するようにファイアウォール ルールを構成します。

この構成例では、クライアント IP アドレス範囲からプロデューサー サービス ロードバランサのバックエンド VM へのトラフィックを許可する VPC ファイアウォール ルールを作成できます。この構成では、バックエンド VM にネットワーク タグが構成されていることを前提としています。

上り(内向き)ルールの例:

gcloud compute firewall-rules create NAME \
  --network=NETWORK_NAME \
  --direction=ingress \
  --action=allow \
  --target-tags=TAG \
  --source-ranges=CLIENT_IP_RANGES_LIST \
  --rules=RULES

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

  • NETWORK_NAME: サービスと Private Service Connect サブネットを含むネットワーク。

  • TAG: プロデューサー サービス ロードバランサのバックエンド VM に適用されるターゲットタグ。

  • CLIENT_IP_RANGES_LIST: クライアント トラフィックの発生元である IP アドレス範囲。詳しくは、上記の表をご覧ください。

  • RULES_LIST: ルールを適用するプロトコルと宛先ポートのカンマ区切りリスト。例: tcp,udp

下り(外向き)ルールの例:

gcloud compute firewall-rules create NAME \
  --network=NETWORK_NAME \
  --direction=egress \
  --action=allow \
  --target-tags=TAG \
  --destination-ranges=CLIENT_IP_RANGES_LIST \
  --rules=RULES

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

  • NETWORK_NAME: サービスと Private Service Connect サブネットを含むネットワーク。

  • TAG: プロデューサー サービス ロードバランサのバックエンド VM に適用されるターゲットタグ。

  • CLIENT_IP_RANGES_LIST: クライアント トラフィックの発生元である IP アドレス範囲。詳しくは、上記の表をご覧ください。

  • RULES_LIST: ルールを適用するプロトコルと宛先ポートのカンマ区切りリスト。例: tcp,udp

VPC ファイアウォール ルールの構成の詳細については、VPC ファイアウォール ルールの概要をご覧ください。このトラフィックを許可する階層型ファイアウォール ルールを構成する場合は、階層型ファイアウォール ポリシーの概要をご覧ください。

プロジェクトの自動承認を使用してサービスを公開する

以下の手順でサービスを公開し、任意のコンシューマがこのサービスに接続できるように自動的に設定します。コンシューマ接続を明示的に承認する場合は、明示的なプロジェクト承認を使用してサービスを公開するをご覧ください。

サービスを公開するときに、サービス アタッチメントを作成します。サービス コンシューマは、サービス アタッチメントの詳細情報を使用してサービスに接続します。

コンシューマの接続情報を表示するには、サポートされているサービスで PROXY プロトコルを有効にします。サポートされているサービスについては、仕様をご覧ください。PROXY プロトコルの詳細については、コンシューマの接続情報の表示をご覧ください。

compute.googleapis.comservicedirectory.googleapis.com、または dns.googleapis.com を制限する VPC Service Controls の境界で保護されているプロジェクトにサービス アタッチメントを作成する場合は、追加の構成が必要です。詳細については、VPC Service Controls の上り(内向き)ルールと下り(外向き)ルールの構成をご覧ください。

Console

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

    [Private Service Connect] に移動

  2. [公開サービス] タブをクリックします。

  3. [サービスを公開] をクリックします。

  4. [ロードバランサの種類] として、内部 TCP / UDP ロードバランサまたは内部 HTTP(S) ロードバランサを選択します。

  5. 公開するサービスをホストする内部ロードバランサを選択します。

    選択した内部ロードバランサの詳細情報が [ネットワーク] フィールドと [リージョン] フィールドに挿入されます。

  6. プロンプトが表示されたら、公開するサービスに関連付けられた転送ルールを選択します。

  7. [サービス名] に、サービス アタッチメントの名前を入力します。

  8. サービスに 1 つ以上のサブネットを選択します。新しいサブネットを追加する場合は、次の方法で作成します。

    1. [新しいサブネットの予約] をクリックします。
    2. サブネットの名前説明(省略可)を入力します。
    3. サブネットのリージョンを選択します。
    4. サブネットに使用する IP 範囲を入力し、[追加] をクリックします。
  9. コンシューマ接続情報を表示するには、[プロキシ プロトコルを使用する] を選択します。

  10. ドメイン名を構成する場合は、ドットで終わるドメイン名を入力します。

    ドメイン名に推奨される形式は REGION.p.DOMAIN. です。

    ドメイン名を所有している必要があります。詳細については、DNS 構成をご覧ください。

  11. [すべてのプロジェクトの接続を自動的に受け入れる] を選択します。

  12. [サービスを追加] をクリックします。

gcloud

gcloud compute service-attachments create ATTACHMENT_NAME \
    --region=REGION \
    --producer-forwarding-rule=RULE_NAME  \
    --connection-preference=ACCEPT_AUTOMATIC \
    --nat-subnets=PSC_SUBNET_LIST \
    [ --enable-proxy-protocol ] \
    [ --domain-names=DOMAIN_NAME ]

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

  • ATTACHMENT_NAME: サービス アタッチメントに割り当てる名前。

  • REGION: 新しいサービス アタッチメントのリージョン。これは、公開するサービスと同じリージョンにする必要があります。

  • RULE_NAME: 公開するサービスに関連付けられた転送ルールの名前。

  • PSC_SUBNET_LIST: このサービス アタッチメントで使用する 1 つ以上のサブネットのカンマ区切りリスト。

  • DOMAIN_NAME: サービスの DNS ドメイン名(末尾のドットも含む)。推奨される形式: REGION.p.DOMAIN.

    詳細については、DNS 構成をご覧ください。

API

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments
{
  "name": "ATTACHMENT_NAME",
  "connectionPreference": "ACCEPT_AUTOMATIC",
  "targetService": "RULE_URI",
  "enableProxyProtocol": false,
  "natSubnets": [
    "PSC_SUBNET_1_URI",
    "PSC_SUBNET_2_URI",
  ],
  "domainNames": [
    "DOMAIN_NAME",
  ],
}

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

  • PROJECT_ID: サービス アタッチメントのプロジェクト。

  • ATTACHMENT_NAME: サービス アタッチメントに割り当てる名前。

  • REGION: 新しいサービス アタッチメントのリージョン。これは、公開するサービスと同じリージョンにする必要があります。

  • RULE_URI: 公開するサービスに関連付けられた転送ルールの名前。

  • PSC_SUBNET_1_URIPSC_SUBNET_2_URI: このサービス アタッチメントに使用するサブネット URI。1 つ以上のサブネットを URI で指定できます。

  • DOMAIN_NAME: サービスの DNS ドメイン名(末尾のドットも含む)。推奨される形式: REGION.p.DOMAIN.

    詳細については、DNS 構成をご覧ください。

明示的なプロジェクト承認を使用してサービスを公開する

以下の手順でサービスを公開し、このサービスに接続するコンシューマを明示的に承認する必要があります。コンシューマ接続を自動的に承認する場合は、自動プロジェクト承認を使用してサービスを公開するをご覧ください。

サービスを公開するときに、サービス アタッチメントを作成します。サービス コンシューマは、サービス アタッチメントの詳細情報を使用してサービスに接続します。

プロジェクトを承認リストと拒否リストの両方に追加すると、そのプロジェクトからの接続リクエストは拒否されます。

コンシューマの接続情報を表示するには、サポートされているサービスで PROXY プロトコルを有効にします。サポートされているサービスについては、仕様をご覧ください。PROXY プロトコルの詳細については、コンシューマの接続情報の表示をご覧ください。

compute.googleapis.comservicedirectory.googleapis.com、または dns.googleapis.com を制限する VPC Service Controls の境界で保護されているプロジェクトにサービス アタッチメントを作成する場合は、追加の構成が必要です。詳細については、VPC Service Controls の上り(内向き)ルールと下り(外向き)ルールの構成をご覧ください。

Console

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

    [Private Service Connect] に移動

  2. [公開サービス] タブをクリックします。

  3. [サービスを公開] をクリックします。

  4. [ロードバランサの種類] として、内部 TCP / UDP ロードバランサまたは内部 HTTP(S) ロードバランサを選択します。

  5. 公開するサービスをホストする内部ロードバランサを選択します。

    選択した内部ロードバランサの詳細情報が [ネットワーク] フィールドと [リージョン] フィールドに挿入されます。

  6. プロンプトが表示されたら、公開するサービスに関連付けられた転送ルールを選択します。

  7. [サービス名] に、サービス アタッチメントの名前を入力します。

  8. サービスに 1 つ以上のサブネットを選択します。

    新しいサブネットを追加する場合は、次の方法で作成します。

    1. [新しいサブネットの予約] をクリックします。
    2. サブネットの名前説明(省略可)を入力します。
    3. サブネットのリージョンを選択します。
    4. サブネットに使用する IP 範囲を入力し、[追加] をクリックします。
  9. コンシューマ接続情報を表示する場合は、[プロトコル] チェックボックスをオンにします。

  10. ドメイン名を構成する場合は、ドットで終わるドメイン名を入力します。

    ドメイン名に推奨される形式は REGION.p.DOMAIN. です。

    ドメイン名を所有している必要があります。詳細については、DNS 構成をご覧ください。

  11. [選択したプロジェクトの接続を受け入れる] を選択します。

  12. [承認済みプロジェクトを追加] をクリックし、このサービスへの接続を許可するプロジェクトの詳細を入力します。

    • プロジェクト名: 接続を許可するプロジェクトの名前。
    • 接続上限: このプロジェクトから許可する接続数。
  13. [サービスを追加] をクリックします。

gcloud

gcloud compute service-attachments create ATTACHMENT_NAME \
    --region=REGION \
    --producer-forwarding-rule=RULE_NAME  \
    --connection-preference=ACCEPT_MANUAL \
    --consumer-accept-list=ACCEPTED_PROJECT_1=LIMIT_1,ACCEPTED_PROJECT_2=LIMIT_2 \
    --consumer-reject-list=REJECTED_PROJECT_1,REJECTED_PROJECT_2 \
    --nat-subnets=PSC_SUBNET_LIST \
    [ --enable-proxy-protocol ] \
    [--domain-names=DOMAIN_NAME]

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

  • ATTACHMENT_NAME: サービス アタッチメントに割り当てる名前。

  • REGION: 新しいサービス アタッチメントのリージョン。これは、公開するサービスと同じリージョンにする必要があります。

  • RULE_NAME: 公開するサービスに関連付けられた転送ルールの名前。

  • ACCEPTED_PROJECT_1ACCEPTED_PROJECT_2: 承認するプロジェクト。--consumer-accept-list は省略可能で、1 つ以上のプロジェクトを指定できます。

  • LIMIT_1LIMIT_2: プロジェクトの接続上限。接続上限は、このサービスに接続できるコンシューマ Private Service Connect エンドポイントの数になります。承認されたプロジェクトごとに、接続上限を構成する必要があります。

  • REJECTED_PROJECT_1REJECTED_PROJECT_2: 拒否するプロジェクト。--consumer-reject-list は省略可能で、1 つ以上のプロジェクトを指定できます。

  • PSC_SUBNET_LIST: このサービス アタッチメントで使用する 1 つ以上のサブネットのカンマ区切りリスト。

  • DOMAIN_NAME: サービスの DNS ドメイン名(末尾のドットも含む)。推奨される形式: REGION.p.DOMAIN.

    詳細については、DNS 構成をご覧ください。

API

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments
{
  "name": "ATTACHMENT_NAME",
  "region": "REGION",
  "connectionPreference": "ACCEPT_MANUAL",
  "targetService": "RULE_URI",
  "enableProxyProtocol": false,
  "natSubnets": [
    "PSC_SUBNET_1_URI",
    "PSC_SUBNET_2_URI",
  ],
  "consumerRejectList": [
    "REJECTED_PROJECT_1",
    "REJECTED_PROJECT_2",
  ],
  "consumerAcceptList": [
    "consumerProjectLimit": {
      "projectId": "ACCEPTED_PROJECT_1",
      "connectionsLimit": "LIMIT_2",
    },
    "consumerProjectLimit": {
      "projectId": "ACCEPTED_PROJECT_2",
      "connectionsLimit": "LIMIT_2",
    },
  ],
  "domainNames": [
    "DOMAIN_NAME",
  ],
}

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

  • PROJECT_ID: サービス アタッチメントのプロジェクト。

  • REGION: サービス アタッチメントのリージョン。

  • ATTACHMENT_NAME: サービス アタッチメントに割り当てる名前。

  • RULE_URI: 公開するサービスに関連付けられた転送ルールの URI。

  • PSC_SUBNET_1_URIPSC_SUBNET_2_URI: このサービス アタッチメントに使用するサブネット URI。1 つ以上のサブネットを URI で指定できます。

  • REJECTED_PROJECT_1REJECTED_PROJECT_2: 拒否するプロジェクト。consumerRejectList は省略可能で、1 つ以上のプロジェクトを指定できます。

  • ACCEPTED_PROJECT_1ACCEPTED_PROJECT_2: 承認するプロジェクト。consumerAcceptList は省略可能で、1 つ以上のプロジェクトを指定できます。

  • LIMIT_1LIMIT_2: プロジェクトの接続上限。接続上限は、このサービスに接続できるコンシューマ Private Service Connect エンドポイントの数になります。承認されたプロジェクトごとに、接続上限を構成する必要があります。

  • DOMAIN_NAME: サービスの DNS ドメイン名(末尾のドットも含む)。推奨される形式: REGION.p.DOMAIN.

    詳細については、DNS 構成をご覧ください。

VPC Service Controls の上り(内向き)ルールと下り(外向き)ルールを構成する

compute.googleapis.comservicedirectory.googleapis.com、または dns.googleapis.com を制限する VPC Service Controls の境界で保護されているプロジェクトにサービス アタッチメントを作成する場合は、追加の構成が必要です。

Private Service Connect エンドポイントを作成する前に、サービス コンシューマに次の情報を確認します。

  • CONSUMER_PROJECT_NUMBER: Private Service Connect エンドポイントを作成するプロジェクトのプロジェクト番号。

  • CONSUMER_SERVICE_ACCOUNT(省略可): アカウントによるアクセスを制限する上り(内向き)ルールを構成する場合に Private Service Connect エンドポイントの作成に使用されるサービス アカウント。

この情報を使用して上り(内向き)と下り(外向き)のルールを作成し、Private Service Connect エンドポイントとサービス アタッチメント間の接続を確立できるようにします。

上り(内向き)ルールと下り(外向き)ルールの構成については、上り(内向き)ポリシーと下り(外向き)ポリシーの構成をご覧ください。

  1. プロデューサー プロジェクトからコンシューマー プロジェクト CONSUMER_PROJECT_NUMBER への下り(外向き)トラフィックを許可する下り(外向き)ルールを構成します。

    - egressFrom:
        identityType: ANY_IDENTITY
      egressTo:
        operations:
        - serviceName: 'compute.googleapis.com'
          methodSelectors:
          - method: 'ServiceAttachmentsService.Insert'
          - method: 'ServiceAttachmentsService.Patch'
          - method: 'RegionForwardingRulesService.Insert'
        - serviceName: 'servicedirectory.googleapis.com'
          methodSelectors:
          - method: '*'
        - serviceName: 'dns.googleapis.com'
          methodSelectors:
          - method: '*'
        resources:
        - 'projects/CONSUMER_PROJECT_NUMBER'
    
  2. 次のいずれかの上り(内向き)ルールを構成します。

    • 次の上り(内向き)ルールの例では、CONSUMER_SERVICE_ACCOUNT によって作成されたコンシューマ エンドポイントがサービス アタッチメントに接続できます。

      - ingressFrom:
          sources:
          - accessLevel: '*' # All Sources
          identities: serviceAccount: CONSUMER_SERVICE_ACCOUNT
        ingressTo:
          operations:
          - serviceName: 'compute.googleapis.com'
            methodSelectors:
            - method: 'RegionForwardingRulesService.Insert'
          - serviceName: 'servicedirectory.googleapis.com'
            methodSelectors:
            - method: '*'
          - serviceName: 'dns.googleapis.com'
            methodSelectors:
            - method: '*'
          resources:
          - '*'
      
    • この上り(内向き)ルールの例では、どのアカウントが作成したコンシューマ エンドポイントでもサービス アタッチメントに接続できるようにします。

      - ingressFrom:
          sources:
          - accessLevel: '*' # All Sources
          identityType: ANY_IDENTITY
        ingressTo:
          operations:
          - serviceName: 'compute.googleapis.com'
            methodSelectors:
            - method: 'RegionForwardingRulesService.Insert'
          - serviceName: 'servicedirectory.googleapis.com'
            methodSelectors:
            - method: '*'
          - serviceName: 'dns.googleapis.com'
            methodSelectors:
            - method: '*'
          resources:
          - '*'
      

上り(内向き)ルールと下り(外向き)ルールを構成したら、サービス アタッチメントに接続するプロジェクト CONSUMER_PROJECT_NUMBER で Private Service Connect エンドポイントを作成できるようになったことをサービス コンシューマに通知します。

コンシューマの接続情報を表示する

デフォルトでは、Private Service Connect は、コンシューマの送信元 IP アドレスをサービス プロデューサーの VPC ネットワーク内に存在する Private Service Connect サブネットのアドレスに変換します。コンシューマの元の送信元 IP アドレスを確認する場合は、PROXY プロトコルを有効にします。

すべてのサービスが PROXY プロトコルをサポートしているわけではありません。詳しくは、仕様をご覧ください。

PROXY プロトコルが有効になっている場合は、PROXY プロトコル ヘッダーからコンシューマの送信元 IP アドレスと PSC 接続 ID(pscConnectionId)を取得できます。

PROXY プロキシを有効にする場合は、バックエンド ウェブサーバー ソフトウェアのドキュメントで、クライアント接続 TCP ペイロードで受信する PROXY プロトコル ヘッダーの解析と処理についてご確認ください。サービス アタッチメントで PROXY プロトコルが有効になっていても、バックエンド ウェブサーバーが PROXY プロトコル ヘッダーを処理するように構成されていない場合は、ウェブ リクエストの形式が正しくない可能性があります。リクエストの形式が正しくない場合、サーバーはそのリクエストを解釈できません。

pscConnectionId は、PROXY プロトコル ヘッダーで Type-Length-Value(TLV)形式にエンコードされます。

フィールド フィールドの長さ フィールド値
1 バイト 0xE0(PP2_TYPE_GCP)
長さ 2 バイト 0x8(8 バイト)
8 バイト ネットワーク順の 8 バイトの pscConnectionId

コンシューマ転送ルール、またはプロデューサー サービス アタッチメントから、8 バイトの pscConnectionId を表示できます。

pscConnectionId は、任意の時点でのすべてのアクティブな接続に対してグローバルに一意です。ただし、pscConnectionId は次のようなシナリオで再利用される可能性があります。

  • 特定の VPC ネットワーク内で Private Service Connect エンドポイント(転送ルール)を削除し、同じ IP アドレスを使用して新しいエンドポイントを作成すると、同じ pscConnectionId が使用されることがあります。

  • Private Service Connect エンドポイント(転送ルール)を含む VPC ネットワークを削除すると、7 日間の待機時間後に、これらのエンドポイントに使用される pscConnectionId が、別の VPC ネットワークにある別のエンドポイントに使用されることがあります。

pscConnectionId を使用して、デバッグやパケットの送信元のトレースを行うことができます。

また、プロデューサー サービス アタッチメントから 16 バイトの PSC アタッチメント ID を利用できます。PSC アタッチメント ID は、Private Service Connect サービス アタッチメントを識別するグローバルに一意の ID です。PSC アタッチメント ID は公開設定とデバッグに使用できます。PSC アタッチメント ID は、PROXY プロトコル ヘッダーには含まれていません。

公開サービスへのアクセス リクエストを管理する

明示的にプロジェクトを承認してサービスを公開している場合は、コンシューマ プロジェクトからの接続リクエストを承認または拒否できます。

プロジェクトを承認リストと拒否リストの両方に追加すると、そのプロジェクトからの接続リクエストは拒否されます。

サービスに対してコンシューマ エンドポイントの接続が受け入れられると、エンドポイントは、サービス アタッチメントが削除されるまでサービスに接続できます。これは、プロジェクトが明示的に承認された場合に適用されます。また、接続を自動的に受け入れるように接続設定が行われているときにコンシューマ エンドポイントが接続した場合に適用されます。

  • 承認リストからプロジェクトを削除すると、対象のプロジェクトで以前に承認されたコンシューマ エンドポイントはサービスに接続できます。エンドポイントが接続するには、対象プロジェクトの新しいコンシューマ エンドポイントからの接続を受け入れる必要があります。

  • プロジェクトを拒否リストに追加すると、対象のプロジェクトで以前に承認されたコンシューマ エンドポイントはサービスに接続できます。対象プロジェクトの新しいコンシューマ エンドポイントからの接続は拒否され、サービスに接続できません。

Console

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

    [Private Service Connect] に移動

  2. [公開サービス] タブをクリックします。

  3. 管理するサービスをクリックします。

  4. [接続済みプロジェクト] セクションに、このサービスに接続しようとしたプロジェクトが表示されます。プロジェクトの横にあるチェックボックスをオンにして、[承認] または [拒否] をクリックします。

gcloud

  1. 変更するサービス アタッチメントを記述します。

    gcloud compute service-attachments describe \
        ATTACHMENT_NAME --region=REGION
    

    出力は次のようになります。保留中のコンシューマ接続がある場合は、ステータス PENDING とともに表示されます。

    この出力例では、プロジェクト CONSUMER_PROJECT_1 が承認リストに含まれているため、ENDPOINT_1 が承認され、サービスに接続できます。プロジェクト CONSUMER_PROJECT_2 は承認リストに含まれていないため、ENDPOINT_2 は保留中です。CONSUMER_PROJECT_2 が受け入れリストに追加されると、ENDPOINT_2 のステータスが ACCEPTED に変わり、エンドポイントがサービスに接続できるようになります。

    connectedEndpoints:
    - endpoint: https://www.googleapis.com/compute/v1/projects/CONSUMER_PROJECT_1/regions/REGION_1/forwardingRules/ENDPOINT_1
      pscConnectionId: 'ENDPOINT_1_ID'
      status: ACCEPTED
    - endpoint: https://www.googleapis.com/compute/v1/projects/CONSUMER_PROJECT_2/regions/REGION_2/forwardingRules/ENDPOINT_2
      pscConnectionId: 'ENDPOINT_2_ID'
      status: PENDING
    connectionPreference: ACCEPT_MANUAL
    consumerAcceptLists:
    - connectionLimit: LIMIT_1
      projectIdOrNum: CONSUMER_PROJECT_1
    creationTimestamp: 'TIMESTAMP'
    description: 'DESCRIPTION'
    enableProxyProtocol: false
    fingerprint: FINGERPRINT
    id: 'ID'
    kind: compute#serviceAttachment
    name: NAME
    natSubnets:
    - https://www.googleapis.com/compute/v1/projects/PRODUCER_PROJECT/regions/REGION/subnetworks/PSC_SUBNET
    pscServiceAttachmentId:
      high: 'PSC_ATTACH_ID_HIGH'
      low: 'PSC_ATTACH_ID_LOW'
    region: https://www.googleapis.com/compute/v1/projects/PRODUCER_PROJECT/regions/REGION
    selfLink: https://www.googleapis.com/compute/v1/projects/projects/PRODUCER_PROJECT/regions/REGION/serviceAttachments/ATTACHMENT_NAME
    targetService: https://www.googleapis.com/compute/v1/projects/PRODUCER_PROJECT/regions/REGION/forwardingRules/PRODUCER_FWD_RULE
    
  2. コンシューマ プロジェクトを承認または拒否します。

    --consumer-accept-list--consumer-reject-list のいずれか、または両方を指定できます。--consumer-accept-list--consumer-reject-list には複数の値を指定できます。

    gcloud compute service-attachments update ATTACHMENT_NAME \
        --region=REGION \
        --consumer-accept-list=ACCEPTED_PROJECT_1=LIMIT_1,ACCEPTED_PROJECT_2=LIMIT_2 \
        --consumer-reject-list=REJECTED_PROJECT_1,REJECTED_PROJECT_2
    

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

    • ATTACHMENT_NAME: サービス アタッチメントに割り当てる名前。

    • REGION: サービス アタッチメントが配置されているリージョン。

    • ACCEPTED_PROJECT_1ACCEPTED_PROJECT_2: 承認するプロジェクト。consumerAcceptList は省略可能で、1 つ以上のプロジェクトを指定できます。

    • LIMIT_1LIMIT_2: プロジェクトの接続上限。接続上限は、このサービスに接続できるコンシューマ Private Service Connect エンドポイントの数になります。承認されたプロジェクトごとに、接続上限を構成する必要があります。

    • REJECTED_PROJECT_1REJECTED_PROJECT_2: 拒否するプロジェクト。--consumer-reject-list は省略可能で、1 つ以上のプロジェクトを指定できます。

API

  1. 変更するサービス アタッチメントを記述します。

    保留中のコンシューマ接続がある場合は、ステータス PENDING とともに表示されます。

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments/ATTACHMENT_NAME
    
  2. コンシューマ プロジェクトを承認または拒否します。

    PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments/ATTACHMENT_NAME
    
    {
      ...
      "consumerAcceptLists": [
        {
          "projectIdOrNum": "ACCEPTED_PROJECT_1"
          "connectionLimit": "LIMIT_1",
        },
        {
          "projectIdOrNum": "ACCEPTED_PROJECT_2"
          "connectionLimit": "LIMIT_2",
        }
      ],
      "consumerRejectLists": [
        "REJECTED_PROJECT_1",
        "REJECTED_PROJECT_2",
      ],
      ...
    }
    

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

    • PROJECT_ID: サービス アタッチメントのプロジェクト。

    • REGION: サービス アタッチメントのリージョン。

    • ATTACHMENT_NAME: サービス アタッチメントに割り当てる名前。

    • REJECTED_PROJECT_1REJECTED_PROJECT_2: 拒否するプロジェクト。consumerRejectList は省略可能で、1 つ以上のプロジェクトを指定できます。

    • ACCEPTED_PROJECT_1ACCEPTED_PROJECT_2: 承認するプロジェクト。consumerAcceptList は省略可能で、1 つ以上のプロジェクトを指定できます。

    • LIMIT_1LIMIT_2: プロジェクトの接続上限。接続上限は、このサービスに接続できるコンシューマ Private Service Connect エンドポイントの数になります。承認されたプロジェクトごとに、接続上限を構成する必要があります。

公開サービスの接続設定を変更する

公開サービスでは、プロジェクトの自動承認と明示的な承認を切り替えることができます。

自動承認から明示的な承認に変更しても、変更前にサービスに接続していたコンシューマ エンドポイントに影響はありません。既存のコンシューマ エンドポイントは、サービス アタッチメントが削除されるまで、公開サービスに接続できます。新しいコンシューマ エンドポイントがサービスに接続するには、事前に承認を受ける必要があります。詳細については、公開サービスへのアクセス リクエストを管理するをご覧ください。

Console

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

    [Private Service Connect] に移動

  2. [公開サービス] タブをクリックします。

  3. 更新するサービスをクリックし、[編集] をクリックします。

  4. 必要な接続設定を選択します。

    • 選択したプロジェクトの接続を受け入れる
    • すべてのプロジェクトの接続を自動的に受け入れる
  5. [選択したプロジェクトの接続を受け入れる] に切り替える場合は、許可するプロジェクトの詳細を指定するか、後で追加します。

    1. [承認済みプロジェクトを追加] をクリックします。
    2. プロジェクト接続上限を入力します。
  6. [保存] をクリックします。

gcloud

  • サービス アタッチメントの接続設定を ACCEPT_AUTOMATIC から ACCEPT_MANUAL に変更します。

    サービスに接続できるプロジェクトは、--consumer-accept-list--consumer-reject-list で制御します。承認リストと拒否リストは、接続設定の変更時に構成することも、後でリストを更新することもできます。

    gcloud compute service-attachments update ATTACHMENT_NAME \
        --region=REGION \
        --connection-preference=ACCEPT_MANUAL \
        [ --consumer-accept-list=ACCEPTED_PROJECT_1=LIMIT_1,ACCEPTED_PROJECT_2=LIMIT_2] \
        [ --consumer-reject-list=REJECTED_PROJECT_1,REJECTED_PROJECT_2 ]
    
    • ATTACHMENT_NAME: サービス アタッチメントの名前。

    • REGION: サービス アタッチメントが配置されているリージョン。

    • ACCEPTED_PROJECT_1ACCEPTED_PROJECT_2: 承認するプロジェクト。--consumer-accept-list は省略可能で、1 つ以上のプロジェクトを指定できます。

    • LIMIT_1LIMIT_2: プロジェクトの接続上限。接続上限は、このサービスに接続できるコンシューマ Private Service Connect エンドポイントの数になります。承認されたプロジェクトごとに、接続上限を構成する必要があります。

    • REJECTED_PROJECT_1REJECTED_PROJECT_2: 拒否するプロジェクト。--consumer-reject-list は省略可能で、1 つ以上のプロジェクトを指定できます。

  • サービス アタッチメントの接続設定を ACCEPT_MANUAL から ACCEPT_AUTOMATIC に変更します。

    承認リストまたは拒否リストに値がある場合は、接続設定("")の変更時に値を空に設定します。

    gcloud compute service-attachments update ATTACHMENT_NAME \
        --region=REGION \
        --connection-preference=ACCEPT_AUTOMATIC \
         --consumer-accept-list="" \
         --consumer-reject-list=""
    
    • ATTACHMENT_NAME: サービス アタッチメントの名前。

    • REGION: サービス アタッチメントが配置されているリージョン。

API

  • サービス アタッチメントの接続設定を ACCEPT_AUTOMATIC から ACCEPT_MANUAL に変更します。
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments/ATTACHMENT_NAME

{
  ...
  "connectionPreference": "ACCEPT_MANUAL",
  "consumerAcceptLists": [
    {
      "projectIdOrNum": "ACCEPTED_PROJECT_1"
      "connectionLimit": "LIMIT_1",
    },
    {
      "projectIdOrNum": "ACCEPTED_PROJECT_2"
      "connectionLimit": "LIMIT_2",
    }
  ],
  "consumerRejectLists": [
    "REJECTED_PROJECT_1",
    "REJECTED_PROJECT_2",
  ],
  ...
}

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

  • PROJECT_ID: サービス アタッチメントのプロジェクト。

  • REGION: サービス アタッチメントのリージョン。

  • ATTACHMENT_NAME: サービス アタッチメントに割り当てる名前。

  • REJECTED_PROJECT_1REJECTED_PROJECT_2: 拒否するプロジェクト。consumerRejectList は省略可能で、1 つ以上のプロジェクトを指定できます。

  • ACCEPTED_PROJECT_1ACCEPTED_PROJECT_2: 承認するプロジェクト。consumerAcceptList は省略可能で、1 つ以上のプロジェクトを指定できます。

  • LIMIT_1LIMIT_2: プロジェクトの接続上限。接続上限は、このサービスに接続できるコンシューマ Private Service Connect エンドポイントの数になります。承認されたプロジェクトごとに、接続上限を構成する必要があります。

  • サービス アタッチメントの接続設定を ACCEPT_MANUAL から ACCEPT_AUTOMATIC に変更します。

    consumerAcceptLists フィールドまたは consumerRejectLists フィールドにプロジェクトが指定されている場合は、接続設定を ACCEPT_AUTOMATIC に変更するときに、プロジェクトを空に設定します。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments/ATTACHMENT_NAME

{
  ...
  "connectionPreference": "ACCEPT_AUTOMATIC",
  "consumerAcceptLists": [ ],
  "consumerRejectLists": [ ],
  ...
}

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

  • PROJECT_ID: サービス アタッチメントのプロジェクト。

  • REGION: サービス アタッチメントのリージョン。

  • ATTACHMENT_NAME: サービス アタッチメントの名前。

公開したサービスに対してサブネットの追加または削除を行う

公開サービスを編集することで、Private Service Connect サブネットを構成に追加したり、構成から削除できます。

たとえば、既存のサービスで利用可能な IP アドレスを増やす必要があるとします。アドレスを追加するには、次のいずれかを行います。

公開サービスから Private Service Connect サブネットを削除しても、そのサブネット内の IP アドレスは解放されません。IP アドレスが解放されるのは、コンシューマの Private Service Connect エンドポイントが削除された場合、または Private Service Connect エンドポイントにアクセスするクライアント VM が削除された場合のみです。

サブネット構成を変更した場合は、新しいサブネットからのリクエストがバックエンド VM に到達できるように、ファイアウォール ルールを更新します。

Console

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

    [Private Service Connect] に移動

  2. [公開サービス] タブをクリックします。

  3. 更新するサービスをクリックし、[編集] をクリックします。

  4. このサービスに使用するサブネットを変更します。

    新しいサブネットを追加する場合は、次の方法で作成します。

    1. [新しいサブネットの予約] をクリックします。
    2. サブネットの名前説明(省略可)を入力します。
    3. サブネットのリージョンを選択します。
    4. サブネットに使用する IP 範囲を入力し、[追加] をクリックします。
  5. [保存] をクリックします。

gcloud

このサービス アタッチメントで使用されている Private Service Connect サブネットを更新します。

gcloud compute service-attachments update ATTACHMENT_NAME \
    --region=REGION \
    --nat-subnets=PSC_SUBNET_LIST

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

  • ATTACHMENT_NAME: サービス アタッチメントの名前。

  • REGION: サービス アタッチメントが配置されているリージョン。

  • PSC_SUBNET_LIST: このサービス アタッチメントで使用する 1 つ以上のサブネットのカンマ区切りリスト。

API

このサービス アタッチメントで使用されている Private Service Connect サブネットを更新します。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments/ATTACHMENT_NAME

{
  ...
  "natSubnets": [
    "PSC_SUBNET1_URI",
    "PSC_SUBNET2_URI",
  ],
  ...
}

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

  • PROJECT_ID: サービス アタッチメントのプロジェクト。

  • REGION: サービス アタッチメントのリージョン。

  • ATTACHMENT_NAME: サービス アタッチメントに割り当てる名前。

  • PSC_SUBNET1_URIPSC_SUBNET2_URI: このサービス アタッチメントで使用するサブネットの URI。1 つまたは複数のサブネットを指定できます。

公開サービスを一覧表示する

すべてのサービスのリストを表示できます。

Console

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

    [Private Service Connect] に移動

  2. [公開サービス] タブをクリックします。

    Private Service Connect サービスのアタッチメントが表示されます。

gcloud

  1. サービス アタッチメントのリストを表示します。

    gcloud compute service-attachments list [--regions=REGION_LIST]
    

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

    • REGION_LIST: サービス アタッチメントを表示する 1 つ以上のリージョンのカンマ区切りリスト。たとえば、us-central1us-west1,us-central1 です。

API

特定のリージョンまたはすべてのリージョンに存在するすべてのサービス アタッチメントを表示できます。

  • リージョン内のすべてのサービス アタッチメントを表示するには:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments
    
  • すべてのリージョンのすべてのサービス アタッチメントを表示するには:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/aggregated/serviceAttachments
    

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

    • PROJECT_ID: サービス アタッチメントのプロジェクト。

    • REGION: サービス アタッチメントのリージョン。

    • ATTACHMENT_NAME: サービス アタッチメントの名前。

公開サービスの詳細を表示する

公開サービスの構成の詳細を表示できます。Cloud Console には、サービス コンシューマがサービスに接続するために必要なサービス アタッチメント URI など、いくつかの構成の詳細が表示されます。サービス アタッチメントのコンシューマの pscConnectionId 値など、すべての詳細を表示するには、Google Cloud CLI または API を使用します。

Console

公開サービスの詳細を表示できます。[サービス アタッチメント] フィールドには、サービス アタッチメントの URI が含まれています。

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

    [Private Service Connect] に移動

  2. [公開サービス] タブをクリックします。

  3. 表示するサービスをクリックします。

gcloud

公開サービスの詳細を表示できます。selfLink フィールドには、サービス アタッチメント URI が含まれます。

gcloud compute service-attachments describe \
    ATTACHMENT_NAME --region=REGION

API

公開サービスの詳細を表示できます。selfLink フィールドには、サービス アタッチメント URI が含まれます。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments/ATTACHMENT_NAME

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

  • PROJECT_ID: サービス アタッチメントのプロジェクト。

  • REGION: サービス アタッチメントのリージョン。

  • ATTACHMENT_NAME: サービス アタッチメントの名前。

公開サービスを削除する

公開サービスは、サービス アタッチメントとのコンシューマ接続が存在する場合でも削除できます。公開サービスを削除すると、サービス アタッチメントのみが削除されます。関連付けられているロードバランサは削除されません。公開されたサービスを削除すると、次のようになります。

Console

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

    [Private Service Connect] に移動

  2. [公開サービス] タブをクリックします。

  3. 削除するサービスをクリックします。

  4. [削除] をクリックします。

gcloud

gcloud compute service-attachments delete \
    ATTACHMENT_NAME --region=REGION

API

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments/ATTACHMENT_NAME

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

  • PROJECT_ID: サービス アタッチメントのプロジェクト。

  • REGION: サービス アタッチメントのリージョン。

  • ATTACHMENT_NAME: サービス アタッチメントの名前。

ロギング

バックエンド VM を含むサブネットで VPC フローログを有効にできます。このログには、Private Service Connect のサブネット内のバックエンド VM と IP アドレスの間のフローが記録されます。

既知の問題

  • PATCH API を使用してサービス アタッチメントを更新する場合は、更新するフィールドだけでなく、サービス アタッチメントのすべてのフィールドをリクエストの本文に指定する必要があります。すべてのフィールドを取得するには、serviceAttachments.get を使用します。