Google Cloud VPC のネットワーク接続

このページでは、Google Cloud VPC でホストされている MySQL、Postgres、SQL Server などのバックエンド サービスへの Integration Connectors からのプライベート接続を設定する方法について説明します。

このページでは、次のコンセプトを理解していることを前提としています。

Google Cloud VPC へのプライベート接続は、次のいずれかのカテゴリに分類できます。

  • バックエンド サービスと PSC サービス アタッチメントの両方が同じ Google Cloud プロジェクトまたは VPC 内にある。
  • バックエンド サービスと PSC サービス アタッチメントの両方が、異なる Google Cloud プロジェクトまたは VPC にあります。

考慮事項

PSC サービス アタッチメントを作成する場合は、次の重要な点に留意してください。

  • PSC サービス アタッチメントとロードバランサは、同じ VPC 内の異なるサブネットに作成されます。具体的には、サービス アタッチメントは常に NAT サブネットに作成されます。
  • ロードバランサとヘルスチェック プローブからのトラフィックは、同じポートに送信する必要があります。
  • ファイアウォール ルールを構成して、トラフィック フローを促進します。

    上り(内向き)ルール

    PSC サービス アタッチメントのサブネットからのトラフィックがバックエンド サービスに到達する必要があります。

    下り(外向き)ルール

    特定の拒否ルールが構成されていない限り、Google Cloud プロジェクトで下り(外向き)トラフィックはデフォルトで有効になっています。

  • PSC サービス アタッチメントやロードバランサなど、すべての Google Cloud コンポーネントは同じリージョンに配置する必要があります。

Google Cloud VPC 内のバックエンド サービスへのプライベート接続

このセクションでは、バックエンド サービスと PSC サービス アタッチメントの両方が同じ Google Cloud プロジェクト内にある場合に、プライベート接続を確立する方法について説明します。

次の図は、Integration Connector から Google Cloud VPC でホストされているサービスへのプライベート ネットワーク接続の設定を示しています。

Google Cloud VPC 内のバックエンド サービスへのプライベート接続を設定するには、次の操作を行います。

PSC サービス アタッチメントを作成する

Integration Connectors からプライベート接続を確立するには、PSC サービス アタッチメントを使用してサービスが Integration Connectors に公開されている必要があります。サービス アタッチメントは常にロードバランサを使用します。したがって、サービスがロードバランサの背後にない場合は、ロードバランサを構成する必要があります。

  1. ヘルスチェック プローブを作成し、プローブからのトラフィックを許可します。
    1. ヘルスチェック プローブを作成します。
      gcloud compute health-checks create tcp HEALTH_CHECK_NAME --port BACKEND_SERVER_PORT --region=REGION

      このコマンドでは、BACKEND_SERVER_PORT を 3306 に設定します。これは、MySQL サーバーが実行されるデフォルトのポートです。

    2. プローブからのトラフィックを許可するファイアウォール ルールを作成します。
      gcloud compute firewall-rules create VPC_NETWORK-allow-health-check --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:BACKEND_SERVER_PORT --source-ranges=35.191.0.0/16,130.211.0.0/22
  2. L4 内部ロードバランサを作成し、ロードバランサからのトラフィックを許可します。
    1. バックエンド サービスを作成します。
      gcloud compute backend-services create BACKEND_SERVICE --load-balancing-scheme=internal --protocol=tcp --health-checks=HEALTH_CHECK_NAME --health-checks-region=REGION 
    2. バックエンド サービスにインスタンス グループを追加します。
      gcloud compute backend-services add-backend BACKEND_SERVICE --instance-group=INSTANCE_GROUP_NAME --instance-group-zone=ZONE
    3. 転送ルールを作成します。
      gcloud compute forwarding-rules create FORWARDING_RULE_NAME --load-balancing-scheme=internal --network=VPC_NETWORK --subnet=SUBNET_NAME_2 --ip-protocol=TCP --ports=BACKEND_SERVER_PORT --backend-service=BACKEND_SERVICE --backend-service-region=REGION
    4. ロードバランサからインスタンス グループへの内部トラフィックを許可するファイアウォール ルールを作成します。
      gcloud compute firewall-rules create VPC_NETWORK-allow-internal --direction=INGRESS --priority=1000 --network=VPC_NETWORK --action=ALLOW --rules=all --source-ranges=SUBNET_RANGE_2
  3. サービス アタッチメントを作成します。
    1. PSC NAT のサブネットを作成します。次のコマンドは、psc-nat-subnet1 という名前のサブネットを作成します。目的は PRIVATE_SERVICE_CONNECT です。
      gcloud compute networks subnets create psc-nat-subnet1 \
                --network=VPC_NETWORK --range=SUBNET_RANGE_1 \
                --purpose=PRIVATE_SERVICE_CONNECT
    2. PSC NAT からロードバランサへのトラフィックを許可するファイアウォール ルールを作成します。
      gcloud compute network-firewall-policies rules create PRIORITY --firewall-policy FIREWALL_POLICY_NAME_SA \
          --direction=INGRESS  --network=VPC_NETWORK \
          --action=allow --allow=tcp:BACKEND_SERVER_PORT --src-ip-ranges=SUBNET_RANGE_1
    3. 明示的な承認を使用してサービス アタッチメントを作成します。
      gcloud compute service-attachments create SERVICE_ATTACHMENT_NAME --producer-forwarding-rule=FORWARDING_RULE_NAME  --connection-preference=ACCEPT_MANUAL --consumer-accept-list=SERVICE_DIRECTORY_PROJECT_ID=LIMIT --nat-subnets=psc-nat-subnet1

      このコマンドでは、LIMIT はプロジェクトの接続上限です。接続上限は、このサービスに接続できるコンシューマ PSC エンドポイントの数になります。SERVICE_DIRECTORY_PROJECT_ID を取得する手順は次のとおりです。

      • 指定した 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 です。

