エンドポイントを介して公開サービスにアクセスする (original) (raw)

エンドポイントを介して公開サービスにアクセスする

このドキュメントでは、Private Service Connect エンドポイントを使用して、別の VPC ネットワーク内のサービスにアクセスする方法について説明します。自社のサービスに接続することも、他のサービス提供者(Google を含む)が提供するサービスに接続することもできます。

サービスの詳細については、マネージド サービスを公開するをご覧ください。

始める前に

必要なロール

エンドポイントを介して公開されたサービスにアクセスするために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

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

これらの事前定義ロールには、エンドポイントを介して公開されたサービスにアクセスするために必要な権限が含まれています。必要とされる正確な権限については、必要な権限セクションを開いてご確認ください。

必要な権限

エンドポイントを介して公開サービスにアクセスするには、次の権限が必要です。

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

エンドポイントを作成する

エンドポイントは、Private Service Connect 転送ルールを使用して、別の VPC ネットワーク内のサービスに接続します。各転送ルールでは、Private Service Connect の転送ルールが別の VPC ネットワーク内のサービスにアクセスするためのプロジェクトごとの割り当てに対してカウントされます。

エンドポイントを作成すると、選択した名前空間またはデフォルトの名前空間 goog-psc-default を使用して、Service Directory に自動的に登録されます。

エンドポイントを複数のリージョンで利用可能にする場合は、グローバル アクセスを有効にします。

エンドポイントのグローバル アクセス フィールドを更新できるのは、公開サービスのみです。他のフィールドを更新する場合は、エンドポイントを削除してから新しいエンドポイントを作成します。

コンソール

  1. Google Cloud コンソールで、[Private Service Connect] ページに移動します。
    [Private Service Connect] に移動
  2. [接続エンドポイント] タブをクリックします。
  3. [エンドポイントを接続] をクリックします。
  4. [ターゲット] で [公開済みのサービス] を選択します。
  5. [ターゲット サービス] に、接続するサービス アタッチメント URI を入力します。
    サービス アタッチメント URI の形式は projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME です。
  6. [エンドポイント名] に、エンドポイントに使用する名前を入力します。
  7. エンドポイントのネットワークを選択します。
  8. エンドポイントのサブネットワークを選択します。
  9. エンドポイントの IP アドレスを選択します。新しい IP アドレスが必要な場合は、次のように作成します。
    1. [IP アドレス] プルダウン メニューをクリックし、[IP アドレスを作成] を選択します。
    2. IP アドレスの名前説明(省略可)を入力します。
    3. IP バージョンを選択します。
    4. IPv4 アドレスを作成する場合は、[自動的に割り当てる] または [自分で選択] を選択します。
      [自分で選択] を選択した場合、使用するカスタム IP アドレスを入力します。
    5. [予約] をクリックします。
  10. 任意のリージョンからエンドポイントを利用できるようにするには、[グローバル アクセスを有効にする] を選択します。
  11. プルダウン リストから名前空間を選択するか、新しい名前空間を作成します。
    リージョンは、選択したサブネットワークに基づいて入力されます。
  12. [エンドポイントを追加] をクリックします。

gcloud

  1. エンドポイントに割り当てる内部 IP アドレスを予約します。
    gcloud compute addresses create ADDRESS_NAME \
    --region=REGION \
    --subnet=SUBNET \
    --ip-version=IP_VERSION
    以下を置き換えます。
    • ADDRESS_NAME: 予約済みの IP アドレスに割り当てる名前。
    • REGION: エンドポイントの IP アドレスのリージョン。これは、サービス プロデューサーのサービス アタッチメントが含まれているのと同じリージョンに存在している必要があります。
    • SUBNET: エンドポイント IP アドレスのサブネットの名前。
    • IP_VERSION: IP アドレスの IP バージョン。IPV4 または IPV6 のいずれかです。デフォルトは IPV4 です。IPV6 を指定するには、内部 IPv6 アドレス範囲を持つサブネットに IP アドレスが接続されている必要があります。
  2. 予約済みの IP アドレスを探します。
    gcloud compute addresses list --filter="name=ADDRESS_NAME"
  3. エンドポイントをサービス プロデューサーのサービス アタッチメントに接続する転送ルールを作成します。デフォルトでは、エンドポイントは独自のリージョンからのみ使用できます。任意のリージョンからエンドポイントを利用できるようにするには、--allow-psc-global-access フラグを使用します。
    • 独自のリージョンからのみアクセスできるエンドポイントを作成します。
      gcloud compute forwarding-rules create ENDPOINT_NAME \
      --region=REGION \
      --network=NETWORK_NAME \
      --address=ADDRESS_NAME \
      --target-service-attachment=SERVICE_ATTACHMENT \
      [ --service-directory-registration=projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE ]
    • 任意のリージョンからアクセスできるエンドポイントを作成します。
      gcloud compute forwarding-rules create ENDPOINT_NAME \
      --region=REGION \
      --network=NETWORK_NAME \
      --address=ADDRESS_NAME \
      --target-service-attachment=SERVICE_ATTACHMENT \
      --allow-psc-global-access \
      [ --service-directory-registration=projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE ]

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

