
Auth0のACL機能で特定IPのアクセスをブロックしてみた
はじめに
最近Auth0に新しいACL(access-control-list)機能ができました。
以前、ほとんどのアクセス制限はアプリ側の設定やログインフローのActionsで行われましたが、Auth0 ACL機能では、より範囲広く、簡単に細かく設定できるようになっています。
ただ、現時点(202509)はダッシュボード上、ACLの一覧(ルール名、ID)とON/OFF切替機能だけになっているため、ACLの作成や編集などはManagement APIで行う必要があります。
(202509)注意:Auth0のACL機能の有効範囲は Management API とそれ以外のAuthentication関連の部分です。Auth0テナントのダッシュボードへのアクセス周りは関係ありません。(Auth0テナントへの認証はAuth0公式側が管理メカニズムです)
手順
全体の流れ
- M2Mアプリ作成
- 「ACL作成スクリプト」作成
- 設定ファイル作成
- 環境変数設定
- 「ACL作成スクリプト」を実行
- 動作確認
- (任意)ACLルールを無効にする
M2Mの作成とAccess Tokenの取得
- Application画面の
Create Application
でアプリの作成画面い入り、アプリ名を入力する - 全ての権限を付与し、
Authorize
ボタンを押すと、アプリが作成される - Quick Start 画面に入る
Get Access Token
ボタンでM2MのAccess Tokenを取得し、メモして置く
ACL作成スクリプト:create-acl.sh
以下のコードで create-acl.sh
というスクリプトを作成します。
(参考:https://auth0.com/docs/api/management/v2/network-acls/post-network-acls)
# Set default JSON file if not provided
JSON_FILE=${1:-"tenant-acl.json"}
# Check if JSON file exists
if [ ! -f "$JSON_FILE" ]; then
echo "Error: JSON file '$JSON_FILE' not found"
echo "Usage: ./create-acl.sh [json-file]"
echo "Example: ./create-acl.sh tenant-acl.json"
exit 1
fi
curl -L -g -X POST "https://$AUTH0_TENANT/api/v2/network-acls" \
-H "Authorization: Bearer $AUTH0_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d @"$JSON_FILE"
ACLルール設定ファイル:tenant-acl.json
以下の内容で tenant-acl.json
という設定ファイルを作成します。
{YOUR-IP-ADDRESS}
の部分は端末のIPで書き換えてください。
{
"description": "inital-tenant-acl",
"active": true,
"priority": 1,
"rule": {
"action": {
"block": true
},
"not_match": {
"ipv4_cidrs": [
"{YOUR-IP-ADDRESS}"
]
},
"scope": "tenant"
}
}
このルールを簡単に説明すると:
- ルールの名前(description):
inital-tenant-acl
- ルールの有効状態(active):
true
(有効) - ルールの優先順位(priority):
1
(1、2、3...順でチェックされます) - パターンと一致しない場合(
not_match
ipv4_cidrs
)はブロック(block:true
)します。 - 有効範囲(scope):
tenant
(management + authentication)
スクリプトの実行前の環境変数設定
ターミナルに export
コマンドで
- AUTH0_TENANT:Auth0テナントのドメイン
- AUTH0_ACCESS_TOKEN:先程メモした M2MのAccess Token
を設定します。
export AUTH0_TENANT=your-tenant.auth0.com
export AUTH0_ACCESS_TOKEN=your_access_token
スクリプト実行
以下のコマンドでスクリプトを実行します。
./create-acl.sh tenant-acl.json
成功したら、こういうレスポンスが返ってきます。
{"description":"inital-tenant-acl","active":true,"priority":1,"rule":{"scope":"tenant","action":{"block":true},"not_match":{"ipv4_cidrs":["13.231.60.144"]}},"created_at":"2025-09-19T14:29:42.904Z","updated_at":"2025-09-19T14:29:42.904Z","id":"acl_wnh21sgAmhMcADDmaTroNp"}%
動作確認
サンプリアプリを起動します。(参考:https://auth0.com/docs/quickstart/spa/react/interactive)
そして、ログインしようとすると、Universal Login画面にも遷移できず、Access Denied画面が表示されます。
(任意)ACLルールを無効にする
Management APIでACLルールを変更することができますが、Auth0ダッシュボードのSecurity -> Access Control画面でも、ACLルールのON/OFF切替ができます。
先程作成したACLルールをDisable
にし、反映されるまで少し待てば、ログイン画面には再度入れるようになります。
以上