Google Cloud マネージド サービスのネットワーク接続

このページでは、Integration Connectors からバックエンド サービス(CloudSQL for MySQLCloudSQL for PostgreSQLCloudSQL for SQL Server など)へのプライベート接続を設定する方法について説明します。このページでは、次のコンセプトを理解していることを前提としています。

考慮事項

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

  • PSC サービス アタッチメントとロードバランサは、同じ VPC 内の異なるサブネットに作成されます。具体的には、サービス アタッチメントは常に NAT サブネットに作成されます。
  • SOCKS5 プロキシ サーバーは 0.0.0.0:<port> IP アドレスにバインドする必要があります。これは、ロードバランサとヘルスチェック プローブからの受信トラフィックに必要です。詳細については、ヘルスチェックをご覧ください。
  • ロードバランサとヘルスチェック プローブからのトラフィックは、同じポートに送信する必要があります。
  • ファイアウォール ルールを構成して、トラフィック フローを促進します。

    上り(内向き)ルール

    • PSC サービス アタッチメントのサブネットからのトラフィックがバックエンド サービスに到達する必要があります。
    • ILB のサブネット内で、ILB が SOCKS5 プロキシ サーバーにトラフィックを送信できる必要があります。
    • ヘルスチェック プローブは、SOCKS5 プロキシ サーバーにアクセスできる必要があります。Google Cloud ヘルスチェック プローブには固定の IP 範囲(35.191.0.0/16, 130.211.0.0/22)があります。そのため、これらの IP は SOCKS プロキシ サーバーにトラフィックを送信できます。

    下り(外向き)ルール

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

  • PSC サービス アタッチメントやロードバランサなど、すべての Google Cloud コンポーネントは同じリージョンに配置する必要があります。
  • 次のシナリオでは、SOCKS5 プロキシ サーバーがトラフィックを受け入れるようにしてください。
    • パススルー ロードバランサ(L4 TCP/UDP ILB): PSC サービス アタッチメントの NAT IP からのリクエストが SOCKS5 プロキシ サーバーに到達できる必要があります。したがって、サービス アタッチメントに対して NAT サブネットの IP 範囲全体を許可する必要があります。詳細については、Private Service Connect サブネットをご覧ください。
    • プロキシベース/HTTP(S) ロードバランサ(L4 プロキシ ILB、L7 ILB): すべての新しいリクエストがロードバランサから送信されます。したがって、SOCKS5 プロキシ サーバーは、VPC ネットワークのプロキシ サブネットからのリクエストを受け入れるようにする必要があります。詳細については、Envoy ベースのロードバランサのプロキシ専用サブネットをご覧ください。

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

CloudSQL MySQL などの一部のマネージド Google Cloud サービスは、プライベート接続用の PSC サービス アタッチメントを公開します。その場合は、この手順をスキップして PSC サービス アタッチメントを作成できます。提供されたマネージド サービスによって提供される PSC サービス アタッチメントを使用して、Integration Connectors エンドポイント アタッチメントを作成できます。

次のシナリオでは、新しい PSC サービス アタッチメントを作成する必要があります。

  • Google Cloud マネージド サービスはサービス アタッチメントを公開しませんが、限定公開サービス アクセスを使用して IP アドレスを公開します。
  • Google Cloud マネージド サービスはサービス アタッチメントを公開しますが、サービス アタッチメントを使用するように Integration Connectors プロジェクトを許可リストに登録することはできません。

次の 2 つのシナリオでサービス アタッチメントを作成する手順については、以降のセクションで詳しく説明します。サービス アタッチメントを作成したら、エンドポイント アタッチメントを作成し、エンドポイント アタッチメントを使用するように接続を構成する必要があります。

アクセスを制限するマネージド サービスのサービス アタッチメントを作成する

マネージド サービスで、公開するサービス アタッチメントを使用するように Integration Connectors プロジェクトを許可リストに登録できない場合があります。この場合、サービス アタッチメントを使用するロードバランサを作成し、プロジェクトに別のサービス アタッチメントを作成して、ロードバランサを Integration Connectors に公開する必要があります。

次の図は、サービス アタッチメントを公開するマネージド サービスを示しています。

PSC NEG をバックエンドとして使用するロードバランサを作成する

  1. 公開サービスに接続するための NEG を作成します。
  2. リージョン内部プロキシ ネットワーク ロードバランサにバックエンドを追加します。

詳細については、Private Service Connect NEG を作成するをご覧ください。

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

  1. PSC NAT のサブネットを作成します。
  2. PSC NAT からロードバランサへのリクエストを許可するファイアウォール ルールを作成する
  3. サービス アタッチメントを作成します。

詳細については、PSC サービス アタッチメントを作成するをご覧ください。