API

  1. エンドポイントに割り当てる内部 IP アドレスを予約します。
    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses
    {
    "name": "ADDRESS_NAME",
    "addressType": "INTERNAL",
    "subnetwork": "SUBNET_URI",
    "ipVersion": "IP_VERSION"
    }
    以下を置き換えます。
    • PROJECT_ID: プロジェクト ID。
    • REGION: エンドポイントのリージョン。これは、サービス プロデューサーのサービス アタッチメントが含まれているのと同じリージョンに存在している必要があります。
    • ADDRESS_NAME: 予約済みの IP アドレスに割り当てる名前。
    • SUBNET_URI: IP アドレスのサブネット。subnetworks.list メソッドまたは gcloud compute networks subnets list --uri を使用して、ネットワークの URL を検索します。
    • IP_VERSION: IP アドレスの IP バージョン。IPV4 または IPV6 のいずれかです。デフォルトは IPV4 です。IPV6 を指定するには、内部 IPv6 アドレス範囲を持つサブネットに IP アドレスが接続されている必要があります。
  2. エンドポイントをサービス プロデューサーのサービス アタッチメントに接続する転送ルールを作成します。デフォルトでは、エンドポイントは独自のリージョンからのみ使用できます。任意のリージョンからエンドポイントを利用できるようにするには、allowPscGlobalAccesstrue に設定します。
    • 独自のリージョンからのみアクセスできるエンドポイントを作成します。
      POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules
      {
      "name": "ENDPOINT_NAME",
      "IPAddress": "ADDRESS_URI",
      "target": "SERVICE_ATTACHMENT",
      "network": "NETWORK_URI",
      "serviceDirectoryRegistrations": [
      {
      "namespace": "NAMESPACE"
      }
      ]
      }
    • 任意のリージョンからアクセスできるエンドポイントを作成します。
      POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules
      {
      "name": "ENDPOINT_NAME",
      "IPAddress": "ADDRESS_URI",
      "target": "SERVICE_ATTACHMENT",
      "network": "NETWORK_URI",
      "allowPscGlobalAccess": true,
      "serviceDirectoryRegistrations": [
      {
      "namespace": "NAMESPACE"
      }
      ]
      }
      次のように置き換えます。
    • PROJECT_ID: プロジェクト ID。
    • REGION: エンドポイントのリージョン。
    • ENDPOINT_NAME: エンドポイントに割り当てる名前。
    • ADDRESS_URI: 関連付けられたネットワークに予約されたアドレスの URI。addresses.list メソッドまたは gcloud compute addresses list --uri を使用して、予約されたアドレスの URL を検索します。
    • SERVICE_ATTACHMENT: サービス プロデューサーのサービス アタッチメントの URI。例: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME
    • NETWORK_URI: エンドポイントの VPC ネットワーク。network.list メソッドまたは gcloud compute networks list --uri を使用して、ネットワークの URI を検索します。
    • NAMESPACE: エンドポイントの名前空間。存在しない名前空間を指定すると、その名前空間が作成されます。namespace フィールドを省略すると、goog-psc-default のデフォルトの名前空間が割り当てられます。

サービス プロジェクト管理者は、接続された共有 VPC ネットワークの IP アドレスを使用して共有 VPC サービス プロジェクトにエンドポイントを作成できます。このタイプのエンドポイントは、 Google Cloud コンソールで作成できません。Google Cloud CLI を使用するか、API リクエストを送信する必要があります。詳しくは、共有 VPC をご覧ください。

この例では、単一のリージョンからアクセスできる共有 VPC ネットワークの IP アドレスを持つエンドポイントを作成する方法を示します。グローバル アクセスを有効にする、または Service Directory の名前空間を選択するには、エンドポイントを作成するをご覧ください。

