Private Service Connect を使用してマネージド サービスを公開する
サービス プロデューサーとして Private Service Connect を利用し、VPC ネットワークの内部 IP アドレスを使用してサービスを公開できます。サービス コンシューマは、VPC ネットワークの内部 IP アドレスを使用して、公開サービスにアクセスできます。
このガイドでは、Private Service Connect を使用してサービスを公開する方法について説明します。サービスを公開するには、次の操作を行います。
サポートされている構成を使用してサポートされているロードバランサにサービスをホストする。
ロードバランサに関連付けられた転送ルールを参照するサービス アタッチメントを作成する。
公開サービスに接続できる Private Service Connect エンドポイントには、次の 2 種類があります。
これらのエンドポイント タイプでは、プロデューサー構成が若干異なります。詳細については、サポートされている構成をご覧ください。
ロール
次の IAM ロールは、このガイドのタスクを行うために必要な権限を備えています。
- Compute ネットワーク管理者(
roles/compute.networkAdmin
)
始める前に
サービスをすべてのプロジェクトからアクセスできるようにするか、サービスにアクセスできるプロジェクトを制御するかを決定します。
サポートするエンドポイントのタイプを決めます。サービス構成要件の詳細については、サポートされている構成をご覧ください。
エンドポイント タイプの詳細については、Private Service Connect でマネージド サービスを公開して使用するをご覧ください。
制限事項
Packet Mirroring では、Private Service Connect の公開サービス トラフィックのパケットはミラーリングできません。
コンシューマ HTTP(S) サービス コントロールを使用する Private Service Connect エンドポイントは、接続されたクライアントのリストに表示されません。
共有 VPC ホスト プロジェクトで Private Service Connect サブネットを作成し、サービス プロジェクトでサービス アタッチメントを作成する場合は、Google Cloud CLI または API を使用してサービス アタッチメントを作成する必要があります。
内部プロトコル転送に使用される転送ルールを参照するサービス アタッチメントを作成するには、Google Cloud CLI または API を使用する必要があります。
問題と回避策については、既知の問題をご覧ください。
仕様
以降のセクションでは、次の項目について説明します。
サポートされているロードバランサの種類
各 Private Service Connect エンドポイント タイプのサポートに必要な、サポート対象のロードバランサとサービス アタッチメントの構成
サポートされているロードバランサの種類
次のロードバランサを使用してサービスをホストできます。
サービス プロデューサー VPC ネットワーク内の内部 TCP / UDP ロードバランサ。
サービス プロデューサー VPC ネットワーク内の内部 HTTP(S) ロードバランサ
サービス プロデューサー VPC ネットワーク内の内部プロトコル転送。
サービス プロデューサー VPC ネットワーク内の内部リージョン TCP プロキシ ロードバランサ。バックエンドには、Google Cloud、他のクラウド、オンプレミス環境、またはこれらの組み合わせを使用できます。
各ロードバランサ タイプでサポートされる構成については、サポートされているロードバランサの構成をご覧ください。
Google Kubernetes Engine の内部 TCP / UDP ロードバランサにホストされているサービスを公開することもできます。この構成(ロードバランサとサービス アタッチメントの構成を含む)については、GKE ドキュメントの Private Service Connect を使用した内部 TCP / UDP ロードバランサの作成をご覧ください。
サポートされている構成
公開サービスに接続できる Private Service Connect エンドポイント タイプは 2 つありますが、構成要件が異なります。次の表は、公開サービスが各エンドポイント タイプをサポートするために必要な構成をまとめたものです。
サービス プロデューサーの構成 | Private Service Connect エンドポイント(転送ルールに基づく) | HTTP(S) サービス制御を使用する Private Service Connect エンドポイント(グローバル外部 HTTP(S) ロードバランサに基づく) | |
---|---|---|---|
サービス プロデューサー ロードバランサ | |||
サポートされているロードバランサの種類 |
|
内部 TCP / UDP ロードバランサのみ | |
サポートされているプロトコル | ロードバランサでサポートされているトラフィック | 内部 TCP / UDP ロードバランサは HTTPS トラフィックを処理する必要があります。 | |
ロードバランサの構成 | |||
グローバル アクセス | サポート対象 この公開サービスに接続するすべての Private Service Connect エンドポイントは、公開サービスと同じリージョンに配置されている必要があります。 |
必須 | |
共有 IP アドレスを使用する複数の転送ルール(IP アドレスの目的を SHARED_LOADBALANCER_VIP に設定)。 |
非対応 | 非対応 | |
サブセット化 | 非対応 | 非対応 | |
2 タプルまたは 3 タプルに設定されたセッション アフィニティ |
非対応。 5 タプルのセッション アフィニティを構成します1。 |
非対応。 5 タプルのセッション アフィニティを構成します1。 |
|
Packet Mirroring | 非対応 | 非対応 | |
サービス アタッチメント | |||
PROXY プロトコル | 次のロードバランサにホストされている TCP サービスでサポートされています。
次の構成ではサポートされていません。
|
非対応 | |
公開モード | |||
プロジェクトの自動承認 | 任意のプロジェクトのエンドポイントが接続可能 | 任意のプロジェクトのエンドポイントが接続可能 | |
明示的な承認 | コンシューマ プロジェクトは、エンドポイントが作成される前後に受け入れられます。 | エンドポイントを作成する前にコンシューマ プロジェクトを承認する必要があります。 |
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 を使用してサービス アタッチメントを作成する必要があります。
サービスのロードバランサと同じリージョンにサブネットを作成します。
通常のサブネットを Private Service Connect サブネットに変換することはできません。
コンソール
- [VPC ネットワーク] ページに移動します。
[VPC ネットワーク] に移動 - VPC ネットワークの名前をクリックして、[VPC ネットワークの詳細] ページを表示します。
- [サブネットを追加] をクリックします。表示されたパネルで、次の操作を行います。
- 名前を入力します。
- リージョンを選択します。
- [目的] セクションで [Private Service Connect] を選択します。
- IP アドレス範囲を入力します。例:
10.10.10.0/24
- [追加] をクリックします。
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) ロードバランサに基づく) |
|
グローバル外部 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 ファイアウォール ルールの概要をご覧ください。このトラフィックを許可する階層型ファイアウォール ルールを構成する場合は、階層型ファイアウォール ポリシーの概要をご覧ください。
サービスを公開する
サービスを公開するには、サービス アタッチメントを作成します。サービスは、次の 2 つの方法のいずれかで使用可能にできます。
サービスのロードバランサと同じリージョンにサービス アタッチメントを作成します。
プロジェクトの自動承認を使用してサービスを公開する
以下の手順でサービスを公開し、任意のコンシューマがこのサービスに接続できるように自動的に設定します。コンシューマ接続を明示的に承認する場合は、明示的なプロジェクト承認を使用してサービスを公開するをご覧ください。
サービスを公開するときに、サービス アタッチメントを作成します。サービス コンシューマは、サービス アタッチメントの詳細情報を使用してサービスに接続します。
コンシューマの接続情報を表示するには、サポートされているサービスで PROXY プロトコルを有効にします。サポートされているサービスについては、サポートされる構成をご覧ください。PROXY プロトコルの詳細については、コンシューマの接続情報の表示をご覧ください。
コンソール
Google Cloud Console で、[Private Service Connect] ページに移動します。
[公開サービス] タブをクリックします。
[サービスを公開] をクリックします。
公開するサービスのロードバランサの種類を選択します。
- 内部 TCP / UDP ロードバランサ
- 内部 TCP プロキシ ロードバランサ
- 内部 HTTP(S) ロードバランサ
公開するサービスをホストする内部ロードバランサを選択します。
選択した内部ロードバランサの詳細情報が [ネットワーク] フィールドと [リージョン] フィールドに挿入されます。
プロンプトが表示されたら、公開するサービスに関連付けられた転送ルールを選択します。
[サービス名] に、サービス アタッチメントの名前を入力します。
サービスに 1 つ以上のサブネットを選択します。新しいサブネットを追加する場合は、次の方法で作成します。
- [新しいサブネットの予約] をクリックします。
- サブネットの名前と説明(省略可)を入力します。
- サブネットのリージョンを選択します。
- サブネットに使用する IP 範囲を入力し、[追加] をクリックします。
コンシューマ接続情報を表示するには、[プロキシ プロトコルを使用する] を選択します。
ドメイン名を構成する場合は、ドットで終わるドメイン名を入力します。
ドメイン名に推奨される形式は
REGION.p.DOMAIN.
です。ドメイン名を所有している必要があります。詳細については、DNS 構成をご覧ください。
[すべてのプロジェクトの接続を自動的に受け入れる] を選択します。
[サービスを追加] をクリックします。
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_URI
とPSC_SUBNET_2_URI
: このサービス アタッチメントに使用するサブネット URI。1 つ以上のサブネットを URI で指定できます。DOMAIN_NAME
: サービスの DNS ドメイン名(末尾のドットも含む)。推奨される形式:REGION.p.DOMAIN.
詳細については、DNS 構成をご覧ください。
明示的なプロジェクト承認を使用してサービスを公開する
以下の手順でサービスを公開し、このサービスに接続するコンシューマを明示的に承認する必要があります。コンシューマ接続を自動的に承認する場合は、自動プロジェクト承認を使用してサービスを公開するをご覧ください。
サービスを公開するときに、サービス アタッチメントを作成します。サービス コンシューマは、サービス アタッチメントの詳細情報を使用してサービスに接続します。
プロジェクトを承認リストと拒否リストの両方に追加すると、そのプロジェクトからの接続リクエストは拒否されます。
コンシューマの接続情報を表示するには、サポートされているサービスで PROXY プロトコルを有効にします。サポートされているサービスについては、サポートされる構成をご覧ください。PROXY プロトコルの詳細については、コンシューマの接続情報の表示をご覧ください。
コンソール
Google Cloud Console で、[Private Service Connect] ページに移動します。
[公開サービス] タブをクリックします。
[サービスを公開] をクリックします。
[ロードバランサの種類] として、内部 TCP / UDP ロードバランサまたは内部 HTTP(S) ロードバランサを選択します。
公開するサービスをホストする内部ロードバランサを選択します。
選択した内部ロードバランサの詳細情報が [ネットワーク] フィールドと [リージョン] フィールドに挿入されます。
プロンプトが表示されたら、公開するサービスに関連付けられた転送ルールを選択します。
[サービス名] に、サービス アタッチメントの名前を入力します。
サービスに 1 つ以上のサブネットを選択します。
新しいサブネットを追加する場合は、次の方法で作成します。
- [新しいサブネットの予約] をクリックします。
- サブネットの名前と説明(省略可)を入力します。
- サブネットのリージョンを選択します。
- サブネットに使用する IP 範囲を入力し、[追加] をクリックします。
コンシューマ接続情報を表示する場合は、[プロトコル] チェックボックスをオンにします。
ドメイン名を構成する場合は、ドットで終わるドメイン名を入力します。
ドメイン名に推奨される形式は
REGION.p.DOMAIN.
です。ドメイン名を所有している必要があります。詳細については、DNS 構成をご覧ください。
[選択したプロジェクトの接続を受け入れる] を選択します。
[承認済みプロジェクトを追加] をクリックし、このサービスへの接続を許可するプロジェクトの詳細を入力します。
- プロジェクト名: 接続を許可するプロジェクトの名前。
- 接続上限: コンシューマ VPC ネットワーク内のサービス アタッチメントに接続できる、コンシューマ VPC ネットワーク内の Private Service Connect エンドポイントの数。
[サービスを追加] をクリックします。
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_1
とACCEPTED_PROJECT_2
: 承認するプロジェクト。--consumer-accept-list
は省略可能で、1 つ以上のプロジェクトを指定できます。LIMIT_1
とLIMIT_2
: プロジェクトの接続上限。接続上限は、このサービスに接続できるコンシューマ Private Service Connect エンドポイントの数になります。承認されたプロジェクトごとに、接続上限を構成する必要があります。REJECTED_PROJECT_1
とREJECTED_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_URI
とPSC_SUBNET_2_URI
: このサービス アタッチメントに使用するサブネット URI。1 つ以上のサブネットを URI で指定できます。REJECTED_PROJECT_1
とREJECTED_PROJECT_2
: 拒否するプロジェクト。consumerRejectList
は省略可能で、1 つ以上のプロジェクトを指定できます。ACCEPTED_PROJECT_1
とACCEPTED_PROJECT_2
: 承認するプロジェクト。consumerAcceptList
は省略可能で、1 つ以上のプロジェクトを指定できます。LIMIT_1
とLIMIT_2
: プロジェクトの接続上限。接続上限は、このサービスに接続できるコンシューマ Private Service Connect エンドポイントの数になります。承認されたプロジェクトごとに、接続上限を構成する必要があります。DOMAIN_NAME
: サービスの DNS ドメイン名(末尾のドットも含む)。推奨される形式:REGION.p.DOMAIN.
詳細については、DNS 構成をご覧ください。
コンシューマの接続情報を表示する
デフォルトでは、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 プロトコル ヘッダーには含まれていません。
公開サービスへのアクセス リクエストを管理する
明示的にプロジェクトを承認してサービスを公開している場合は、コンシューマ プロジェクトからの接続リクエストを承認または拒否できます。
プロジェクトを承認リストと拒否リストの両方に追加すると、そのプロジェクトからの接続リクエストは拒否されます。
サービスに対してコンシューマ エンドポイントの接続が受け入れられると、エンドポイントは、サービス アタッチメントが削除されるまでサービスに接続できます。これは、プロジェクトが明示的に承認された場合に適用されます。また、接続を自動的に受け入れるように接続設定が行われているときにコンシューマ エンドポイントが接続した場合に適用されます。
承認リストからプロジェクトを削除すると、対象のプロジェクトで以前に承認されたコンシューマ エンドポイントはサービスに接続できます。エンドポイントが接続するには、対象プロジェクトの新しいコンシューマ エンドポイントからの接続を受け入れる必要があります。
プロジェクトを拒否リストに追加すると、対象のプロジェクトで以前に承認されたコンシューマ エンドポイントはサービスに接続できます。対象プロジェクトの新しいコンシューマ エンドポイントからの接続は拒否され、サービスに接続できません。
コンソール
Google Cloud Console で、[Private Service Connect] ページに移動します。
[公開サービス] タブをクリックします。
管理するサービスをクリックします。
[接続済みプロジェクト] セクションに、このサービスに接続しようとしたプロジェクトが表示されます。プロジェクトの横にあるチェックボックスをオンにして、[承認] または [拒否] をクリックします。
gcloud
変更するサービス アタッチメントを記述します。
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
コンシューマ プロジェクトを承認または拒否します。
--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_1
とACCEPTED_PROJECT_2
: 承認するプロジェクト。consumerAcceptList
は省略可能で、1 つ以上のプロジェクトを指定できます。LIMIT_1
とLIMIT_2
: プロジェクトの接続上限。接続上限は、このサービスに接続できるコンシューマ Private Service Connect エンドポイントの数になります。承認されたプロジェクトごとに、接続上限を構成する必要があります。REJECTED_PROJECT_1
とREJECTED_PROJECT_2
: 拒否するプロジェクト。--consumer-reject-list
は省略可能で、1 つ以上のプロジェクトを指定できます。
API
変更するサービス アタッチメントを記述します。
保留中のコンシューマ接続がある場合は、ステータス
PENDING
とともに表示されます。GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments/ATTACHMENT_NAME
コンシューマ プロジェクトを承認または拒否します。
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_1
とREJECTED_PROJECT_2
: 拒否するプロジェクト。consumerRejectList
は省略可能で、1 つ以上のプロジェクトを指定できます。ACCEPTED_PROJECT_1
とACCEPTED_PROJECT_2
: 承認するプロジェクト。consumerAcceptList
は省略可能で、1 つ以上のプロジェクトを指定できます。LIMIT_1
とLIMIT_2
: プロジェクトの接続上限。接続上限は、このサービスに接続できるコンシューマ Private Service Connect エンドポイントの数になります。承認されたプロジェクトごとに、接続上限を構成する必要があります。
公開サービスの接続設定を変更する
公開サービスでは、プロジェクトの自動承認と明示的な承認を切り替えることができます。
自動承認から明示的な承認に変更しても、変更前にサービスに接続していたコンシューマ エンドポイントに影響はありません。既存のコンシューマ エンドポイントは、サービス アタッチメントが削除されるまで、公開サービスに接続できます。新しいコンシューマ エンドポイントがサービスに接続するには、事前に承認を受ける必要があります。詳細については、公開サービスへのアクセス リクエストを管理するをご覧ください。
コンソール
Google Cloud Console で、[Private Service Connect] ページに移動します。
[公開サービス] タブをクリックします。
更新するサービスをクリックし、[編集] をクリックします。
必要な接続設定を選択します。
- 選択したプロジェクトの接続を受け入れる
- すべてのプロジェクトの接続を自動的に受け入れる
[選択したプロジェクトの接続を受け入れる] に切り替える場合は、許可するプロジェクトの詳細を指定するか、後で追加します。
- [承認済みプロジェクトを追加] をクリックします。
- プロジェクトと接続上限を入力します。
[保存] をクリックします。
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_1
とACCEPTED_PROJECT_2
: 承認するプロジェクト。--consumer-accept-list
は省略可能で、1 つ以上のプロジェクトを指定できます。LIMIT_1
とLIMIT_2
: プロジェクトの接続上限。接続上限は、このサービスに接続できるコンシューマ Private Service Connect エンドポイントの数になります。承認されたプロジェクトごとに、接続上限を構成する必要があります。REJECTED_PROJECT_1
とREJECTED_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_1
とREJECTED_PROJECT_2
: 拒否するプロジェクト。consumerRejectList
は省略可能で、1 つ以上のプロジェクトを指定できます。ACCEPTED_PROJECT_1
とACCEPTED_PROJECT_2
: 承認するプロジェクト。consumerAcceptList
は省略可能で、1 つ以上のプロジェクトを指定できます。LIMIT_1
とLIMIT_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 サブネットを作成し、サービス アタッチメントを編集して新しいサブネットを追加します。
サブネットを編集して IPv4 範囲を拡張します。
公開サービスから Private Service Connect サブネットを削除しても、そのサブネット内の IP アドレスは解放されません。IP アドレスが解放されるのは、コンシューマの Private Service Connect エンドポイントが削除された場合、または Private Service Connect エンドポイントにアクセスするクライアント VM が削除された場合のみです。
サブネット構成を変更した場合は、新しいサブネットからのリクエストがバックエンド VM に到達できるように、ファイアウォール ルールを更新します。
コンソール
Google Cloud Console で、[Private Service Connect] ページに移動します。
[公開サービス] タブをクリックします。
更新するサービスをクリックし、[編集] をクリックします。
このサービスに使用するサブネットを変更します。
新しいサブネットを追加する場合は、次の方法で作成します。
- [新しいサブネットの予約] をクリックします。
- サブネットの名前と説明(省略可)を入力します。
- サブネットのリージョンを選択します。
- サブネットに使用する IP 範囲を入力し、[追加] をクリックします。
[保存] をクリックします。
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_URI
とPSC_SUBNET2_URI
: このサービス アタッチメントで使用するサブネットの URI。1 つまたは複数のサブネットを指定できます。
公開サービスを一覧表示する
すべてのサービスのリストを表示できます。
コンソール
Google Cloud Console で、[Private Service Connect] ページに移動します。
[公開サービス] タブをクリックします。
Private Service Connect サービスのアタッチメントが表示されます。
gcloud
サービス アタッチメントのリストを表示します。
gcloud compute service-attachments list [--regions=REGION_LIST]
次のように置き換えます。
REGION_LIST
: サービス アタッチメントを表示する 1 つ以上のリージョンのカンマ区切りリスト。たとえば、us-central1
やus-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
: サービス アタッチメントの名前。
公開サービスの詳細を表示する
公開サービスの構成の詳細を表示できます。構成の詳細は Google Cloud コンソールで確認できます。たとえば、サービス コンシューマがサービスに接続するために必要なサービス アタッチメント URI などです。サービス アタッチメントのコンシューマの pscConnectionId
値など、すべての詳細を表示するには、Google Cloud CLI または API を使用します。
コンソール
公開サービスの詳細を表示できます。[サービス アタッチメント] フィールドには、サービス アタッチメントの URI が含まれています。
Google Cloud Console で、[Private Service Connect] ページに移動します。
[公開サービス] タブをクリックします。
表示するサービスをクリックします。
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
: サービス アタッチメントの名前。
公開サービスを削除する
公開サービスは、サービス アタッチメントとのコンシューマ接続が存在する場合でも削除できます。公開サービスを削除すると、サービス アタッチメントのみが削除されます。関連付けられているロードバランサは削除されません。公開されたサービスを削除すると、次のようになります。
Private Service Connect エンドポイント(転送ルールに基づく)からのトラフィックがロードバランサに送信されなくなります。
グローバル HTTP(S) ロードバランサに基づくコンシューマ HTTP(S) サービス制御を備えた Private Service Connect エンドポイントからのトラフィックは、ロードバランサが削除されるまでロードバランサに送信されます。
コンソール
Google Cloud Console で、[Private Service Connect] ページに移動します。
[公開サービス] タブをクリックします。
削除するサービスをクリックします。
[削除] をクリックします。
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 アドレスの間のフローが記録されます。
VPC Service Controls
VPC Service Controls と Private Service Connect には互換性があります。Private Service Connect エンドポイントがデプロイされている VPC ネットワークが VPC Service Controls の境界内にある場合、Private Service Connect エンドポイントも同じ境界の一部になります。Private Service Connect エンドポイントを介してアクセスされる VPC Service Controls でサポートされているサービスには、その VPC Service Controls の境界のポリシーが適用されます。
Private Service Connect エンドポイントを作成すると、コンシューマ プロジェクトとプロデューサー プロジェクトの間でコントロール プレーンの API 呼び出しが行われ、Private Service Connect 接続を確立します。同じ VPC Service Controls の境界内にないコンシューマ プロジェクトとプロデューサー プロジェクトの間に Private Service Connect 接続を確立する場合、下り(外向き)ポリシーによる明示的な承認は必要ありません。Private Service Connect エンドポイントを介した VPC Service Controls 対応サービスとの通信は、VPC Service Controls の境界で保護されます。
既知の問題
PATCH
API を使用してサービス アタッチメントを更新する場合は、更新するフィールドだけでなく、サービス アタッチメントのすべてのフィールドをリクエストの本文に指定する必要があります。すべてのフィールドを取得するには、serviceAttachments.get
を使用します。
トラブルシューティング
サービス アタッチメントの更新時のエラー
サービスのアタッチメントの更新時に次のエラー メッセージが表示された場合は、承認リストまたは拒否リストに、削除されたプロジェクト「The
resource PROJECT was not found
」が含まれている可能性があります。
この問題を解決するには、削除されたプロジェクトをサービス アタッチメント構成から削除します。
gcloud compute service-attachments describe
コマンドを使用して、変更するサービス アタッチメントの構成を表示します。後でサービス アタッチメントを更新できる形式で承認リストを出力するには、次の操作を行います。
gcloud compute service-attachments describe ATTACHMENT_NAME \ --region=REGION --flatten="consumerAcceptLists[]" \ --format="csv[no-heading,separator='='](consumerAcceptLists.projectIdOrNum,consumerAcceptLists.connectionLimit)" \ | xargs | sed -e 's/ /,/g'
承認リストの出力は次のようになります。
PROJECT_1=LIMIT_1,PROJECT_2=LIMIT_2,PROJECT_3=LIMIT_3
後でサービス アタッチメントを更新できる形式で拒否リストを出力するには、次の操作を行います。
gcloud compute service-attachments describe ATTACHMENT_NAME \ --region=REGION \ --format="value[delimiter=','](consumerRejectLists[])"
拒否リストの出力は次のようになります。
PROJECT_1,PROJECT_2,PROJECT_3
コマンド出力を編集して、削除されたプロジェクトを承認リストと拒否リストから削除します。
サービス アタッチメントを更新して、削除されたプロジェクトを除外します。
承認リストを更新するには、次の手順を行います。
gcloud compute service-attachments update ATTACHMENT_NAME \ --region=REGION \ --consumer-accept-list=UPDATED_ACCEPT_LIST
拒否リストを更新するには、次の手順を行います。
gcloud compute service-attachments update ATTACHMENT_NAME \ --region=REGION \ --consumer-reject-list=UPDATED_REJECT_LIST