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

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

このガイドでは、Private Service Connect を使用してサービスを公開する方法について説明します。サービスを公開するには、次の操作を行います。

Private Service Connect では、公開サービスに接続する 2 つの方法を用意しています。

これらのエンドポイント タイプでは、プロデューサー構成が若干異なります。詳細については、機能と互換性をご覧ください。

ロール

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

始める前に

サポートされているロードバランサの種類

次のロードバランサを使用してサービスをホストできます。

各ロードバランサ タイプでサポートされる構成については、機能と互換性をご覧ください。

Google Kubernetes Engine の内部パススルー ネットワーク ロードバランサにホストされているサービスを公開することもできます。この構成(ロードバランサとサービス アタッチメントの構成を含む)については、GKE ドキュメントの Private Service Connect を使用した内部パススルー ネットワーク ロードバランサの作成をご覧ください。

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

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

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

また、共有 VPC ホスト プロジェクトで Private Service Connect サブネットを作成できます。

サービスのロードバランサと同じリージョンにサブネットを作成します。

通常のサブネットを Private Service Connect サブネットに変換することはできません。

コンソール

  1. Google Cloud コンソールの [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: サブネットのプロジェクト。

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

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

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

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

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

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

Private Service Connect の種類 クライアント トラフィックの IP アドレス範囲 詳細
エンドポイント(転送ルールに基づく) このサービスに関連付けられている Private Service Connect サブネットの IP アドレス範囲。 デフォルトのネットワークを使用している場合は、事前に入力された default-allow-internal では、このトラフィックをブロックする優先度の高いルールがない限り、このトラフィックが許可されます。
バックエンド(グローバル外部アプリケーション ロードバランサに基づく)
  • 130.211.0.0/22
  • 35.191.0.0/16
グローバル外部アプリケーション ロードバランサは、これらの 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_LIST

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

  • NAME: ファイアウォール ルールの名前。

  • 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_LIST

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

  • NAME: ファイアウォール ルールの名前。

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

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

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

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

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

サービスを公開する

サービスを公開するには、サービス アタッチメントを作成します。サービスは、次の 2 つの方法のいずれかで使用可能にできます。

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

各サービス アタッチメントは 1 つ以上の Private Service Connect サブネットを指すことができますが、Private Service Connect サブネットを複数のサービス アタッチメントで使用することはできません。

自動承認でサービスを公開する

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

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

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

コンソール

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

    [Private Service Connect] に移動

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

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

  4. 公開するサービスのロードバランサの種類を選択します。

    • 内部パススルー ネットワーク ロードバランサ
    • リージョン内部プロキシ ネットワーク ロードバランサ
    • リージョン内部アプリケーション ロードバランサ
  5. 公開するサービスをホストする内部ロードバランサを選択します。

    サービス プロジェクト管理者は、共有 VPC ネットワークの IP アドレスを持つ内部ロードバランサを選択できます。詳しくは、共有 VPC をご覧ください。

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

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

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

  8. サービスの Private Service Connect サブネットを 1 つ以上選択します。このリストには、選択した内部ロードバランサの VPC ネットワークのサブネットが表示されます。ここには、共有 VPC を介してサービス プロジェクトと共有されているサブネットも表示されます。

    サービス アタッチメントで、共有 VPC ネットワークの IP アドレスを持つ内部ロードバランサを使用する場合は、同じ共有 VPC ネットワークから共有サブネットを選択する必要があります。

  9. コンシューマ接続情報を表示するには、[プロキシ プロトコルを使用する] を選択します。

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

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

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

  11. [Automatically accept connections] を選択します。

  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: 公開するサービスに関連付けられた転送ルールの名前。

    サービス プロジェクト管理者は、共有 VPC ネットワークの IP アドレスを持つ内部ロードバランサの転送ルールを指定できます。詳しくは、共有 VPC をご覧ください。

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

    共有 VPC ネットワークの IP アドレスを含む転送ルールを使用してサービス アタッチメントを作成する場合は、同じ共有 VPC ネットワークの共有サブネットを使用します。共有サブネットごとに、完全なリソース URI を指定します(例: --nat-subnets=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET)。

  • 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: サービス アタッチメントのプロジェクト。

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

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

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

    サービス プロジェクト管理者は、共有 VPC ネットワークの IP アドレスを持つ内部ロードバランサの転送ルールを指定できます。詳しくは、共有 VPC をご覧ください。

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

    共有 VPC ネットワークの IP アドレスを含む転送ルールを使用してサービス アタッチメントを作成する場合は、同じ共有 VPC ネットワークの共有サブネットを使用します。

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

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

明示的な承認でサービスを公開する

以下の手順でサービスを公開し、このサービスに接続できるコンシューマーを明示的に承認します。コンシューマー接続を自動的に承認する場合は、自動承認でサービスを公開するをご覧ください。

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

各サービス アタッチメントには、コンシューマー承認リストとコンシューマー拒否リストがあります。このリストにより、サービスに接続できるエンドポイントが決まります。特定のサービス アタッチメントは、これらのリストにあるプロジェクトまたはネットワークのいずれかを使用できますが、両方を使用することはできません。

プロジェクトに基づくコンシューマの承認からネットワークに基づくコンシューマの承認(またはその逆)に変更するには、次のようにします。

  • 1 回のオペレーションで、承認済みプロジェクトやネットワークをすべて置き換えます。
  • 以前と同じアクセス権を付与する必要がある場合は、新しい承認リストと拒否リストが以前のリストと同じになるようにしてください。

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

コンソール

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

    [Private Service Connect] に移動

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

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

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

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

    サービス プロジェクト管理者は、共有 VPC ネットワークの IP アドレスを持つ内部ロードバランサを選択できます。詳しくは、共有 VPC をご覧ください。

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

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

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

  8. サービスの Private Service Connect サブネットを 1 つ以上選択します。このリストには、選択した内部ロードバランサの VPC ネットワークのサブネットが表示されます。ここには、共有 VPC を介してサービス プロジェクトと共有されているサブネットも表示されます。

    サービス アタッチメントで、共有 VPC ネットワークの IP アドレスを持つ内部ロードバランサを使用する場合は、同じ共有 VPC ネットワークから共有サブネットを選択する必要があります。

  9. コンシューマー接続情報を表示する場合は、[プロトコル] チェックボックスをオンにします。

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

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

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

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

    1. 接続を受け入れるプロジェクトごとに、次の操作を行います。
      1. [承認済みプロジェクトを追加] をクリックして、次のように入力します。
        • 接続の受け入れ元となるプロジェクトのプロジェクト ID またはプロジェクト番号。
        • 接続上限: 指定したプロジェクトから接続できるエンドポイントの最大数を指定します。
    2. 省略可: 接続を明示的に拒否するプロジェクトごとに、[不承認となったプロジェクトを追加] をクリックして、プロジェクト ID またはプロジェクト番号を入力します。
  12. 選択したネットワークの接続を受け入れる場合は、[Accept connections for selected networks] を選択します。

    1. 接続を受け入れるネットワークごとに、次の操作を行います。
      1. [承認済みネットワークを追加] をクリックして、次のように入力します。
        • 接続を受け入れるネットワークの親プロジェクトのプロジェクト ID またはプロジェクト番号。
        • 接続を受け入れるネットワークの名前。
        • 接続上限: 指定したネットワークから接続できるエンドポイントの最大数を指定します。
    2. 省略可: 接続を明示的に拒否するネットワークごとに、[不承認となったネットワークを追加] をクリックして、ネットワークの親プロジェクトの ID またはプロジェクト番号と、ネットワークの名前を入力します。
  13. 接続調整を無効にする場合は、[接続調整を有効にする] チェックボックスをオフにします。

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

gcloud

gcloud compute service-attachments create ATTACHMENT_NAME \
    --region=REGION \
    --producer-forwarding-rule=RULE_NAME \
    --connection-preference=ACCEPT_MANUAL \
    --consumer-accept-list=ACCEPTED_PROJECT_OR_NETWORK_1=LIMIT_1,ACCEPTED_PROJECT_OR_NETWORK_2=LIMIT_2 \
    --consumer-reject-list=REJECTED_PROJECT_OR_NETWORK_1,REJECTED_PROJECT_OR_NETWORK_2 \
    --nat-subnets=PSC_SUBNET_LIST \
    [--enable-proxy-protocol ] \
    [--domain-names=DOMAIN_NAME] \
    [--reconcile-connections]

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

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

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

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

    サービス プロジェクト管理者は、共有 VPC ネットワークの IP アドレスを持つ内部ロードバランサの転送ルールを指定できます。詳しくは、共有 VPC をご覧ください。

  • ACCEPTED_PROJECT_OR_NETWORK_1ACCEPTED_PROJECT_OR_NETWORK_2: 受け入れるプロジェクト ID、プロジェクト名、ネットワーク URI。--consumer-accept-list は任意で、1 つ以上のプロジェクトまたはネットワークを含めることができます。両方のタイプを組み合わせることはできません。

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

  • REJECTED_PROJECT_OR_NETWORK_1REJECTED_PROJECT_OR_NETWORK_2: 拒否するプロジェクト ID、プロジェクト名、ネットワーク URI。--consumer-reject-list は任意で、1 つ以上のプロジェクトまたはネットワークを含めることができます。両方のタイプを組み合わせることはできません。

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

    共有 VPC ネットワークの IP アドレスを含む転送ルールを使用してサービス アタッチメントを作成する場合は、同じ共有 VPC ネットワークの共有サブネットを使用します。共有サブネットごとに、完全なリソース URI を指定します(例: --nat-subnets=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET)。

  • 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"
      ],
      "consumerRejectLists": [
        "REJECTED_PROJECT_1",
        "REJECTED_PROJECT_2"
      ],
      "consumerAcceptLists": [
        {
          "projectIdOrNum": "ACCEPTED_PROJECT_1",
          "connectionLimit": "LIMIT_1"
        },
        {
          "projectIdOrNum": "ACCEPTED_PROJECT_2",
          "connectionLimit": "LIMIT_2"
        }
      ],
      "domainNames": [
        "DOMAIN_NAME"
      ]
    }
    

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

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

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

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

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

      サービス プロジェクト管理者は、共有 VPC ネットワークの IP アドレスを持つ内部ロードバランサの転送ルールを指定できます。詳しくは、共有 VPC をご覧ください。

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

      共有 VPC ネットワークの IP アドレスを含む転送ルールを使用してサービス アタッチメントを作成する場合は、同じ共有 VPC ネットワークの共有サブネットを使用します。

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

    • ACCEPTED_PROJECT_1ACCEPTED_PROJECT_2: 受け入れるプロジェクトのプロジェクト ID または番号。consumerAcceptLists は省略可能で、1 つ以上のプロジェクトを指定できます。

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

    • DOMAIN_NAME: サービスの DNS ドメイン名(末尾のドットも含む)。推奨形式: REGION.p.DOMAIN. 詳細については、DNS 構成をご覧ください。

  • VPC ネットワークに基づいてサービスを公開し、ユーザーを明示的に承認するには、次のリクエストを送信します。

    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"
      ],
      "consumerRejectLists": [
        "projects/REJECTED_PROJECT_ID_1/global/networks/REJECTED_NETWORK_1",
        "projects/REJECTED_PROJECT_ID_2/global/networks/REJECTED_NETWORK_2"
      ],
      "consumerAcceptLists": [
        {
          "networkUrl": "projects/ACCEPTED_PROJECT_ID_1/global/networks/ACCEPTED_NETWORK_1",
          "connectionLimit": "LIMIT_1"
        },
        {
          "networkUrl": "projects/ACCEPTED_PROJECT_ID_2/global/networks/ACCEPTED_NETWORK_2",
          "connectionLimit": "LIMIT_2"
        }
      ],
      "domainNames": [
        "DOMAIN_NAME"
      ]
    }
    

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

    • REJECTED_PROJECT_ID_1REJECTED_PROJECT_ID_2: 拒否するネットワークの親プロジェクトの ID。consumerRejectLists は省略可能で、1 つ以上のネットワークを指定できます。
    • REJECTED_NETWORK_1REJECTED_NETWORK_2: 拒否するネットワークの名前。
    • ACCEPTED_PROJECT_ID_1ACCEPTED_PROJECT_ID_2: 承認するネットワークの親プロジェクトの ID。consumerAcceptLists は省略可能で、1 つ以上のネットワークを指定できます。
    • ACCEPTED_NETWORK_1ACCEPTED_NETWORK_2: 承認するネットワークの名前。
    • LIMIT_1LIMIT_2: ネットワークの接続上限。接続上限は、このサービスに接続できるコンシューマのエンドポイントまたはバックエンドの数になります。承認されたプロジェクトごとに、接続上限を構成する必要があります。
  • 接続の調整を有効にしてサービスを公開するには、前のリクエストと同様のリクエストを送信しますが、次のフィールドを含めます。

    {
      ...
      "reconcileConnections": true
      ...
    }
    

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

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