PSC サービス アタッチメントを作成したら、PSC サービス アタッチメントを使用するエンドポイント アタッチメントを作成します。詳細については、エンドポイント アタッチメントを作成するをご覧ください。

異なる Google Cloud プロジェクト間のプライベート接続

このセクションでは、バックエンド サービスと PSC サービス アタッチメントが異なる Google Cloud プロジェクトまたは VPC にある場合にプライベート接続を確立する方法について説明します。

次の図は、PSC サービス アタッチメントとバックエンド サービスが異なる Google Cloud プロジェクトにあるプライベート ネットワーク接続の設定を示しています。

異なる Google Cloud プロジェクトのプライベート接続を設定するには、次の操作を行います。

プライベート接続を構成する

プライベート接続を構成する手順は次のとおりです。

  1. ロードバランサを作成します。すでにロードバランサがある場合は、この手順をスキップします。
    1. ゾーン NEG を作成します。詳細については、ゾーン NEG を作成するをご覧ください。
    2. ゾーン NEG をバックエンドとして追加し、次のルールを作成します。
      1. 転送ルールを作成します。
        gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
        --load-balancing-scheme=internal --network=VPC_NETWORK --subnet=SUBNET_NAME_2 \
        --ip-protocol=TCP --ports=BACKEND_SERVER_PORT --backend-service=BACKEND_SERVICE \
        --backend-service-region=REGION
      2. ロードバランサからインスタンス グループへの内部トラフィックを許可するファイアウォール ルールを作成します。
        gcloud compute firewall-rules create FIREWALL_RULE_NAME_INTERNAL \
        --direction=INGRESS --priority=1000 --network=VPC_NETWORK \
        --action=ALLOW --rules=all --source-ranges=SUBNET_RANGE_2
  2. サービス アタッチメントを作成します。
    1. PSC NAT のサブネットを作成します。次のコマンドは、psc-nat-subnet1 という名前のサブネットを作成します。目的は PRIVATE_SERVICE_CONNECT です。
      gcloud compute networks subnets create psc-nat-subnet1 \
                --network=VPC_NETWORK --range=SUBNET_RANGE_1 \
                --purpose=PRIVATE_SERVICE_CONNECT
    2. PSC NAT からロードバランサへのトラフィックを許可するファイアウォール ルールを作成します。
      gcloud compute network-firewall-policies rules create PRIORITY --firewall-policy FIREWALL_POLICY_NAME_SA \
          --direction=INGRESS  --network=VPC_NETWORK \
          --action=allow --allow=tcp:BACKEND_SERVER_PORT --src-ip-ranges=SUBNET_RANGE_1
    3. 明示的な承認を使用してサービス アタッチメントを作成します。
      gcloud compute service-attachments create SERVICE_ATTACHMENT_NAME --producer-forwarding-rule=FORWARDING_RULE_NAME  --connection-preference=ACCEPT_MANUAL --consumer-accept-list=SERVICE_DIRECTORY_PROJECT_ID=LIMIT --nat-subnets=psc-nat-subnet1

      このコマンドでは、LIMIT はプロジェクトの接続上限です。接続上限は、このサービスに接続できるコンシューマ PSC エンドポイントの数になります。SERVICE_DIRECTORY_PROJECT_ID を取得する手順は次のとおりです。

      • 指定した 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 です。

