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

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

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

ロール

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

タスク ロール
エンドポイントを作成する 次の両方のロール:
Compute ネットワーク管理者roles/compute.networkAdmin
Service Directory 編集者roles/servicedirectory.editor
エンドポイントの DNS エントリを自動または手動で構成する DNS 管理者roles/dns.admin

始める前に

  • 制限事項など、エンドポイントを使用したサービスへの接続についてを確認する。

  • プロジェクトで Compute Engine API有効にする必要があります。

  • プロジェクトで Service Directory API有効にする必要があります。

  • プロジェクトで Cloud DNS API有効にする必要があります。

  • 下り(外向き)ファイアウォール ルールで、エンドポイントの内部 IP アドレスへのトラフィックを許可する必要があります。暗黙の下り(外向き)許可ファイアウォール ルールでは、任意の宛先 IP アドレスへの下り(外向き)が許可されます。

    VPC ネットワークで下り(外向き)拒否ファイアウォール ルールを作成した場合、または暗黙の下り(外向き)許可動作を変更する階層型ファイアウォール ポリシーを作成した場合、エンドポイントへのアクセスに影響する可能性があります。サービス エンドポイントの内部 IP アドレスの宛先へのトラフィックを許可する、特定の下り(外向き)許可ファイアウォール ルールまたはポリシーを作成します。

  • サービスのサービス アタッチメントの URI が必要です。例: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

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

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

Private Service Connect を使用して別の VPC ネットワーク内のサービスに接続する場合は、VPC ネットワーク内の通常のサブネットから IP アドレスを選択します。

IP アドレスは、サービス プロデューサーのサービス アタッチメントと同じリージョンに存在する必要があります。この IP アドレスは、内部 IP アドレスのプロジェクトの割り当てにカウントされます。

エンドポイントを作成すると、選択した名前空間またはデフォルトの名前空間 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 アドレス] で、[自動的に割り当てる] または [自分で選択] を選択します。

      [自分で選択] を選択した場合、使用するカスタム IP アドレスを入力します。

    4. [予約] をクリックします。

  10. 任意のリージョンからエンドポイントを利用できるようにするには、[グローバル アクセスを有効にする] を選択します。

  11. プルダウン リストから名前空間を選択するか、新しい名前空間を作成します。

    リージョンは、選択したサブネットワークに基づいて入力されます。

  12. [エンドポイントを追加] をクリックします。

gcloud

  1. エンドポイントに割り当てる内部 IP アドレスを予約します。

    gcloud compute addresses create ADDRESS_NAME \
        --region=REGION \
        --subnet=SUBNET
    

    以下を置き換えます。

    • ADDRESS_NAME: 予約済みの IP アドレスに割り当てる名前。

    • REGION: エンドポイントの IP アドレスのリージョン。これは、サービス プロデューサーのサービス アタッチメントが含まれているのと同じリージョンに存在している必要があります。

    • SUBNET: エンドポイント 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 ]
      

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

    • ENDPOINT_NAME: エンドポイントに割り当てる名前。

    • REGION: エンドポイントのリージョン。これは、サービス プロデューサーのサービス アタッチメントが含まれているのと同じリージョンに存在している必要があります。

    • NETWORK_NAME: エンドポイントの VPC ネットワークの名前。

    • ADDRESS_NAME: 予約済みのアドレスの名前。

    • SERVICE_ATTACHMENT: サービス プロデューサーのサービス アタッチメントの URI。例: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

    • PROJECT_ID: プロジェクト ID。

    • NAMESPACE: 使用する Service Directory の名前空間。存在しない名前空間を指定すると、その名前空間が作成されます。

      --service-directory-registration フラグを省略した場合、goog-psc-default のデフォルトの名前空間が使用されます。

API

  1. エンドポイントに割り当てる内部 IP アドレスを予約します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses
    
    {
      "name": "ADDRESS_NAME",
      "addressType": "INTERNAL",
      "subnetwork": "SUBNET_URI"
    }
    

    以下を置き換えます。

    • PROJECT_ID: プロジェクト ID。

    • ADDRESS_NAME: 予約済みの IP アドレスに割り当てる名前。

    • SUBNET_URI: IP アドレスのサブネット。subnetworks.list メソッドまたは gcloud compute networks subnets list --uri を使用して、ネットワークの URL を検索します。

  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 ネットワークの 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

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 ネットワークの名前。

エンドポイントを一覧表示する

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

コンソール

  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

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

  • PROJECT_ID: エンドポイントが含まれるプロジェクト。
  • REGION: エンドポイントのリージョン。

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

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

