Service Mesh (ASM) では、イングレスゲートウェイのブラックリストまたはホワイトリストを設定して、ソース IP アドレス、HTTP リクエストのドメイン名、ポート、リモート IP ブロックに基づいて ASM インスタンス内のアプリケーションへのアクセスを制御できます。この機能を使用して、ASM インスタンス内のアプリケーションのセキュリティを確保できます。このトピックでは、イングレスゲートウェイのブラックリストまたはホワイトリストを設定して、特定のソース IP アドレスからのリクエストを拒否または許可する方法について説明します。
前提条件
お使いの ASM インスタンスに追加された Container Service for Kubernetes (ACK) クラスターにアプリケーションがデプロイされていること。詳細については、「ASM に関連付けられたクラスターへのアプリケーションのデプロイ」をご参照ください。
一致ルールの説明
ブラックリストまたはホワイトリストが有効になるリクエストは、いずれかのルールに一致し、かつそのルール内のすべての基準に一致する必要があります。
ブラックリストまたはホワイトリスト機能が無効になると、対応する権限付与ルールは自動的にクリアされます。
HTTP リクエストのドメイン名、つまりホスト名は、完全一致、プレフィックス一致、サフィックス一致をサポートしています。例:
完全一致:aliyun.com
プレフィックス一致:aliyun*
サフィックス一致:*aliyun.com
イングレスゲートウェイのログを使用した特定クライアントのソース IP アドレスの取得
南北のトラフィックの場合、クライアントリクエストはまずロードバランサーに送信され、イングレスゲートウェイに転送されてからバックエンドサービスに送られます。イングレスゲートウェイが介在するため、クライアントのソース IP アドレスの取得は複雑になります。南北のトラフィックのソース IP アドレスを保持する方法の詳細については、「シナリオ 2:南北のトラフィック」をご参照ください。
ブラウザを開き、アドレスバーに http://{イングレスゲートウェイの IP アドレス}/productpage と入力して productpage サービスにアクセスします。これにより、アクセスログが生成されます。
イングレスゲートウェイの IP アドレスの取得方法の詳細については、「イングレスゲートウェイの IP アドレスの取得」をご参照ください。
データプレーン上のクラスターの kubeconfig ファイルを使用して、次のコマンドを実行し、イングレスゲートウェイのアクセスログを取得します:
kubectl -n istio-system logs ${イングレスゲートウェイが属する Pod の名前} -c istio-proxy | grep "/productpage" | tail -n 1出力例:
{"method":"GET","authority":"47.99.XXX.XXX","response_flags":"-","start_time":"XXXXXX","requested_server_name":null,"request_id":"*****","upstream_local_address":null,"duration":0,"downstream_local_address":"10.34.0.25:80","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.X.X Safari/537.36","upstream_host":null,"bytes_received":0,"istio_policy_status":null,"protocol":"HTTP/1.1","bytes_sent":19,"downstream_remote_address":"XXXXXXX","response_code":403,"x_forwarded_for":"112.124.XXX.XX","upstream_cluster":"outbound|9080||productpage.default.svc.cluster.local","trace_id":null,"path":"/productpage","upstream_transport_failure_reason":null,"upstream_service_time":null,"route_name":null}サンプル出力の
downstream_remote_addressの値が、クライアントのソース IP アドレスです。
イングレスゲートウェイにブラックリストを設定して特定クライアントのソース IP アドレスからのリクエストを拒否する
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
-
[メッシュ管理] ページで、対象の ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
Ingress Gateway ページで、対象のゲートウェイの名前をクリックします。表示される概要ページで、左側のナビゲーションウィンドウから を選択します。
-
Black/White List Matching Rules ウィザードで、Enable Black/White List スイッチをオンにします。Match Mode を Black List に設定します。IPBlock スイッチをオンにし、クライアントのソース IP アドレスを入力してから、Submit をクリックします。
説明複数のマッチングルールを設定するには、Add Request Matching Rule をクリックして、複数のタイプのリクエストを同時にブロックまたは許可します。
設定が完了すると、「Gateway Black/White List created successfully」というメッセージが表示され、ポリシーが有効になったことを示します。AuthorizationPolicy の右側にある View YAML をクリックすると、設定の詳細を確認できます。
-
ブラウザのアドレスバーに http://{イングレスゲートウェイの IP アドレス}/productpage と入力して、productpage サービスにアクセスします。
次のメッセージが表示された場合、ブラックリストが有効になっていることを示します。
RBAC: access denied
イングレスゲートウェイにホワイトリストを設定して特定クライアントのソース IP アドレスからのリクエストのみを許可する
ホワイトリストの設定方法はブラックリストの設定方法と似ていますが、一致モードが異なります。
-
Ingress Gateway ページで、対象のゲートウェイの名前をクリックします。表示される概要ページで、左側のナビゲーションウィンドウから を選択します。
-
Black/White List Matching Rules ウィザードで、Match Mode を White list に設定し、Submit をクリックします。
-
productpage サービスにアクセスします。
ブラウザのアドレスバーに http://{イングレスゲートウェイの IP アドレス}/productpage と入力します。
productpage サービスにアクセスできます。
-
異なる IP アドレスを持つクライアントで、ブラウザに http://{ご利用のイングレスゲートウェイの IP アドレス}/productpage と入力します。
次の応答が表示され、他のクライアント IP アドレスからのアクセスが拒否され、ホワイトリストルールが有効であることを示します。
RBAC: access denied
参考
ASM では、イングレスゲートウェイのアクセスログを収集できます。詳細については、「ASM ゲートウェイのアクセスログの生成と収集」をご参照ください。