すべてのサービスが PROXY プロトコルをサポートしているわけではありません。詳細については、機能と互換性をご覧ください。

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

サービス アタッチメントで PROXY プロトコルを有効にすると、その変更は新しい接続にのみ適用されます。既存の接続に PROXY プロトコル ヘッダーは含まれません。

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 ネットワーク内で、エンドポイント(転送ルール)を削除し、同じ IP アドレスを使用して新しいエンドポイントを作成した場合、同じ pscConnectionId が使用されることがあります。

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

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

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

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

明示的に承認された公開サービスがある場合は、コンシューマ プロジェクトまたはネットワークからの接続リクエストを承認または拒否できます。詳細については、公開サービスへのアクセス リクエストを管理するをご覧ください。

また、公開サービスでは、プロジェクトの自動承認と明示的な承認を切り替えることができます。詳細については、公開サービスの接続設定を変更するをご覧ください。

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

公開サービスのサブネットを追加または削除できます。詳細については、公開したサービスに対してサブネットの追加または削除を行うをご覧ください。

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

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

コンソール

  1. Google Cloud コンソールで [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: サービス アタッチメントの名前。

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

公開サービスの構成の詳細を表示できます。構成の詳細は Google Cloud コンソールで確認できます。たとえば、サービス コンシューマがサービスに接続するために必要なサービス アタッチメント URI などです。サービス アタッチメントのコンシューマの pscConnectionId 値など、すべての詳細を表示するには、Google Cloud CLI または API を使用します。

コンソール

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

  1. Google Cloud コンソールで [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: サービス アタッチメントの名前。

公開サービスを削除する

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

コンソール

  1. Google Cloud コンソールで [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: サービス アタッチメントの名前。

既知の問題

Terraform の Google プロバイダをアップグレードした後の切断

バージョン 4.76.0 より前の Terraform の Google プロバイダを使用してサービス アタッチメントを作成した場合、バージョン 4.76.0~4.81.x にアップグレードしないでください。バージョン 4.76.0~4.81.x にアップグレードした後に terraform apply を実行すると、Terraform がサービス アタッチメントを意図せずに削除して再作成し、既存の Private Service Connect 接続が切断させる場合があります。再作成されたサービス アタッチメントでは、Private Service Connect 接続は自動的に再確立されません。

バージョン 4.82.0 にアップグレードしてから terraform apply を実行した場合、サービス アタッチメントは削除されませんが、接続調整の設定は true に設定されます。以前に false に設定されていた場合、Private Service Connect 接続が切断されることがあります。

  • Google プロバイダのバージョン 4.76.0~4.81.x へのアップグレード。このシナリオでは、terraform plan の出力は次のようになります。

    -/+ resource "google_compute_service_attachment" "SERVICE_NAME" {
      ...
            ~ reconcile_connections = false -> true # forces replacement
      ...
    

    この問題を回避するには、回避策を使用します。

  • Google プロバイダのバージョン 4.82.0 へのアップグレード。このシナリオでは、terraform plan の出力は次のようになります。

    ~ reconcile_connections = false -> true
    

    この警告を無視して変更を適用すると、Terraform はサービス アタッチメントを更新して、接続の調整を有効にします。接続ステータスによっては、false から true に変更すると、既存の接続が切断されることがあります。詳しくは、接続の調整をご覧ください。

    この問題を回避するには、回避策を使用します。

回避策

Terraform の Google プロバイダをバージョン 4.82.0 以降にアップグレードすることをおすすめします。このバージョンは、サービス アタッチメントの意図しない削除や再作成を防ぎます。

すぐにアップグレードできない場合、またはアップグレードできるが、Terraform が接続調整の設定を変更できないようにしたい場合は、接続調整の設定を明示的に設定するように Terraform 構成をアップグレードします。

  1. サービス アタッチメントの詳細な構成を表示し、reconcileConnections 設定をメモします。

    $ gcloud compute service-attachments describe SERVICE_NAME --region=REGION
    

    出力には、reconcileConnections フィールド(true または false)が含まれます。

    reconcileConnections: false
    
  2. Terraform 構成ファイルを更新して、サービス アタッチメントで使用されているものと同じ設定を明示的に使用するようにします。

    resource "google_compute_service_attachment" "SERVICE_NAME" {
      ...
      reconcile_connections    = false
    }
    

    構成例については、GitHub のサービス アタッチメントの調整接続をご覧ください。

サービス アタッチメントのパッチ更新

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

トラブルシューティング

サービス アタッチメントの更新時のエラー

サービスのアタッチメントの更新時に次のエラー メッセージが表示された場合は、承認リストまたは拒否リストに、削除されたプロジェクト「The resource PROJECT was not found」が含まれている可能性があります。

この問題を解決するには、削除されたプロジェクトをサービス アタッチメント構成から削除します。

  1. 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
      
  2. コマンド出力を編集して、削除されたプロジェクトを承認リストと拒否リストから削除します。

  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
      

接続が確立されていない

コンシューマーサービス アタッチメントを参照するエンドポイントまたはバックエンドを作成したものの、接続が確立されていない場合は、サービス アタッチメントの接続ステータスを確認します。接続ステータスが問題の解決手順を示している場合があります。

コンシューマー接続のタイムアウト

コンシューマー接続がタイムアウトした場合は、サービスで長時間実行の接続が必要かどうかを確認します。Private Service Connect NAT の TCP 確立済み接続のアイドル タイムアウトは 20 分です。サービスのタイムアウトを長くする必要がある場合は、接続がタイムアウトしないように構成を変更する必要があります。詳細については、NAT の仕様をご覧ください。