はじめに
Google Cloud の プロキシネットワークロードバランサーを利用した接続制限を行う機会がありましたので、その内容について紹介します。
外部プロキシネットワークロードバランサーに対する特定の IP アドレスのみ許可するようにアクセスに制限する必要があり、Cloud Armor を用いて解決しました。
概要
Web アクセスを除いた TCP 通信を利用したサービスを公開しようと思った場合、プロキシネットワークロードバランサーは種類が複数あります。詳細はこちらのロードバランサーの機能比較などをみていただくと良いと思います。
その中でも今回試したのは、外部プロキシネットワークロードバランサーのリージョン及びグローバルで、接続制御確認を行いました。今回行ったものは以下のようなものです。
こちらで結果をかいてしまっていますが、現状、グローバルであれば接続制限可能ですが、リージョナルであれば接続制限はできません。接続制限は Cloud Armor を利用して行います。
Cloud Armor で接続制限ができるリストについては各ドキュメント参照ください。グローバルスコープはこちら、リージョナルスコープはこちら。
詳細
実施手順
今回実施した際のグローバルスコープに対する制限はこちらの手順にて行うことが可能です。なお、記載の通りコンソールでは行うことはできません。行いたい場合、 gcloud コマンドにて実施します。
gcloud compute backend-services update my-backend \ --security-policy my-policy --global
ちなみに適用されているか確認したい場合、以下のコマンドで確認可能です。
gcloud compute backend-services describe my-backend|grep securityPolicy
securityPolicy: https://www.googleapis.com/compute/v1/projects/プロジェクト名/global/securityPolicies/ポリシー名
ポリシー適用した対象に今回はSSHで試してみましたが接続できない場合、以下のような形で出力され、遮断されたことがわかります。
h-saito$ ssh -i ~/.ssh/h-saito h-saito@グローバルIPアドレス kex_exchange_identification: Connection closed by remote host Connection closed by ターゲットプロキシロードバランサーIP port 22
また Cloud Logging でも確認してみましたが、DENYログがでていました。
※リージョナルもダメ元で実施したところ以下のようなエラーがでました。リージョナルについては対応していないためか、そんなバックエンドサービスはないよ、というコメントが出て、失敗してしまいます。
h-saito$ gcloud compute backend-services update backendservice名 --security-policy セキュリティポリシー名 --region asia-northeast1 ERROR: (gcloud.compute.backend-services.update) Could not fetch resource: - The resource 'projects/プロジェクト名/regions/asia-northeast1/backendServices/バックエンドサービス名' was not found
補足
CLI でしか設定できない内容なのでコンソールで試しにみたところ、コンソール上 Cloud Armor だとバックエンドサービス(外部アプリケーションロードバランサー)と表示されていまして、ここも CLI での内容が反映され、いずれはコンソール上で更新作業できるようになると嬉しいですね。あと、リージョナル側で適用できるようになることも期待しています。
纏め
アプリケーションロードバランサーのアクセスを制限する記事についてはよく見かけるのですが、今回外部プロキシロードバランサーでしたので残してみました。グローバル側では対応しているものの、リージョナル側では対応していないので、その点注意が必要です。今後のアップデートに期待したいと思います。当記事とはあまり関係ないですが、リージョナルでプロキシロードバランサーはプロキシ専用サブネットを準備する必要があったりと違う感覚で作る必要があったので、未体験の方は一度体験することをおすすめします。勉強になりました。