ALB のアクセス制御機能を使用すると、リスナーに IP ホワイトリストやブラックリストを設定して、クライアントリクエストをきめ細かくフィルタリングできます。アクセス制御リスト (ACL) を作成して IP エントリを追加し、その ACL をリスナーに関連付けることで、特定のソースからのトラフィックを許可または拒否できます。
ALB Extensible Edition はアクセス制御をサポートしていません。
ACLとセキュリティグループの比較
ALB では、アクセス制御の方法として、アクセス制御リスト (ACL) とセキュリティグループ の 2 種類が提供されています。
|
項目 |
ACL |
ALBセキュリティグループ |
|
制御の粒度 |
ソース IP に基づき、個々のリスナーに適用されます。 |
ソース IP、プロトコル、ポートに基づき、ALB インスタンス全体に適用されます。 |
|
IPv6 のサポート |
サポートされていません。IPv4 エントリのみ追加できます。 |
IPv4 と IPv6 の両方のアドレスをサポートします。 |
|
デフォルトの動作 |
ホワイトリストモードでは、ACL に含まれない IP アドレスからのリクエストは拒否されます。ブラックリストモードでは、ACL に含まれない IP アドレスからのリクエストは許可されます。 |
デフォルトですべてのトラフィックを許可します。アクセスを制限するには、0.0.0.0/0 の拒否ルールを明示的に追加する必要があります。 |
|
ユースケース |
シンプルな IP ホワイトリストやブラックリストに使用します。この方法は設定が容易で、ルール優先度を理解する必要はありません。 |
ポートレベルの制御、IPv6 のサポート、または ICMP 制御が必要なシナリオ。 |
前提条件
ALB インスタンスを作成し、リスナーを設定済みであること。
ACLの作成
アクセス制御リスト (ACL) は、IP エントリをまとめたものです。ACL を作成してエントリを追加した後、ACL をリスナーに関連付けることで、ホワイトリストまたはブラックリストによるアクセス制御を実装できます。
コンソール
-
ALB コンソールの[アクセス制御] ページに移動します。上部メニューでインスタンスがデプロイされているリージョンを選択し、ACL の作成 をクリックします。
-
アクセス制御リストの作成 ダイアログボックスで ACL の名前を入力し、OK をクリックします。
-
ACL の作成後、アクセス制御 ページで対象 ACL の ID をクリックして詳細ページを開きます。エントリ タブで、次のいずれかの方法で IP エントリを追加します。
-
単一エントリの追加: エントリの追加 をクリックします。 ダイアログボックスで、IP アドレス/CIDR ブロック と 備考 を入力し、追加 をクリックします。
-
エントリの一括追加:ACL エントリの追加 をクリックし、次の形式でエントリを入力します:
-
1行に1エントリを入力します。
-
縦棒 (|) を使用して、IP アドレスまたは CIDR ブロックと備考を区切ります。例:192.168.1.0/24|test-remark
-
一度に最大 20 エントリを追加できます。
-
一括追加するエントリに、ACL に既に存在するエントリが含まれている場合、一括追加は失敗します。重複するエントリを削除し、再度一括追加を実行してください。
-
-
追加したエントリは、エントリリストから削除またはエクスポートできます。
API
-
CreateAcl API を呼び出して ACL を作成します。
-
AddEntriesToAcl API を呼び出して IP エントリを追加します。
-
RemoveEntriesFromAcl API を呼び出して IP エントリを削除します。
アクセス制御の有効化または無効化
リスナーに対して、ホワイトリストまたはブラックリストを設定できます。
-
ホワイトリスト: ACL に含まれる IP アドレスからのアクセスのみを許可し、それ以外のリクエストはすべて拒否します。
-
ブラックリスト: ACL に含まれる IP アドレスからのアクセスを拒否し、それ以外のリクエストはすべて許可します。
ホワイトリストとブラックリストのどちらを設定する場合でも、関連付けられている ACL に IP エントリが含まれていない場合、アクセス制御は機能せず、リスナーはすべてのリクエストを転送します。ホワイトリストを設定する前に、サービスの中断を防ぐため、許可したい IP アドレスが ACL に含まれていることを確認してください。
コンソール
-
ALB コンソールの[インスタンス] ページに移動します。上部メニューで対象インスタンスがデプロイされているリージョンを選択し、インスタンス ID をクリックします。
-
リスナー タブで対象リスナーを見つけ、アクセス制御 列で 有効化 または 閉じる をクリックします。
-
[有効化]: ダイアログボックスで、アクセス制御モード (ホワイトリスト または ブラックリスト) と ACL を選択し、保存 をクリックします。
-
[閉じる]: 確認ダイアログボックスで、OK をクリックします。
-
リスナー詳細ページの アクセス制御 セクションで、アクセス制御を有効化または無効化することもできます。
API
-
AssociateAclsWithListener API を呼び出して ACL をリスナーに関連付けます。
-
DissociateAclsFromListener API を呼び出して ACL とリスナーの関連付けを解除します。
よくある質問
ホワイトリストが有効にならない
原因:ACL がリスナーに関連付けられていないか、ACL に IP エントリが含まれていません。空の ACL はすべてのトラフィックを許可します。
解決策:ALB インスタンスの リスナー タブで、対象リスナーの アクセス制御 列に 有効 と表示されていることを確認します。 また、関連付けられた ACL に IP エントリが含まれていることを確認します。
0.0.0.0/0をホワイトリストに追加できない
原因:ACL では 0.0.0.0/0 エントリの追加はサポートされていません。コンソールで形式エラーが表示されます。
解決策:正しい方法は、アクセス制御を無効化し、必要に応じて再度有効化することです。
ブラックリストが有効にならない
原因:リクエストが CDN または WAF を経由して ALB に転送されています。ALB が認識するソース IP は CDN または WAF のソース IP であり、実際のクライアント IP アドレスではありません。
解決策:ALB のアクセス制御はレイヤー4 で動作し、リクエストパケット内のソース IP アドレスを照合します。CDN や WAF などのプロキシによってリクエストが転送される場合、ソース IP はプロキシのものになります。そのため、ALB のブラックリストではクライアント IP アドレスをブロックできません。WAF または CDN レイヤーでブラックリストを設定してください。
ブラックリストでX-Forwarded-ForのIPをブロックできない
原因:ALB のアクセス制御はレイヤー4 で動作し、リクエストパケット内のソース IP アドレスのみを照合します。レイヤー7 の X-Forwarded-For HTTP ヘッダーは解析しません。
解決策:WAF の カスタムルール を使用してこれを実装できます。マッチフィールド を X-Forwarded-For に、論理記号 を 次を含む に、マッチコンテンツ をターゲット IP アドレスに、Rule Action を 遮断 に設定します。詳細については、「カスタムルールの一致条件を設定する」をご参照ください。
バックエンドのNGINXのallow/denyルールが有効にならない
原因:トラフィックが ALB を介してプロキシされる場合、バックエンドサーバーはソース IP として ALB インスタンスのローカル IP (ALB インスタンスが存在する vSwitch から割り当てられたプライベート IP アドレス) を受信します。NGINX の allow/deny ルールはこのソース IP に基づくため、クライアントの IP アドレスを照合できません。
解決策:
-
(推奨) ALB のアクセス制御機能を使用して、ALB レイヤーで直接 IP ホワイトリストまたはブラックリストを設定します。
-
NGINX で、X-Forwarded-For リクエストヘッダーの
X-Forwarded-Forから実際のクライアント IP アドレスを取得し、その IP アドレスに基づいて allow/deny ルールを設定します。
ドメインまたはパスによるアクセス制限
説明:ACL はリスナーレベルで動作するため、ドメイン名やパスで区別することはできません。有効化すると、ACL はリスナーに関連付けられたすべてのドメインに影響します。
代替ソリューション: 標準または WAF 対応 ALB インスタンスの場合、転送ルールを使用できます。 転送条件で、ドメイン名/パス および SourceIp 条件を設定し、一致するリクエストに対して 固定レスポンスの返却 (403 など) ようにします。 1 つの転送ルールの SourceIp 条件では、最大 5 つの IP アドレスまたは CIDR ブロックをサポートしますが、0.0.0.0/x 形式はサポートしていません。 IP アドレスの数が多い場合、または Basic ALB インスタンスを使用している場合は、WAF を使用することをお勧めします。 WAF で カスタムルールを作成し、ホスト/パスと IP 条件を組み合わせてアクセス制御を行うことができます。
海外IPアドレスのブロック
説明:ALB のアクセス制御では地理的ブロッキング機能は提供されておらず、IP アドレスの国を自動的に識別することはできません。
代替案:既知の海外 IP 範囲を手動でブラックリストに追加できますが、この方法は自動更新されず、エントリ数にも制限があります。WAF の 地理的ブロッキング 機能の使用を推奨します。
多層プロキシシナリオにおけるアクセス制御
レイヤー7 プロキシが ALB インスタンスの前段にデプロイされている場合、レイヤー4 で動作する ALB のアクセス制御機能は、直前のプロキシのソース IP アドレスしか見ることができず、実際のクライアント IP アドレスを識別できません。そのため、適切なレイヤーでアクセス制御を設定する必要があります。ここでは、WAF を CNAME レコードで接続するシナリオ (クライアント → CDN → WAF → ALB → ECS) を例に、各レイヤーで認識されるソース IP アドレスとアクセス制御の推奨事項を示します。
WAF-enabled の ALB インスタンスは、保護のために SDK を使用します。WAF はトラフィック転送に関与しないため、WAF のソース IP というホップは存在しません。CDN などのレイヤー7 プロキシが ALB インスタンスの前段にデプロイされていない場合、このセクションで説明する問題は該当しません。
|
レイヤー |
認識可能なソース IP |
アクセス制御の推奨 |
|
WAF |
|
このレイヤーで IP ホワイトリストやブラックリストを設定します。正しく設定すると、WAF は実際のクライアント IP アドレスに基づいてリクエストをブロックし、地理的ブロッキングもサポートします。 |
|
ALB |
WAF のソース IP。 |
ALB インスタンスでホワイトリストを設定し、WAF のソース IP 範囲からのアクセスのみを許可します。これにより、攻撃者が WAF をバイパスして ALB インスタンスのパブリック IP アドレスへ直接アクセスすることを防ぐことができます。WAF のソース IP 範囲は、WAF コンソールの [アクセス管理] ページで確認できます。 |
|
バックエンドECS |
ALB インスタンスのローカル IP アドレス (ALB インスタンスが存在する vSwitch から割り当てられたプライベート IP アドレス)。 |
バックエンド ECS インスタンス上の iptables やその他のサードパーティ製セキュリティソフトウェアによって、ALB インスタンスのローカル IP の CIDR ブロックがブロックされていないことを確認してください。ブロックされている場合、ヘルスチェックとリクエスト転送の両方が失敗します。 |
課金
アクセス制御機能は無料です。ALB インスタンスの課金の詳細については、「ALB の課金」をご参照ください。
クォータ
|
項目 |
エディション |
クォータ |
|
ACLに関連付け可能なリスナー数 |
Basic/Standard/WAF-enabled |
50 |
|
リスナーに関連付け可能なACL数 |
Basic/Standard/WAF-enabled |
3 |
|
リージョンで作成可能なACL数 |
Basic/Standard/WAF-enabled |
1000 |
|
ACLに追加可能なエントリ数 |
Basic/Standard/WAF-enabled |
500 |
|
ALBインスタンスに関連付け可能なACLエントリ数 |
Basic/Standard/WAF-enabled |
800 |
|
リスナーに関連付け可能なACLエントリ数 |
Basic |
300 |
|
Standard/WAF-enabled |
500 |
これらのクォータはハードリミットであり、引き上げることはできません。詳細については、「ALB のクォータと制限」をご参照ください。