コンソール

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

    [Private Service Connect] に移動

  2. [接続エンドポイント] タブをクリックします。

  3. 表示するエンドポイントをクリックします。

gcloud

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

以下を置き換えます。

  • ENDPOINT_NAME: エンドポイントの名前。
  • REGION: エンドポイントのリージョン。

API

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

以下を置き換えます。

  • PROJECT_ID: エンドポイントが含まれるプロジェクト。
  • REGION: エンドポイントのリージョン。
  • ENDPOINT_NAME: エンドポイントの名前。

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

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

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

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

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

  • Service Directory の名前空間
  • Service Directory の DNS ゾーン

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

以下を置き換えます。

  • ENDPOINT_NAME: エンドポイントの名前。
  • REGION: エンドポイントのリージョン。

API

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

以下を置き換えます。

  • PROJECT_ID: エンドポイントが含まれるプロジェクト。
  • REGION: エンドポイントのリージョン。
  • ENDPOINT_NAME: エンドポイントの名前。

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

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

  • VLAN アタッチメントまたは Cloud VPN トンネルは、エンドポイントと同じ VPC ネットワークで終端する必要があります。ピアリングされた VPC ネットワーク内のクライアントはエンドポイントに到達できません。

  • グローバル アクセスが構成されている場合、VLAN アタッチメントまたは Cloud VPN トンネルからのクライアント トラフィックは、別のリージョンのエンドポイントに到達できます。

  • VLAN アタッチメントでは、Dataplane v1 と Dataplane v2 の両方がサポートされています。Dataplane のバージョンの詳細については、Dataplane v2 をご覧ください。

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

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

  • 他のネットワークが接続する VPC ネットワークにインバウンド サーバー ポリシーを作成します。

  • 他のネットワークが接続する VPC ネットワークで、VLAN アタッチメントまたは Cloud VPN トンネルが配置されているリージョンのインバウンド フォワーダー エントリ ポイントを特定します。

  • VPC ネットワークに接続する VLAN アタッチメントまたは Cloud VPN トンネルと同じリージョン内のインバウンド フォワーダーのエントリ ポイントにエンドポイントの DNS 名を転送するように、他のネットワークのシステムと DNS ネームサーバーを構成します。

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

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

コンソール

  1. Google Cloud コンソールで、Cloud DNS の [ゾーン] ページに移動します。

    Cloud DNS の [ゾーン] に移動

  2. NAMESPACE--REGION という名前の限定公開ゾーンを探します。

gcloud

  • 次のコマンドを実行して、すべての限定公開 DNS ゾーンを一覧表示します。

    gcloud dns managed-zones list \
        --filter="visibility=private"
    
  • 次のコマンドを実行して、NAMESPACE--REGION という名前のゾーンの詳細を取得します。

    gcloud dns managed-zones describe NAMESPACE--REGION
    

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

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

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

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

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

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

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

  • ゾーン名: NAMESPACE--REGION を指定します。ここで、NAMESPACE はエンドポイントが登録されている名前空間、REGION はエンドポイントが作成されるリージョンです。

  • DNS 名: サービス プロデューサーが公開サービスに使用している DNS ドメイン。詳細については、サービス プロデューサーに確認してください。

    DNS 名の形式は REGION.p.DOMAIN です。たとえば、サービス プロデューサーのパブリック ドメインが example.com で、公開サービスが us-west1 にある場合は、us-west1.p.example.com ドメインを使用してサービスを利用できるようにすることをおすすめします。末尾のドットを含めます(例: us-west1.p.example.com.)。

  • Service Directory の名前空間: このエンドポイントに構成した名前空間。

エンドポイントの詳細を表示して、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 管理者ロールroles/dns.admin)は、DNS ゾーンとレコードの作成に必要な権限を提供します。

  • 限定公開ゾーンを作成する

    • 限定公開ゾーンを構成する場合は、DNS 名を指定します。サービス プロデューサーが公開サービスに使用している DNS ドメインを使用します。詳細については、サービス プロデューサーに確認してください。

      形式は REGION.p.DOMAIN となります。たとえば、サービス プロデューサーのパブリック ドメインが example.com で、公開サービスが us-west1 にある場合は、us-west1.p.example.com ドメインを使用してサービスを利用できるようにすることをおすすめします。

  • レコードを追加する

トラブルシューティング

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

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

  • プロジェクトで Cloud DNS API が有効になっていない。

  • Service Directory DNS ゾーンを作成するために必要な権限がない。

  • この VPC ネットワークに同じゾーン名を持つ DNS ゾーンが存在する。

  • この VPC ネットワークに同じドメイン名の 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.

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

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

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