Integration Connectors プロジェクトからの Private Service Connect 接続を許可する

Integration Connectors プロジェクトから Private Service Connect 接続を許可リストに登録する方法については、Integration Connectors を許可リストに登録するをご覧ください。

IP アドレスを公開するマネージド サービスのサービス アタッチメントを作成する

マネージド サービスがサービス アタッチメントを公開していない場合は、Integration Connectors からのトラフィックをプロジェクトを介してプロキシする必要があります。

次の図は、サービス アタッチメントを公開しないマネージド サービスを示しています。

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

  1. PSC サービス アタッチメントを作成します。
    1. SOCKS5 プロキシ サーバーを実行する Compute Engine VM インスタンスを作成します。
      1. プロキシ インスタンス 1 を作成します。
        gcloud compute instances create PROXY_INSTANCE_1 \
                    --project=PROJECT_ID \
                    --network-interface=network-tier=PREMIUM,subnet=SUBNET_NAME_2,no-address
                  

      要件に応じて、必要な数の VM インスタンスを作成できます。

    2. VM インスタンスへの SSH を許可するファイアウォール ルールを作成します。
      gcloud compute firewall-rules create FIREWALL_RULE_NAME_SSH \
                  --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:22
                  
    3. VM インスタンスは、Integration Connectors からマネージド サービスへのトラフィックのプロキシに使用されます。VM インスタンスに SOCKS5 プロキシをインストールします。Cloud SQL Auth Proxy は、SOCKS5 プロキシを介したチェーンをサポートしています。これにより、暗号化されたトラフィックを Cloud SQL Auth Proxy から宛先の Cloud SQL インスタンスに転送できます。したがって、プライベート Cloud SQL インスタンスに接続するには、SOCKS5 プロキシ サーバーが必須です。

      SOCKS5 プロキシ サーバーのインストールと構成の詳細な手順については、このドキュメントでは説明しません。任意の SOCKS5 プロキシをインストールできます。次の手順では、Dante SOCKS5 プロキシ サーバーをインストールして構成する方法について説明します。

      1. VM インスタンスに SSH で接続します。
        gcloud compute ssh \
                    --tunnel-through-iap \
                    PROXY_INSTANCE_1
                
      2. Dante SOCKS5 プロキシ サーバーをインストールします。
        sudo apt update
                sudo apt install dante-server
      3. サーバー インターフェースを確認します。
        sudo ip a
      4. Dante 構成のバックアップを作成します。
        sudo mv /etc/danted.conf /etc/danted.conf.bak
      5. 新しい Dante 構成ファイルを作成します。
        sudo nano /etc/danted.conf
      6. 次の構成を構成ファイルにコピーします。
        logoutput: /var/log/socks.log
                # Bind the server to the 0.0.0.0 IP address to allow traffic
                # traffic from the load balancer and the health check probes.
                internal: 0.0.0.0 port = 1080
                external: ens4
                clientmethod: none
                socksmethod: none
                user.privileged: root
                user.notprivileged: nobody
                client pass {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: error connect disconnect
                }
                client block {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: connect error
                }
                socks pass {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: error connect disconnect
                }
                socks block {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: connect error
                }
      7. Dante サーバーを再起動してステータスを確認します。
        sudo systemctl restart danted
                sudo systemctl status danted
      8. VM インスタンスを終了します。
        exit
    4. VM インスタンスをバックエンドとして使用してロードバランサを作成します。
      1. 非マネージド インスタンス グループを作成します。
        gcloud compute instance-groups unmanaged create INSTANCE_GROUP_NAME
      2. ステップ 3 で作成した VM インスタンスをグループに追加します。
        gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME \
                    --instances=PROXY_INSTANCE_1
      3. ヘルスチェック プローブを作成し、プローブからのトラフィックを許可します。
        1. ヘルスチェック プローブを作成します。
          gcloud compute health-checks create tcp HEALTH_CHECK_NAME \
                      --port BACKEND_SERVER_PORT --region=REGION

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

        2. プローブからのトラフィックを許可するファイアウォール ルールを作成します。
          gcloud compute firewall-rules create FIREWALL_RULE_NAME_HEALTHCHECK \
                      --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:BACKEND_SERVER_PORT \
                      --source-ranges=35.191.0.0/16,130.211.0.0/22
      4. 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 FIREWALL_RULE_NAME_INTERNAL \
                      --direction=INGRESS --priority=1000 --network=VPC_NETWORK \
                      --action=ALLOW --rules=all --source-ranges=SUBNET_RANGE_2

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

      マネージド サービスのサービス アタッチメントを作成したら、エンドポイント アタッチメントを作成し、接続で使用する必要があります。

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

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

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

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

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

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

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

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

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

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

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