アプリケーションがイングレスゲートウェイ経由で公開されている場合、デフォルトでは任意のクライアントからリクエストを受信できます。Service Mesh (ASM) を使用すると、ソース IP アドレスに基づいてイングレスゲートウェイでのアクセスを制限できます。特定の IP アドレスからのトラフィックを拒否するにはブラックリストを、承認済みの IP アドレスからのみトラフィックを許可するにはホワイトリストを設定します。ルールは、ドメイン名、ポート、およびリモート IP ブロックに対してもマッチさせることができます。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
少なくとも 1 つのイングレスゲートウェイを含む ASM インスタンス
ASM インスタンスに追加された Container Service for Kubernetes (ACK) クラスターにデプロイされたアプリケーション。詳細については、「ASM インスタンスに追加された ACK クラスターへのアプリケーションのデプロイ」をご参照ください。
マッチングルールの仕組み
各ブラックリストおよびホワイトリストは、1 つ以上のマッチングルールで構成されます。アクセス制御ポリシーがトリガーされるのは、以下のいずれかの条件を満たす場合です。
リクエストが 少なくとも 1 つ のルールと一致する(ルール間は OR 論理)。
単一のルール内で、リクエストが指定されたすべての条件と一致する(ルール内は AND 論理)。
ブラックリストまたはホワイトリスト機能を無効化すると、対応する権限付与ルールが自動的にクリアされます。
ドメイン名のマッチング
HTTP リクエスト内のドメイン名(Host ヘッダー)には、以下の 3 種類のマッチング方式がサポートされています。
| マッチング方式 | パターン | 例 |
|---|---|---|
| 完全一致 | aliyun.com | 一致するのは aliyun.com |
| プレフィックス | aliyun* | aliyun.com、aliyuncs.com などと一致 |
| サフィックス | *aliyun.com | www.aliyun.com、www.alibabacloud.com/help などと一致 |
ステップ 1:クライアントのソース IP アドレスの取得
南北のトラフィックの場合、リクエストはイングレスゲートウェイに到達する前にロードバランサーを通過し、その結果、元のクライアント IP アドレスがロードバランサーの IP アドレスで置き換えられる可能性があります。ブラックリストまたはホワイトリストが実際のクライアント IP アドレスと正しくマッチするようにするには、まずソース IP アドレスを保持する必要があります。手順については、「南北のトラフィックにおけるソース IP アドレスの保持」をご参照ください。
ソース IP アドレスの保持を構成した後、イングレスゲートウェイのアクセスログからクライアント IP アドレスを特定します。
イングレスゲートウェイ経由でアプリケーションにリクエストを送信し、アクセスログエントリを生成します。たとえば、ブラウザを開き、
http://<ingress-gateway-ip>/productpageにアクセスします。イングレスゲートウェイの IP アドレスを取得するには、「イングレスゲートウェイの IP アドレスの取得」をご参照ください。データプレーンクラスターの kubeconfig ファイルを使用して、最新のアクセスログエントリを取得するには、以下のコマンドを実行します。`
<ingress-gateway-pod-name>` は、イングレスゲートウェイを実行している Pod の名前に置き換えてください。kubectl -n istio-system logs <ingress-gateway-pod-name> -c istio-proxy | grep "/productpage" | tail -n 1JSON 出力で `
downstream_remote_address` フィールドを探します。これがクライアントのソース IP アドレスです。出力例(省略):{ "method": "GET", "downstream_remote_address": "112.124.XXX.XX", "x_forwarded_for": "112.124.XXX.XX", "response_code": 403, "path": "/productpage", "upstream_cluster": "outbound|9080||productpage.default.svc.cluster.local" }
ステップ 2:ブラックリストまたはホワイトリストの設定
ブラックリストの設定
ブラックリストは、指定された IP アドレスからのリクエストを拒否し、それ以外のすべてのトラフィックを許可します。
ASM コンソールにログインします。
左側ナビゲーションウィンドウで、Service Mesh > Mesh Management を選択します。
Mesh Management ページで、ASM インスタンスの名前をクリックします。
左側ナビゲーションウィンドウで、ASM Gateways > Ingress Gateway を選択します。
Ingress Gateway ページで、対象のイングレスゲートウェイの名前をクリックします。
左側ナビゲーションウィンドウで、Gateway Security > Black/White List を選択します。
Black/White List Matching Rules セクションで、以下の設定を行います。
Enable Black/White List を有効化します。
Match Mode で、Black List を選択します。
IPBlock を有効化し、ステップ 1 で取得したクライアントのソース IP アドレスを入力します。
Submit をクリックします。
説明複数のソースからのリクエストをブロックするには、Add Request Matching Rule をクリックして、追加のルールを設定します。
Gateway Black/White List created successfully メッセージが表示された後、ブラックリストが有効になります。生成されたポリシーを確認するには、AuthorizationPolicy の横にある YAML をクリックします。
ホワイトリストの設定
ホワイトリストは、指定された IP アドレスからのみリクエストを許可し、それ以外のすべてのトラフィックを拒否します。設定手順はブラックリストと同様ですが、マッチングモードを選択する際に異なるオプションを指定します。
イングレスゲートウェイのページで、Gateway Security > Black/White List を選択します。
Black/White List Matching Rules セクションで、以下の設定を行います。
Enable Black/White List を有効化します。
Match Mode で、White list を選択します。
IPBlock を有効化し、許可する IP アドレスを入力します。
Submit をクリックします。
ステップ 3:設定の検証
ブラックリストの検証
ブロック対象の IP アドレスから、イングレスゲートウェイ経由でアプリケーションにリクエストを送信します。ブラウザまたは以下の curl コマンドを使用できます。
curl -s -o /dev/null -w "%{http_code}\n" http://<ingress-gateway-ip>/productpage期待される結果: HTTP 403(RBAC アクセス拒否)でリクエストが拒否されます。

ホワイトリストの検証
ホワイトリストに登録済みの IP アドレスから、
http://<ingress-gateway-ip>/productpageにアクセスします。リクエストは正常に成功します。別の IP アドレスから同じ URL にアクセスします。期待される結果: HTTP 403(RBAC アクセス拒否)でリクエストが拒否されます。
curl -s -o /dev/null -w "%{http_code}\n" http://<ingress-gateway-ip>/productpage
ブラックリストまたはホワイトリストの無効化
アクセス制御ポリシーを削除するには、Black/White List ページに移動し、Enable Black/White List を無効化します。対応する権限付与ルールは自動的にクリアされます。