gcloud

  1. エンドポイントに割り振る内部 IP アドレスを予約するには、次のいずれかを行います。
  2. サービス プロジェクトにエンドポイントを作成するには、次のいずれかを行います。
    • ホスト プロジェクトのすべてのサブネットを使用する権限がある場合は、次のコマンドを使用します。
      gcloud compute forwarding-rules create ENDPOINT_NAME \
      --region=REGION \
      --network=projects/HOST_PROJECT/global/networks/HOST_NETWORK \
      --address=projects/ADDRESS_PROJECT/regions/REGION/addresses/ADDRESS_NAME \
      --target-service-attachment=SERVICE_ATTACHMENT
      次のように置き換えます。
      * ENDPOINT_NAME: エンドポイントに割り当てる名前。
      * REGION: エンドポイントのリージョン。これは、サービス プロデューサーのサービス アタッチメントが含まれているのと同じリージョンに存在している必要があります。
      * HOST_PROJECT: 共有 VPC ネットワークのプロジェクトのプロジェクト ID。
      * HOST_NETWORK: エンドポイントの IP アドレスを含む共有 VPC ネットワークの名前。
      * ADDRESS_PROJECT: IP アドレスを予約したプロジェクトの ID。これは、サービス プロジェクトまたはホスト プロジェクトのいずれかです。
      * ADDRESS_NAME: 予約済み IP アドレスの名前。
      * SERVICE_ATTACHMENT: サービス プロデューサーのサービス アタッチメントの URI。例: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME
    • ホスト プロジェクトの一部のサブネットのみを使用する権限がある場合は、次のコマンドを使用して共有サブネットを指定します。
      gcloud compute forwarding-rules create ENDPOINT_NAME \
      --region=REGION \
      --subnet=projects/HOST_PROJECT/regions/REGION/subnetworks/HOST_SUBNET \
      --address=projects/ADDRESS_PROJECT/regions/REGION/addresses/ADDRESS_NAME \
      --target-service-attachment=SERVICE_ATTACHMENT
      HOST_SUBNET は、エンドポイントの IP アドレスを含むサブネットの名前に置き換えます。

API

  1. エンドポイントに割り振る内部 IP アドレスを予約するには、次のいずれかを行います。
  2. サービス プロジェクトにエンドポイントを作成するには、次のいずれかを行います。
    • ホスト プロジェクトのすべてのサブネットを使用する権限がある場合は、次のリクエストを行います。
      POST https://compute.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/forwardingRules
      {
      "name": "ENDPOINT_NAME",
      "IPAddress": "projects/ADDRESS_PROJECT/regions/REGION/addresses/ADDRESS_NAME",
      "target": "SERVICE_ATTACHMENT",
      "network": "projects/HOST_PROJECT/global/networks/HOST_NETWORK"
      }
      次のように置き換えます。
      * PROJECT: サービス プロジェクト ID。
      * REGION: エンドポイントのリージョン。これは、サービス プロデューサーのサービス アタッチメントが含まれているのと同じリージョンに存在している必要があります。
      * ENDPOINT_NAME: エンドポイントに割り当てる名前。
      * ADDRESS_PROJECT: IP アドレスを予約したプロジェクトの ID。これは、サービス プロジェクトまたはホスト プロジェクトのいずれかです。
      * ADDRESS_NAME: 予約済み IP アドレスの名前。
      * SERVICE_ATTACHMENT: サービス プロデューサーのサービス アタッチメントの URI。例: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME
      * HOST_PROJECT: 共有 VPC ネットワークのプロジェクトのプロジェクト ID。
      * HOST_NETWORK: エンドポイントの IP アドレスを含む共有 VPC ネットワークの名前。
    • ホスト プロジェクトの一部のサブネットのみを使用する権限がある場合は、次のリクエストを行って共有サブネットを指定します。
      POST https://compute.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/forwardingRules
      {
      "name": "ENDPOINT_NAME",
      "IPAddress": "projects/ADDRESS_PROJECT/regions/REGION/addresses/ADDRESS_NAME",
      "target": "SERVICE_ATTACHMENT",
      "subnetwork": "projects/HOST_PROJECT/regions/REGION/subnetworks/HOST_SUBNET"
      }
      HOST_SUBNET は、エンドポイントの IP アドレスを含むサブネットの名前に置き換えます。

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

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

コンソール

  1. Google Cloud コンソールで、[Private Service Connect] ページに移動します。
    [Private Service Connect] に移動
  2. [接続エンドポイント] タブをクリックします。
    エンドポイントが表示されます。

gcloud

gcloud compute forwarding-rules list
--filter 'target~serviceAttachments'

出力は次のようになります。

