アクセス制御リスト (ACL) について

攻撃者はさまざまな方法でインターネット上に姿を現します。自動化されたツールによってウェブサイトからスクレイピングされた情報や、ボットによって発見されたアプリケーションの脆弱性は、ハッカーによって悪用されます。エッジでアクセス制御リスト (ACL) を使用することで、攻撃者が利用する IP アドレスから情報リソースへのアクセスするのを防ぐことができます。

ACL の利便性

エッジでのアクセス制御リストの使用は、以下のようなケースで役立ちます。

  • 特定の IP アドレス範囲からのスクレイピングを防ぐ必要がある eコマース企業
  • 管理ポータルへのアクセスを制限する必要があるオフィス
  • エッジで攻撃者をブロックしたい広告テクノロジー企業
  • 特定のプロキシまたは IP アドレス範囲からのコールのみを受け入れるモバイルアプリケーション
  • 社内の IP アドレスまたはサブネットレンジからバックエンドへのアクセスを制限する必要があるシステム管理者

ACL の仕組み

ACL は、ACL コンテナとその内部の ACL エントリーで構成されています。コンテナとエントリーの組み合わせにより、Varnishサービス内の URL へのアクセスを許可または制限するために使用する許可リストを保存することができます。

サービスのバージョンに ACL コンテナをアタッチし、そのサービスを有効化すると、コンテナ内のデータ (ACL エントリー) はバージョンレスになります。つまり、サービスが有効化された時点で、ACL エントリーの追加を含む内部データに対する変更が直ちに有効になるということです。

ACL の作成方法

エッジで ACL を作成しサービス内で使用するには、まず空の ACL コンテナを作成します。そして、まだ有効化されておらず、ロックがかかっていないサービスの作業バージョンにエントリーを追加します。ACL を作成する方法は複数あります。

  • Fastly のコントロールパネルまたは API 経由: Fastly コントロールパネルまたは Fastly API を使用してエッジで ACL を作成できます。エッジで Web サイトまたはアプリケーションに ACL を適用する場合、通常こちらのオプションを推奨しています。
  • カスタム VCL を使用する: VCL を使用して ACL を作成できます。アクセス制御要件がシンプルで、VCL 内で IP アドレスをハードコードできる場合にのみ、このオプションを推奨しています。手作業で作成された ACL はお客様のサービスでバージョン管理されます。ACL を変更する場合は、VCL を変更する必要があります。

ACL の使用例

Fastly API を使用して ACL を作成し、ACL エントリーを追加すると、以下のように ACL と ACL エントリーの VCL が自動的に生成されます。例えば、次の VCL では office_ip_ranges という名前の ACL が作成されています。

1
2
3
4
5
6
7
# This VCL is automatically generated when you create an ACL container and entries
# using the Fastly API. In this example, the ACL name is office_ip_ranges.
acl office_ip_ranges {
  "192.0.2.0"/24;                              # internal office
  "198.51.100.4";                              # remote VPN office
  "2001:db8:ffff:ffff:ffff:ffff:ffff:ffff";    # ipv6 address remote
}

作成後、カスタム VCL をアップロードすることで、エッジで ACL と通信するロジックを追加できます。以下のカスタム VCL をアップロードすると、office_ip_ranges ACL を許可リストとして使用することができます。

1
2
3
4
5
6
sub vcl_recv {
  # block all requests to Admin pages from IP addresses not in office_ip_ranges
  if (req.url ~ "^/admin" && ! (client.ip ~ office_ip_ranges)) {
    error 403 "Forbidden";
  }
}

この VCL では、デフォルトですべてのユーザーが /admin へのアクセスを拒否されますが、ACL にリストアップされている IP アドレスは /admin へのアクセスが制限なしで許可されます。

制約事項

ACL コンテナとエントリーを使用する場合は、特に次の点に注意してください。

  • API 経由での ACL エントリーの変更はイベントログに表示されません。 API を使用して ACL エントリーを追加、更新、削除する場合、監査ログイベントログには記録されません。唯一存在する変更の記録は、サービスバージョンを比較して、どの時点で初めて ACL がサービスバージョンに関連付けられたかをチェックすることによって確認できます。
  • ACL エントリーの削除は恒久的です。 ACL エントリーにバージョンはありません。つまり、ACL コンテナ内のエントリーを削除すると、そのエントリーはすべてのサービスバージョンから永久に削除され、復元できなくなります。
  • ACL コンテナの ACL エントリー数は1000に制限されています。 コンテナがこの制限に近づいている場合は、Fastly までご連絡ください。エッジで ACL を使用する、より効率的な方法を見つけるのをサポートします。
  • 削除された ACL コンテナは、編集中のサービスバージョンからのみ削除されます。 ACL コンテナはサービスバージョンに紐付けられ、クローンの作成と復元が可能です。ACL コンテナを削除すると、編集中のサービスバージョンの設定のみが影響を受けます。コンテナ内の ACL エントリーは、編集中のサービスバージョンからのみ削除されます。ACL エントリー自体は、以前のバージョンのサービスで設定された ACL からは削除されません。これにより、可能な限り少ない手順で以前のバージョンの設定に戻すことができます。

サービスの設定を検討する際、エッジでの ACL の作成・操作において以下の制限に留意してください。

  • カスタム VCL で作成された ACL は、常にバージョン管理されます。 カスタム VCL で作成した ACL は常にサービスに関連付けられ、更新される度に新しいサービスバージョンが必要になります。これは、カスタム VCL を使用して作成された ACL と、それらの ACL と通信するために作成されたロジックの両方に当てはまります。
  • カスタム VCL で作成された ACL は API を使用して操作することができません。 カスタム VCL を使用して ACL を作成した場合、その ACL は常にカスタム VCL を使用して操作する必要があり、Fastly API を使用して操作することはできません。ただし、API を使用して作成した ACL は、API とカスタム VCL の両方で操作することができます。
Back to Top