プライベート ネットワーク接続

このページでは、バックエンド アプリケーションにプライベートに接続するように Integration Connectors を構成する方法について説明します。次のコンセプトを理解していることを前提としています。

Integration Connector は、プライベート ネットワークでホストされているバックエンドへの接続をサポートしています。プライベート接続を有効にするには、Private Service Connect(PSC)を使用する必要があります。PSC を使用すると、異なるネットワーク間でサービスをプライベートに接続できます。

Integration Connectors の場合、ネットワークの観点から、ユーザーはサービス プロデューサーであり、Integration Connectors はサービス コンシューマです。サービス プロデューサーは、Integration Connectors がサービスを使用する際に使用できる PSC サービス アタッチメントを構成する必要があります。サービス アタッチメントの準備ができたら、エンドポイント アタッチメントを使用してサービス アタッチメントを使用するように接続を構成できます。

エンドポイント アタッチメント

エンドポイント アタッチメントは、PSC サービス アタッチメントを介してバックエンド アプリケーションとの接続を確立できるようにする Integration Connectors リソースです。

次の図は、PSC サービス アタッチメントを介してバックエンド アプリケーションとの接続を確立する接続を可能にするエンドポイント アタッチメントを示しています。

エンドポイント アタッチメントは、IP アドレスまたはホスト名として作成できます。

エンドポイント アタッチメントを IP アドレスとして作成する

エンドポイント アタッチメントを IP アドレスとして作成するには、Cloud コンソールまたはコマンドライン(gcloud)を使用します。

Console

Cloud コンソールからエンドポイント アタッチメントを作成するには、次の操作を行います。

  1. Integration Connectors の [エンドポイント アタッチメント] ページを開きます。

    [エンドポイント アタッチメント] に移動

  2. [作成] をクリックします。[エンドポイント アタッチメントを作成] ページが開きます。
  3. 次のフィールドに値を入力します。
    • 名前: エンドポイント アタッチメントの名前を入力します。名前は一意である必要があります。 同じ名前のエンドポイント アタッチメントは他に存在しないため、後で名前を変更することはできません。名前は先頭を小文字にして、その後に 63 文字以下の小文字、数字、ハイフンで構成します。末尾をハイフンにすることはできません。最小の長さは 2 です。
    • サービス アタッチメント ID: すでに作成した PSC サービス アタッチメントの名前。
    • (省略可)説明: エンドポイント アタッチメントの説明を入力します。
    • (省略可)ラベル: リソースラベルを Key-Value ペアとして入力します。ラベルの詳細については、ラベルとはをご覧ください。
    • (省略可)エンドポイント グローバル アクセスを有効にする: 任意のリージョンに存在する接続からバックエンドにトラフィックを送信する場合は、このオプションを選択します。

      デフォルトでは、エンドポイント アタッチメントで、接続とバックエンドの両方が同じリージョンにある必要があります。したがって、エンドポイントでグローバル アクセスを有効にすると、任意のリージョンにある接続からバックエンドにトラフィックを送信できます。

  4. [作成] をクリックします。

[IP アドレス] 列には、エンドポイント アタッチメントの IP アドレスを指定します。プライベート接続用のコネクタを構成するときに、この IP アドレスを使用する必要があります。

gcloud

