アクセスコントロールリスト (ACL) について

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

ACL の利便性

エッジのアクセスコントロールリストは、以下のような場合に役立ちます。

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

ACL の仕組み

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

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

ACL の作成方法

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

  • Fastly のコントロールパネルまたは API を使用して実行する。 Fastly コントロールパネルまたは Fastly API を使用してエッジで ACL を作成します。エッジで Web サイトまたはアプリケーションを ACL と統合する設定の場合、Fastly は通常こちらのオプションを推奨しています。
  • カスタム 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に制限されています。 コンテナがこの制限に近づいている場合は、お問い合わせください。エッジでの ACL 使用の、より効率的な方法を提案できるかもしれません。
  • 削除された ACL コンテナは、編集中のサービスバージョンからのみ削除されます。 ACL コンテナはサービスバージョンに紐付けられ、複製と復元が可能です。ACL コンテナを削除すると、編集中のサービスバージョンの設定のみに影響がおよびます。コンテナ内の ACL エントリーは、編集中のサービスバージョンからのみ削除されます。ACL エントリー自体は、以前のバージョンのサービスで設定された ACL からは削除されません。これにより、構成を可能な限り少ない手順で以前のバージョンに戻すことができます。

エッジで ACL を作成・操作する際のサービス構成の開発では以下の制限に留意してください。

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