NAME REGION IP_ADDRESS IP_PROTOCOL TARGET RULE IP TCP REGION/serviceAttachments/SERVICE_NAME

API

この API 呼び出しでは、サービスへのアクセスに使用されるエンドポイントだけでなく、すべての転送ルールが返されます。

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

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

エンドポイントの詳細を表示する

エンドポイントの接続ステータスや URI など、エンドポイントの構成の詳細をすべて表示できます。

Private Service Connect エンドポイントの ID ベースの URI を確認するには、Google Cloud CLI を使用するか、API リクエストを送信します。ID ベースの URI が selfLinkWithId フィールドに表示されます。サービス アタッチメントのコンシューマー承認リストが、個々の Private Service Connect エンドポイントに基づいてコンシューマーを承認するように構成されている場合、サービス プロデューサーはこの URI を必要とする可能性があります。

コンソール

  1. Google Cloud コンソールで、[Private Service Connect] ページに移動します。
    [Private Service Connect] に移動
  2. [接続エンドポイント] タブをクリックします。
  3. 表示するエンドポイントをクリックします。

gcloud

gcloud compute forwarding-rules describe
ENDPOINT_NAME --region=REGION

以下を置き換えます。

API

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/ENDPOINT_NAME

以下を置き換えます。

エンドポイントにラベルを付ける

エンドポイントのラベルを管理できます。詳しい手順については、リソースのラベル付けをご覧ください。

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

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

ただし、次の Service Directory 構成は、エンドポイントを削除しても削除されません。

Service Directory の名前空間と Service Directory の DNS ゾーンは他のサービスで使用できます。Service Directory 名前空間を削除するか、Service Directory DNS ゾーンを削除する前に、名前空間が空であることを確認します。

コンソール

  1. Google Cloud コンソールで、[Private Service Connect] ページに移動します。
    [Private Service Connect] に移動
  2. [接続エンドポイント] タブをクリックします。
  3. 削除するエンドポイントを選択し、[削除] をクリックします。

gcloud

gcloud compute forwarding-rules delete ENDPOINT_NAME
--region=REGION

以下を置き換えます。

API

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/ENDPOINT_NAME

以下を置き換えます。

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

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

DNS 名を使用してエンドポイントにアクセスする場合は、限定公開 DNS ゾーンにクエリを実行できるように、他のネットワークのシステムを構成する必要があります。

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

Service Directory の DNS ゾーンを表示する

DNS の自動構成の前提条件を満たしている場合、NAMESPACE--REGION という形式の名前で DNS ゾーンが作成されます。

コンソール

  1. Google Cloud コンソールで、Cloud DNS の [ゾーン] ページに移動します。
    Cloud DNS の [ゾーン] に移動
  2. NAMESPACE--REGION という名前のプライベート ゾーンを探します。

gcloud

ゾーンが存在しない場合は、エンドポイントの詳細を表示し、エンドポイント構成に名前空間の値が含まれているかどうかを確認します。

DNS を構成するその他の方法

自動 DNS 構成の前提条件が満たされていない場合は、他の方法で DNS エントリを作成できます。

Service Directory の DNS ゾーンを構成する

エンドポイントが Service Directory に登録されていても、接続先の公開サービスがドメイン名を構成していない場合、DNS の変更は行われません。

DNS の自動構成をレプリケートする場合は、Service Directory の名前空間を基盤とする Service Directory の DNS ゾーンを手動で構成します。ゾーンが作成されると、エンドポイントの DNS エントリが自動的に作成されます。

次の構成で Service Directory の DNS ゾーンを作成します。

エンドポイントの詳細を表示して、Service Directory の名前空間とリージョンを確認します。

この構成では、DNS 名 us-west1.p.example.com を使用して Service Directory の DNS ゾーンを構成し、analytics という名前のエンドポイントを作成した場合、analytics.us-west1.p.example.com の DNS レコードが自動的に作成されます。

Service Directory でエンドポイントを登録する

新しいエンドポイントは Service Directory に自動的に登録されます。ただし、Service Directory の自動登録が有効になる前にエンドポイントが作成された場合は、この構成が見つからない可能性があります。

エンドポイントを削除して、Service Directory に自動的に登録される新しいエンドポイントを作成できます。

または、次の手順で既存のエンドポイントを Service Directory の名前空間に登録できます。

  1. エンドポイントに Service Directory 名前空間 NAMESPACE を作成します。
  2. エンドポイント SERVICE_NAMEService Directory サービスを作成します。
    このサービスには、エンドポイント(ENDPOINT_NAME)の転送ルールの同じ名前を使用します。
  3. default という名前の Service Directory エンドポイントを作成し、エンドポイントの IP アドレスとポート(443)を使用します。

