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

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

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

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

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

ロール

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

始める前に

  • 制限事項など、公開サービスについて詳しくは、公開サービスについてをご覧ください。

  • サービスをすべてのプロジェクトからアクセスできるようにするか、サービスにアクセスできるプロジェクトを制御するかを決定します。

  • このサービスをエンドポイントかバックエンド、またはその両方でサポートするかどうかを決定します。エンドポイントとバックエンドの詳細については、Private Service Connect のタイプをご覧ください。

    サービス構成の要件の詳細については、機能と互換性をご覧ください。

  • サービスのドメイン名を構成するかどうかを決定します。これにより、サービス コンシューマーのエンドポイントの DNS 構成が自動化されます。ドメイン名を構成する場合は、サービスを公開する IAM プリンシパルが、Google Search Console でドメインに対するオーナー権限を持っていることを確認する必要があります。ドメインを所有していない場合、ドメイン名を構成してもサービスを公開できません。所有権を証明するには、Google Search Console に移動します。

    サービス アタッチメントには、所有権を証明するドメインのサブドメインをドメイン名として指定できます。たとえば、example.com を検証し、ドメイン名 us-west1.p.example.com を使用してサービス アタッチメントを作成できます。

サポートされているロードバランサを作成する

サービスをホストするには、サービス プロデューサー VPC ネットワークに次のいずれかのロードバランサを作成します。

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

各サービス アタッチメントを、単一ロードバランサの転送ルールに関連付けることができます。同じ転送ルールに複数のサービス アタッチメントを関連付けることはできません。

ロードバランサの転送ルールの IP バージョン(IPv4 または IPv6)は、どのコンシューマーが公開サービスに接続できるかに影響します。詳細については、IP バージョンの変換をご覧ください。

リージョン内部プロキシ ネットワーク ロードバランサの場合、バックエンドは Google Cloud、他のクラウド、オンプレミス環境、またはこれらの組み合わせに配置できます。

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

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

Private Service Connect で使用する 1 つ以上の専用サブネットを作成します。サブネットは、サービスのロードバランサと同じリージョンに作成する必要があります。

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

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

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

IPv6 トラフィックを提供するサービスを公開する場合は、内部 IPv6 アドレス範囲を持つデュアルスタック サブネットを使用する必要があります。

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

コンソール

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. VPC ネットワークの名前をクリックして、[VPC ネットワークの詳細] ページを表示します。

  3. [サブネット] をクリックします。

  4. [サブネットを追加] をクリックします。表示されたダイアログで、次の操作を行います。

    1. 名前を入力します。
    2. リージョンを選択します。
    3. [目的] セクションで [Private Service Connect] を選択します。
    4. IP スタックタイプを選択します。
    5. IPv4 範囲を入力します。例: 10.10.10.0/24
    6. デュアルスタック サブネットを作成する場合は、IPv6 アクセスタイプを [内部] に設定します。
    7. [追加] をクリックします。

gcloud

  • IPv4 専用の Private Service Connect サブネットを作成するには、次の操作を行います。

    gcloud compute networks subnets create SUBNET_NAME \
        --network=NETWORK_NAME \
        --region=REGION \
        --range=SUBNET_RANGE \
        --purpose=PRIVATE_SERVICE_CONNECT
    
  • デュアルスタック Private Service Connect サブネットを作成するには、次の操作を行います。

    gcloud compute networks subnets create SUBNET_NAME \
        --network=NETWORK_NAME \
        --region=REGION \
        --stack-type=IPV4_IPV6 \
        --ipv6-access-type=INTERNAL \
        --range=SUBNET_RANGE \
        --purpose=PRIVATE_SERVICE_CONNECT
    

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

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

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

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

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

API

  • IPv4 専用の Private Service Connect サブネットを作成するには、次の操作を行います。

    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",
    }
    
  • デュアルスタック Private Service Connect サブネットを作成するには、次の操作を行います。

    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",
      "stackType": "IPV4_IPV6",
      "ipv6AccessType": "INTERNAL"
    }
    

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

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

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

  • SUBNET_RANGE: サブネットに使用する IPv4 アドレス範囲。例: 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 プロトコルの詳細については、コンシューマーの接続情報を表示するをご覧ください。

同じサービス アタッチメントにシングルスタック サブネットとデュアルスタック サブネットを関連付けることができます。ロードバランサが IPv6 トラフィック用に構成されている場合、デュアルスタック サブネットを使用する必要があります。

自動承認を使用してサービスを公開すると、サービス アタッチメントに接続する各コンシューマー プロジェクトに伝播接続数の上限が適用されます。

コンソール

  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 ネットワークから共有サブネットを選択する必要があります。

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

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

  10. [すべての接続を自動的に受け入れる] を選択します。

  11. 接続調整を無効にする場合は、[接続調整を有効にする] チェックボックスをオフにします。

  12. (省略可)[詳細構成] をクリックして、次の操作を行います。

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

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

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

    2. NCC 伝播接続数の上限を入力します。指定しない場合、デフォルト値は 250 です。

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

gcloud

gcloud compute service-attachments create ATTACHMENT_NAME \
    --region=REGION \
    --producer-forwarding-rule=RULE_NAME \
    --connection-preference=ACCEPT_AUTOMATIC \
    --nat-subnets=PSC_SUBNET_LIST \
    [ --propagated-connection-limit=PROPAGATED_CONNECTION_LIMIT ] \
    [ --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)。

  • PROPAGATED_CONNECTION_LIMIT: プロジェクトごとの伝播接続の上限。デフォルト値は 250 です。

  • 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"
  ],
  "propagatedConnectionLimit": "PROPAGATED_CONNECTION_LIMIT",
  "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 構成をご覧ください。

  • PROPAGATED_CONNECTION_LIMIT: プロジェクトごとの伝播接続の上限。デフォルト値は 250 です。

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

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

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

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

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

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

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

コンシューマーの承認リストと拒否リストがプロジェクトを参照している場合、伝播接続の上限はコンシューマー プロジェクトに適用されます。コンシューマーの承認リストと拒否リストが VPC ネットワークを参照している場合、伝播接続の上限がコンシューマー VPC ネットワークに適用されます。

コンソール

  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 ネットワークから共有サブネットを選択する必要があります。

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

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

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

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

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

  13. (省略可)[詳細構成] をクリックして、次の操作を行います。

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

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

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

    2. NCC 伝播接続数の上限を入力します。指定しない場合、デフォルト値は 250 です。

  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 \
    [ --propagated-connection-limit=PROPAGATED_CONNECTION_LIMIT ] \
    [ --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)。

  • PROPAGATED_CONNECTION_LIMIT: 伝播接続の上限。デフォルト値は 250 です。

  • 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"
        }
      ],
      "propagatedConnectionLimit": "PROPAGATED_CONNECTION_LIMIT",
      "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"
        }
      ],
      "propagatedConnectionLimit": PROPAGATED_CONNECTION_LIMIT,
      "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: ネットワークの接続上限。接続上限は、このサービスに接続できるコンシューマーのエンドポイントまたはバックエンドの数になります。承認されたプロジェクトごとに、接続上限を構成する必要があります。
    • DOMAIN_NAME: サービスの DNS ドメイン名(末尾のドットも含む)。推奨形式: REGION.p.DOMAIN. 詳細については、DNS 構成をご覧ください。
  • 接続の調整を有効にしてサービスを公開するには、前のリクエストと同様のリクエストを送信しますが、次のフィールドを含めます。

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

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

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 の仕様をご覧ください。

伝播接続が確立されない

伝播接続のトラブルシューティングについては、Network Connectivity Center のトラブルシューティングをご覧ください。