サービス アタッチメントで 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 です。

PSC サービス アタッチメントで Integration Connectors プロジェクトを許可リストに登録したら、PSC サービス アタッチメントを使用するエンドポイント アタッチメントを作成します。詳細については、エンドポイント アタッチメントを作成するをご覧ください。

エンドポイント アタッチメントを作成する

IP アドレスとしてのエンドポイント アタッチメント

エンドポイント アタッチメントを IP アドレスとして作成する方法については、エンドポイント アタッチメントを IP アドレスとして作成するをご覧ください。

エンドポイント アタッチメントをホスト名として使用

TLS 対応のバックエンドなど、特定のケースでは、宛先で TLS 検証を行うために、プライベート IP ではなくホスト名を使用する必要があります。ホスト宛先の IP アドレスの代わりに限定公開 DNS を使用する場合は、エンドポイント アタッチメントを IP アドレスとして作成するだけでなく、マネージド ゾーンも構成する必要があります。エンドポイント アタッチメントをホスト名として作成する方法については、エンドポイント アタッチメントをホスト名として作成するをご覧ください。

後で、エンドポイント アタッチメントを使用するように接続を構成するときに、このエンドポイント アタッチメントを選択できます。

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

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

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

トラブルシューティングのヒント

プライベート接続に問題がある場合は、このセクションに記載されているガイドラインに沿って、一般的な問題を回避してください。

  • エンドポイント アタッチメントが正しく設定され、PSC 接続が確立されていることを確認するには、接続ステータスを確認します。詳細については、エンドポイント アタッチメント接続を確認するをご覧ください。
  • ファイアウォール ルールが次のように構成されていることを確認します。
    • PSC サービス アタッチメントのサブネットからのトラフィックがバックエンド サービスに到達できるようにする必要があります。
    • ロードバランサは、バックエンド サービスにトラフィックを送信できる必要があります。
      • パススルー ロードバランサ(L4 TCP/UDP ILB) PSC サービス アタッチメントの NAT IP からのリクエストがバックエンドに到達できる必要があります。これらの NAT IP は PSC NAT サブネット範囲から自動的に割り振られるため、サービス アタッチメントが存在する NAT サブネットの IP 範囲全体を許可する必要があります。PSC NAT サブネットを確認するには、次のコマンドを使用します。
        gcloud compute networks subnets list --project=PROJECT_ID --region=REGION --filter="purpose=PRIVATE_SERVICE_CONNECT"
      • プロキシベース/HTTP(S) ロードバランサ(L4 プロキシ ILB、L7 ILB)プロキシ ロードバランサからのリクエストは、リージョンのプロキシ専用サブネットから送信されます。したがって、プロキシ専用サブネット範囲からのリクエストがバックエンドに到達できるように、ファイアウォール ルールを構成する必要があります。プロキシ専用サブネットを確認するには、次のコマンドを使用します。
        gcloud compute networks subnets list --project=PROJECT_ID --region=REGION --filter="purpose=REGIONAL_MANAGED_PROXY"
      • ロードバランサの問題のトラブルシューティングについては、内部アプリケーション ロードバランサの問題のトラブルシューティングをご覧ください。

      • ヘルスチェック プローブはバックエンド システムにアクセスできる必要があります。Google Cloud ヘルスチェック プローブには固定の IP 範囲(35.191.0.0/16、130.211.0.0/22)があります。そのため、これらの IP アドレスがバックエンド サーバーにトラフィックを送信できるようにする必要があります。
    • Google Cloud 接続テストを使用すると、ネットワーク構成のギャップを特定できます。詳細については、接続テストを作成して実行するをご覧ください。