コマンドラインからエンドポイント アタッチメントを作成するには、次の操作を行います。

  1. PSC サービス アタッチメント リソースを取得します。
    gcloud compute service-attachments list

    このコマンドは、サービス アタッチメントのリストを返します。次のような例になります。

      NAME       REGION   TARGET_SERVICE                                       CONNECTION_PREFERENCE
      demo-sa us-west1 k8s2-tcp-tgysilgj-apps-ingressgateway-fzdhwstg ACCEPT_AUTOMATIC

    このサービス アタッチメント情報は、後続のステップで必要になります。

  2. CreateEndpointAttachment API を実行する前に、認証トークンを取得します。
    TOKEN="$(gcloud auth print-access-token)"
  3. CreateEndpointAttachment API を使用してエンドポイント アタッチメントを作成します。次に例を示します。
    curl -X POST -H "Authorization: Bearer $TOKEN" \
           -H "Content-Type: application/json" \
           -d '{
          "name": "projects/PROJECT_ID/locations/LOCATION/endpointAttachments/ENDPOINT_ATTACHMENT_NAME",
          "serviceAttachment": "projects/demo/serviceAttachments/?SERVICE_ATTACHMENT_NAME"
        }' \
           https://connectors.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpointAttachments?endpointAttachmentId=ENDPOINT_ATTACHMENT_NAME
      

    ここで

    • LOCATION は、サービス アタッチメントのリージョンです。例: us-west1
    • PROJECT_ID は、PSC サービス アタッチメントを作成した Google Cloud プロジェクトです。
    • ENDPOINT_ATTACHMENT_NAME は、エンドポイント アタッチメントの名前です。名前は一意である必要があります。 同じ名前のエンドポイント アタッチメントは他に存在しないため、後で名前を変更することはできません。名前は先頭を小文字にして、その後に 31 文字以下の小文字、数字、ハイフンで構成します。末尾をハイフンにすることはできません。最小の長さは 2 です。
    • SERVICE_ATTACHMENT_NAME: サービス アタッチメントの名前。前に実行した gcloud compute service-attachments list コマンドで返された PSC サービス アカウント名を使用します。

    API を呼び出すと、Integration Connectors は長時間実行オペレーションを開始します。オペレーションの完了には時間がかかることがあります。オペレーションが正常に完了すると、エンドポイント アタッチメントが作成されます。

  4. Google Cloud プロジェクトに関連付けられたサービス ディレクトリのプロジェクト ID を取得してから、サービス アタッチメントでそのプロジェクト ID を許可リストに登録する必要があります。
  5. GetEndpointAttachment API を使用して、エンドポイント アタッチメントが作成されたかどうかを確認します。次に例を示します。
    curl -X GET -H "Authorization: Bearer $TOKEN" \
        https://connectors.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/endpointAttachments/ENDPOINT_ATTACHMENT_NAME
      

    API により、次のようなレスポンスが返されます。

    {
        "name": "projects/demo-project/locations/us-central1/endpointAttachments/demo-ea",
        "createTime": "2023-04-17T04:34:59.569527046Z",
        "updateTime": "2023-04-17T04:37:25.189074195Z",
        "description": "demo endpoint attachment",
        "serviceAttachment": "projects/demo-project/regions/us-central1/serviceAttachments/demo-sa",
        "endpointIp": "10.0.0.0",
        "labels": {"team":"sre"},
      }

    エンドポイント アタッチメントの IP アドレスは、endpointIp フィールドで確認できます。このサンプル レスポンスでは、IP アドレスは 10.0.0.0 です。この IP アドレスは、プライベート接続用のコネクタを構成するときに使用します。

エンドポイント アタッチメントの作成が成功すると、次の図に示すように、新しく作成されたアタッチメントが [エンドポイント アタッチメント] ページに表示されます。

エンドポイント アタッチメント エンドポイント アタッチメント

ここまでの手順では、エンドポイント アタッチメントを IP アドレスとして作成する方法について説明しました。ただし、エンドポイント アタッチメントをホスト名として作成し、そのホスト名を使用してプライベート接続のコネクタを構成することもできます。ホスト名を使用してエンドポイント アタッチメントを作成する方法については、エンドポイント アタッチメントをホスト名として作成するをご覧ください。

エンドポイント アタッチメントをホスト名として作成する

