Classic Load Balancer (CLB) のアクセス制御は、リスナーに IP ホワイトリストまたはブラックリストを設定することで、クライアントリクエストをフィルタリングします。
ACL の作成
アクセス制御リスト (ACL) は、IP エントリの集まりです。ACL を作成し、IP エントリを追加した後、リスナーに関連付けてホワイトリストまたはブラックリストによるアクセス制御を適用できます。
コンソール
CLB コンソールの[アクセス制御] ページに移動します。上部メニューで、対象インスタンスがデプロイされているリージョンを選択し、アクセス制御リストの作成 をクリックします。
アクセス制御リストの作成 パネルで、リスト名 を入力し、IP プロトコル バージョン (IPv4 または IPv6) を選択し、必要に応じて IP エントリを追加してから、作成 をクリックします。
IPv4 インスタンスは IPv4 の ACL にのみ関連付けることができ、IPv6 インスタンスは IPv6 の ACL にのみ関連付けることができます。CLB インスタンスに応じて IP バージョンを選択してください。
API
ACL を作成するには、CreateAccessControlList API を呼び出します。
IP エントリの追加
ACL を作成した後、IP エントリを追加できます。
コンソール
CLB コンソールの[アクセス制御] ページに移動し、対象 ACL の ID をクリックして詳細ページを開きます。次のいずれかの方法で IP エントリを追加します。
エントリの個別追加: エントリの追加 をクリックします。ダイアログボックスで、IP アドレス/ IP CIDRブロック と コメント を入力し、追加 をクリックします。
エントリの一括追加: 複数のエントリの追加 をクリックし、次の形式でエントリを入力します。
1行に 1 つのエントリを入力します。Enter キーを押して改行します。
IP アドレスまたは CIDR ブロックとその説明を縦棒 (|) で区切ります。例: 192.168.1.0/24|description。
一度に最大 50 個のエントリを追加できます。
エントリを追加した後、エントリリストから削除したり、エクスポートしたりできます。
API
IP エントリを追加するには、AddAccessControlListEntry API を呼び出します。
IP エントリを削除するには、RemoveAccessControlListEntry API を呼び出します。
アクセス制御の有効化または無効化
ACL を作成して IP エントリを追加した後、ACL をリスナーに関連付けてアクセス制御を有効にします。アクセス制御が不要になった場合は、いつでも無効にできます。
ホワイトリストまたはブラックリストのどちらを設定しても、関連付けられた ACL に IP エントリが含まれていない場合、アクセス制御は有効になりません。この場合、リスナーはすべてのリクエストを転送します。ホワイトリストを設定する前に、サービス中断を防ぐため、許可する IP アドレスが ACL に含まれていることを確認してください。
1 つのリスナーに複数の ACL を関連付ける場合、すべての ACL 間で IP エントリが重複しないようにしてください。
コンソール
CLB コンソールの[インスタンス] ページに移動します。上部メニューで、対象インスタンスがデプロイされているリージョンを選択し、インスタンス ID をクリックします。
リスナー タブをクリックします。対象のリスナーを見つけ、アクセス制御 列で 有効化 または 閉じる をクリックします。
[有効化]:表示されたダイアログボックスで、アクセス制御モード (ホワイトリスト または ブラックリスト) と アクセス制御リストの選択 を選択し、保存 をクリックします。
[閉じる]:確認ダイアログボックスで OK をクリックします。
リスナー詳細ページの アクセス制御 セクションでも、アクセス制御の有効化または無効化ができます。
リスナー作成時にアクセス制御を有効にすることもできます。
API
CreateLoadBalancerHTTPSListener や SetLoadBalancerHTTPSListenerAttribute などのリスナーを作成または変更する API を呼び出す際に、次のパラメーターを使用してアクセス制御を設定します。
AclStatus:アクセス制御を有効にするかどうかを指定します。有効な値は、
onとoffです。AclType:アクセス制御のタイプ。有効な値は、
white(ホワイトリスト) とblack(ブラックリスト) です。AclId:関連付けられた ACL の ID。
よくある質問
ホワイトリストがすべての IP を許可してしまう
原因:ACL がリスナーに関連付けられていない (アクセス制御が無効になっている)、または ACL に IP エントリが含まれていない (空の ACL はすべてのトラフィックを許可する) ためです。
解決策:CLB インスタンスの リスナー タブに移動します。対象リスナーの アクセス制御 列に 有効 と表示されていること、および関連付けられた ACL に IP エントリが含まれていることを確認してください。
ブラックリストで IP をブロックできない
原因:リクエストが CDN や WAF などのプロキシ経由で CLB に転送されると、CLB が認識する送信元 IP アドレスは実際のクライアント IP ではなく、プロキシのバックツーソース IP になります。そのため、ブラックリストのルールが適用されません。
解決策:プロキシレイヤー (CDN または WAF) で IP ブラックリストを設定します。クライアントがプロキシをバイパスして CLB に直接アクセスできる場合は、CLB でホワイトリストを設定し、プロキシのバックツーソース IP 範囲からのアクセスのみを許可します。
レイヤー 7 リスナーで Nginx の allow/deny ルールが効かない
原因:トラフィックが CLB のレイヤー 7 リスナーを通過した後、バックエンドサーバーは CLB のプライベート IP (100.64.0.0/10 CIDR ブロックから) からのリクエストを受け取ります。送信元 IP に基づく Nginx の allow/deny ルールは、実際のクライアント IP と一致しません。
解決策:
(推奨) CLB のアクセス制御機能を使用して、CLB インスタンスに直接 IP ホワイトリストまたはブラックリストを設定します。
Nginx で、
X-Forwarded-Forリクエストヘッダーから実際のクライアント IP を取得し、実際のクライアント IP に基づいて allow/deny ルールを設定します。設定の詳細については、「CLB のレイヤー 7 リスナーを介してバックエンドサーバーで実際のクライアント IP を取得する」をご参照ください。
ECS のセキュリティグループで CLB のトラフィックをブロックできないのはなぜですか?
原因:CLB は 100.64.0.0/10 CIDR ブロックを使用してバックエンドの ECS インスタンスと通信します。設計上、この CIDR ブロックからのトラフィックは、ECS セキュリティグループのインバウンドルールによって制限されません。
解決策:クライアント IP アドレスに基づいてアクセスを制限するには、CLB で ACL を設定し、リクエストがバックエンドサーバーに転送される前にブロックします。
ブロックされたリクエストに対するクライアントの応答
説明:CLB のアクセス制御によってリクエストがブロックされると、リクエストは破棄され、応答は返されません。クライアント側では接続タイムアウトが発生します。
ホワイトリストは DDoS 対策になりますか?
説明:いいえ。CLB のアクセス制御は DDoS 攻撃を防ぐことはできません。DDoS 攻撃によるトラフィックは、アクセス制御レイヤーに到達する前にインスタンスの帯域幅リソースを消費します。深刻な攻撃はブラックホールを引き起こす可能性があります。
推奨:Anti-DDoS を使用してください。
多層プロキシシナリオにおけるアクセス制御
CLB の前にレイヤー 7 プロキシがデプロイされている場合、CLB のアクセス制御は直前の上流プロキシのバックツーソース IP しか認識できず、実際のクライアント IP を識別できません。アクセス制御は適切なレイヤーで設定する必要があります。たとえば、CNAME レコードを使用して WAF が統合されているシナリオ (クライアント → CDN → WAF → CLB → ECS) では、各レイヤーでの送信元 IP アドレスと推奨されるアクセス制御設定は次のとおりです。
透過プロキシモードでは、システムは基盤となるネットワークルートを自動的に調整し、CLB リスナーポートからのトラフィックを WAF に誘導してセキュリティ検査を行います。WAF が悪意のあるリクエストをブロックした後、通常のトラフィックを元の CLB インスタンスに転送します。このモードでは、別の WAF バックツーソース IP 範囲を使用しないため、CLB のアクセス制御に追加の設定は必要ありません。
レイヤー | 観測される送信元 IP | 推奨 |
WAF |
| 推奨:このレイヤーで IP ホワイトリストまたはブラックリストを設定します。WAF が正しく設定されると、実際のクライアント IP に基づいてリクエストをブロックでき、リージョンベースのブロックもサポートします。 |
CLB | WAF のバックツーソース IP。 | CLB でホワイトリストを設定し、WAF のバックツーソース IP 範囲からのアクセスのみを許可します。これにより、攻撃者が WAF をバイパスして CLB のパブリック IP アドレスにアクセスするのを防ぎます。WAF コンソールの [Webサイトアクセス] ページで、WAF のバックツーソース IP 範囲を確認できます。 |
バックエンド ECS | CLB のプライベート IP (100.64.0.0/10 CIDR ブロックから)。 | ECS インスタンスのホストファイアウォール (iptables や firewalld など) が 100.64.0.0/10 CIDR ブロックをブロックしないようにしてください。そうしないと、ヘルスチェックとリクエスト転送が失敗します。 |
課金
アクセス制御機能自体に追加料金は発生しません。CLB インスタンスの課金ルールについては、「CLB 課金の概要」をご参照ください。
クォータ
以下の制限については、クォータセンターでクォータの引き上げをリクエストできます。
制限 | クォータ名 | デフォルトの制限 | クォータの引き上げ |
Alibaba Cloud アカウントが作成できる ACL の数 | slb_quota_acls_num | 200 | |
各 ACL に追加できるエントリの数 | slb_quota_acl_entries_num | 300 | |
ACL に関連付けることができるリスナーの数 | slb_quota_acl_attached_num | 50 |
以下の制限は固定されており、引き上げることはできません。
制限 | 最大値 |
リスナーに関連付けることができる ACL の数 | 3 |
1 つのリスナーに関連付けられたすべての ACL における IP エントリの合計数 | 1,000 |