エンドポイントを Service Directory に登録したら、Service Directory の DNS ゾーンを構成します。

DNS を手動で構成する

DNS の自動構成ができない場合や、構成で有効になっていない場合は、Cloud DNS を使用して手動で DNS レコードを作成できます。

詳しくは次のページをご覧ください。

既知の問題

グローバル アクセス エンドポイントのトラフィックが異常なバックエンドに送信される

グローバル アクセス エンドポイントを、グローバル アクセス用に構成されていない公開サービスに接続できます。ただし、この構成ではヘルスチェックが正しく機能しません。その結果、トラフィックが異常なバックエンドに送信されてドロップされる可能性があります。

サービス アタッチメントのロードバランサがグローバル アクセス用に構成されていることがわかっている場合にのみ、エンドポイントのグローバル アクセスを有効にしてください。

エンドポイントがこの問題の影響を受けている場合は、次のいずれかを行います。

エンドポイントのグローバル アクセスを無効にしても、エンドポイントと同じリージョンのワークロードのネットワーク トラフィックは中断されません。ただし、グローバル アクセスが無効になると、他のリージョンのクライアントはエンドポイントにアクセスできなくなります。

トラブルシューティング

限定公開 DNS ゾーンを作成できない

エンドポイントを作成すると、Service Directory DNS ゾーンが作成されます。ゾーンの作成が失敗する理由には、次のようなものがあります。

Service Directory の DNS ゾーンを手動で作成するには、次の手順を行います。

  1. プロジェクトで Cloud DNS API が有効になっていることを確認します。
  2. Service Directory DNS ゾーンの作成に必要な権限があることを確認します。
    • dns.managedZones.create
    • dns.networks.bindPrivateDNSZone
    • servicedirectory.namespaces.associatePrivateZone
  3. 不要な競合ゾーンがある場合は、DNS ゾーンを削除します。
  4. エンドポイントに関連付けられている Service Directory 名前空間に基づいて Service Directory の DNS ゾーンを作成します。

グローバル アクセスが構成されていると、エンドポイントの作成に失敗する

すべての Private Service Connect 公開サービスが、グローバル アクセスが有効になっているエンドポイントをサポートしているわけではありません。グローバル アクセスを構成したエンドポイントが公開サービスでサポートされていない場合は、次のエラー メッセージが表示されます。

Private Service Connect global access is not supported for the given forwarding rule, since its producer service does not support consumer global access.

グローバル アクセス オプションなしでエンドポイントを作成します。

エンドポイントの作成は成功するが、接続が確立されない

公開サービスのエンドポイントが正常に作成されても接続が確立されていない場合は、エンドポイントの接続ステータスを確認します。接続ステータスが問題の解決手順を示している場合があります。

伝播接続エラー

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

エンドポイントでパフォーマンスの問題が発生しているか、接続がタイムアウトしている

エンドポイントでパフォーマンスの問題や断続的な接続タイムアウトが発生している場合は、原因としてパケットのドロップが考えられます。パケットのドロップを調査するには、以降のセクションで説明する指標を確認します。

公開サービスへの送信でドロップされたパケット数

private_service_connect/consumer/dropped_sent_packets_count 指標は、エンドポイントなどの Private Service Connect コンシューマーから公開サービスへのパケットの中で、エンドポイントとサービスの最大接続数を超えたためにドロップされたパケットを追跡します。

エンドポイントがこの指標の値を報告している場合は、次の解決策を検討してください。

公開サービスからの受信でドロップされたパケット数

private_service_connect/consumer/dropped_received_packets_count 指標は、公開サービスから Private Service Connect コンシューマー(エンドポイントなど)に送信されたパケットの中で、Private Service Connect がレスポンス パケットの一致する接続を見つけられないためドロップされたパケットを追跡します。

Private Service Connect では、コンシューマー VPC ネットワークから開始された接続のみが許可されます。コンシューマーが接続を開始すると、公開サービスからのレスポンス パケットを既存の接続と一致させるために、接続が追跡されます。Private Service Connect がレスポンス パケットの一致を見つけられない場合、パケットはドロップされます。

公開サービスが接続のタイムアウト後にレスポンス パケットを送信すると、Private Service Connect がレスポンス パケットの一致を見つけられないことがあります。この指標の値が表示された場合は、サービス プロデューサーにご連絡ください。この問題を回避するようにサービスを構成できる場合があります。