エンドポイント アタッチメントをホスト名として作成するには、次の操作を行います。

  1. エンドポイント アタッチメントを IP アドレスとして作成します。詳細については、エンドポイント アタッチメントを IP アドレスとして作成するをご覧ください。
  2. 任意の Google Cloud プロジェクトに Cloud DNS 限定公開マネージド ゾーンを作成します。

    この DNS ゾーンに、コネクタ構成に使用するホスト名を追加し、ホスト名をステップ 1 で取得したエンドポイント アタッチメント IP アドレスにマッピングする必要があります。Cloud DNS 限定公開マネージド ゾーンの作成方法については、限定公開ゾーンを作成するレコードを追加するをご覧ください。

  3. Integration Connectors に使用する Integration Connectors マネージド ゾーンを Google Cloud プロジェクトに作成します。Integration Connectors マネージド ゾーン(ピアリング ゾーン)は、名前解決のために Cloud DNS 限定公開マネージド ゾーン(手順 2 で作成)と通信します。

    マネージド ゾーンを作成する前に、次のロールと権限を付与する必要があります。

    • Integration Connectors マネージド ゾーンを作成するユーザーに connectors.managedZones.create 権限を付与します。

      connectors.managedZones.create 権限は、roles/connectors.admin IAM ロールまたは roles/connectors.managedZonesAdmin IAM ロールで使用できます。Integration Connectors で使用可能なさまざまな IAM ロールとそれに対応する権限については、Integration Connectors の IAM ロールと権限をご覧ください。

    • Integration Connectors service-PROJECT_NUMBER@gcp-sa-connectors.iam.gserviceaccount.com サービス アカウントに role/dns.peer ロールを付与します。

      Cloud DNS Google Cloud プロジェクトが Integration Connectors Google Cloud プロジェクトと異なる場合は、Cloud DNS Google Cloud プロジェクトの Integration Connectors サービス アカウントに roles/dns.peer ロールを付与します。たとえば、Google Cloud プロジェクト 12345 に Integration Connectors マネージド ゾーンを作成し、Cloud DNS が Google Cloud プロジェクト 67890 にあるとします。この場合、Google Cloud プロジェクト 67890 の service-12345@gcp-sa-connectors.iam.gserviceaccount.com サービス アカウントに roles/dns.peer ロールを付与する必要があります。

    Integration Connectors マネージド ゾーンを作成するには、Cloud コンソールまたはコマンドライン(gcloud)を使用します。

    Console

    Cloud コンソールから Integration Connectors マネージド ゾーンを作成するには、次の操作を行います。

    1. Integration Connectors の [マネージド ゾーン] ページに移動します。

      [マネージド ゾーン] に移動

    2. 次のフィールドに値を入力します。
      1. 名前: マネージド ゾーンの名前。
      2. ターゲット DNS 名: マネージド(ピアリング)ゾーンを作成する Cloud DNS の完全名。たとえば、server8.stage.user.private です。
      3. ターゲット プロジェクト: 限定公開 Cloud DNS ゾーンがある Google Cloud プロジェクトの名前。
      4. ターゲット ネットワーク: 限定公開 Cloud DNS ゾーンが維持されている VPC ネットワークの名前。
      5. (省略可)説明: エンドポイント アタッチメントの説明を入力します。
      6. (省略可)ラベル: リソースラベルを Key-Value ペアとして入力します。ラベルの詳細については、ラベルとはをご覧ください。
    3. [作成] をクリックします。

    gcloud

    コマンドラインから Integration Connectors マネージド ゾーンを作成するには、次の操作を行います。

    1. CreateManagedZone API を実行する前に、認証トークンを取得します。
      TOKEN="$(gcloud auth print-access-token)"
    2. CreateManagedZone API を使用してマネージド ゾーンを作成します。例:
      curl -X POST -H "Authorization: Bearer $TOKEN" \
        -H "Content-Type: application/json" \
        -d '{
          "description": "DESCRIPTION",
          "dns": "DNS_NAME",
          "target_project": "TARGET_PROJECT",
          "target_vpc": "TARGET_VPC"
        }' \
        https://connectors.googleapis.com/v1/projects/PROJECT_ID/locations/global/managedZones?managedZoneId=MANAGED_ZONE_NAME
        

      ここで

      • DESCRIPTION は、オプションのマネージド ゾーンの説明です。
      • DNS_NAME: マネージド(ピアリング)ゾーンを作成する Cloud DNS の完全名。たとえば、server8.stage.user.private です。
      • TARGET_PROJECT は、限定公開 Cloud DNS ゾーンを持つ Google Cloud プロジェクトの名前です。
      • TARGET_NETWORK は、限定公開 Cloud DNS ゾーンが維持されている VPC ネットワークの名前です。
      • PROJECT_ID は、Integration Connectors に使用している Google Cloud プロジェクトです。
      • MANAGED_ZONE_NAME はマネージド ゾーンの名前です。名前は一意である必要があります。 同じ名前のマネージド ゾーンは他に存在しないため、後で名前を変更することはできません。名前は先頭を小文字にして、その後に 63 文字以下の小文字、数字、ハイフンで構成します。末尾をハイフンにすることはできません。最小の長さは 2 です。

      API を呼び出すと、Integration Connectors は長時間実行オペレーションを開始します。オペレーションの完了には時間がかかることがあります。オペレーションが正常に完了すると、マネージド ゾーンが作成されます。

    3. GetManagedZone API を使用して、マネージド ゾーンが作成されたかどうかを確認します。次に例を示します。
      curl -X GET -H "Authorization: Bearer $TOKEN" \
          https://connectors.googleapis.com/v1/projects/PROJECT_ID/locations/global/managedZones/MANAGED_ZONE_NAME
        

      API により、次のようなレスポンスが返されます。

      {
          "name": "projects/demo-project/locations/global/managedZones/demo-mz",
          "createTime": "2023-04-17T04:34:59.569527046Z",
          "updateTime": "2023-04-17T04:37:25.189074195Z",
          "description": "demo managed zone",
          "dns": "api.private.service.com.",
          "targetVpc": "target-project-vpc",
          "targetProject": "target-project"
        }

マネージド ゾーンの作成が成功すると、次の図に示すように、新しく作成されたマネージド ゾーンが [マネージド ゾーン] ページに表示されます。

managed-zone managed-zone

サービス アタッチメントで Integration Connectors プロジェクトを許可リストに登録する

指定した Google Cloud プロジェクトからのリクエストのみを受け入れるように PSC サービス アタッチメントを作成できます。ただし、これを行うには、Google Cloud プロジェクトに関連付けられているサービス ディレクトリのプロジェクト ID が必要です。サービス ディレクトリのプロジェクト ID を取得するには、次の例に示すように List Connections API を使用できます。

構文

curl -X GET \
    -H "authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"

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

  • CONNECTORS_PROJECT_ID: 接続を作成した Google Cloud プロジェクトの ID。

この例では、connectors-test Google Cloud プロジェクトのサービス ディレクトリのプロジェクト ID を取得します。

curl -X GET \
    -H "authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"

ターミナルでこのコマンドを実行すると、次のような出力が表示されます。

.....
{
  "connections": [
    {
      "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa",
      "createTime": "2022-10-07T09:02:31.905048520Z",
      "updateTime": "2022-10-07T09:22:39.993778690Z",
      "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1",
      "status": {
        "state": "ACTIVE"
      },
      "configVariables": [
        {
          "key": "project_id",
          "stringValue": "connectors-test"
        },
        {
          "key": "dataset_id",
          "stringValue": "testDataset"
        }
      ],
      "authConfig": {},
      "serviceAccount": "564332356444-compute@developer.gserviceaccount.com",
      "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime",
      "nodeConfig": {
        "minNodeCount": 2,
        "maxNodeCount": 50
      }
    },
....

サンプル出力では、connectors-test Google Cloud プロジェクトの場合、サービス ディレクトリのプロジェクト ID は abcdefghijk-tp です。

エンドポイント アタッチメントの接続を確認する

エンドポイント アタッチメントの接続を確認する手順は次のとおりです。

  1. [エンドポイント アタッチメント] ページで、作成したエンドポイント アタッチメントの名前をクリックします。
  2. 表示された [エンドポイント アタッチメントの詳細] ページで、[接続状態] フィールドを確認します。状態が Accepted の場合、エンドポイント アタッチメントが正しく設定され、Private Service Connect 接続が確立されています。

    その他のステータスの詳細については、接続ステータスをご覧ください。

エンドポイント アタッチメントを使用するように接続を構成する

Integration Connectors で新しい接続を作成するか、既存の接続を更新する場合は、[宛先] セクションで [宛先の種類] として [エンドポイント アタッチメント] を選択し、[エンドポイント アタッチメント] リストから作成したエンドポイント アタッチメントを選択します。

マネージド ゾーンを作成した場合は、[宛先の種類] として [ホストアドレス] を選択し、マネージド ゾーンの作成時に作成した A レコードを使用します。

さまざまなタイプのプライベート ネットワークへの接続

Integration Connectors の限定公開接続は常に PSC サービス アタッチメントを介して行われますが、限定公開接続を確立する手順は環境によって若干異なります。以降のセクションでは、さまざまな環境でプライベート接続を確立する方法について説明します。