Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

API でレート制限ルールセットを作成する

最終更新 Markdown で表示Agent セットアップ

アカウントレベルでレート制限ルールをデプロイするには、1 つ以上のルールを含むレート制限ルールセットを作成します。API でレート制限ルールセットを作成・デプロイするには、Rulesets API を使います。

ルールパラメーターの詳細は、レート制限パラメーター を参照してください。

各レート制限ルールには、レート制限の設定を持つ ratelimit オブジェクトが含まれます。このオブジェクトとパラメーターの詳細は、レート制限パラメーター を参照してください。

Terraform を使う場合は、Terraform でレート制限ルールを設定する を参照してください。

手順

アカウントにレート制限ルールセットをデプロイするときの、一般的な流れは次のとおりです。

  1. 1 つ以上のレート制限ルールを含むレート制限ルールセット(つまり http_ratelimit フェーズのカスタムルールセット)を作成します。
  2. そのルールセットを、アカウントレベルの http_ratelimit フェーズの エントリポイントルールセット にデプロイします。

1. レート制限ルールセットを作成する

次の例は、rules 配列にレート制限ルールを 1 つ持つレート制限ルールセットを作成します。

Required API token permissions

At least one of the following token permissions is required:
  • Account WAF Write
  • Account Rulesets Write
Create an account rulesetbash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/rulesets" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"description": "",
		"kind": "custom",
		"name": "My rate limiting ruleset",
		"rules": [
				{
						"description": "Rate limit API requests",
						"expression": "(starts_with(http.request.uri.path, \"/my-api/\"))",
						"ratelimit": {
								"characteristics": [
										"ip.src",
										"cf.colo.id"
								],
								"requests_to_origin": false,
								"requests_per_period": 30,
								"period": 60,
								"mitigation_timeout": 120
						},
						"action": "block",
						"action_parameters": {
								"response": {
										"status_code": 429,
										"content_type": "application/json",
										"content": "{ \"error\": \"Your API requests have been rate limited. Wait a couple of minutes and try again.\" }"
								}
						},
						"enabled": true
				}
		],
		"phase": "http_ratelimit"
	}'

利用できる特性(characteristics)は、Cloudflare のプランと製品サブスクリプションによって異なります。詳細は 利用可否 を参照してください。

次の手順のために、レスポンスのルールセット ID を保存します。

2. レート制限ルールセットをデプロイする

レート制限ルールセットをデプロイするには、アカウントレベルの http_ratelimit フェーズのエントリポイントルールセットに、"action": "execute" のルールを追加します。

  1. アカウントのエントリポイントルールセットを取得する 操作を呼び出し、http_ratelimit フェーズのエントリポイントルールセットの定義を取得します。この作業には アカウント ID が必要です。

    Required API token permissions

    At least one of the following token permissions is required:
    • Account WAF Write
    • Account WAF Read
    • Account Rulesets Read
    • Account Rulesets Write
    Get an account entry point rulesetbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/rulesets/phases/http_ratelimit/entrypoint" \
    	--request GET \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
    {
    	"result": {
    		"description": "Account-level phase entry point",
    		"id": "<RULESET_ID>",
    		"kind": "root",
    		"last_updated": "2024-03-16T15:40:08.202335Z",
    		"name": "root",
    		"phase": "http_ratelimit",
    		"rules": [
    			// ...
    		],
    		"source": "firewall_managed",
    		"version": "10"
    	},
    	"success": true,
    	"errors": [],
    	"messages": []
    }
  2. エントリポイントルールセットがすでに存在する場合(つまり、200 OK ステータスコードとルールセット定義を受け取った場合)は、レスポンス内のルールセット ID を控えます。次に、アカウントルールセットのルールを作成する 操作を呼び出して、既存のルールセットに レート制限ルールセット をデプロイする execute ルールを追加します。デフォルトでは、ルールはルールセット内の既存ルール一覧の末尾に追加されます。

    次のリクエストは、アカウント内のすべての Enterprise ゾーンに対して、ID <RATE_LIMITING_RULESET_ID> のレート制限ルールセットを実行するルールを作成します。

    Required API token permissions

    At least one of the following token permissions is required:
    • Account WAF Write
    • Account Rulesets Write
    Create an account ruleset rulebash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/rulesets/$RULESET_ID/rules" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"description": "Execute rate limiting ruleset",
    		"expression": "(cf.zone.plan eq \"ENT\")",
    		"action": "execute",
    		"action_parameters": {
    				"id": "<RATE_LIMITING_RULESET_ID>"
    		},
    		"enabled": true
    	}'
  3. エントリポイントルールセットが存在しない場合(ステップ 1 で 404 Not Found ステータスコードを受け取った場合)、アカウントルールセットを作成する 操作で作成します。rules 配列に、レート制限ルールセット を アカウント内の Enterprise ゾーンへのすべての受信リクエスト 向けに実行するルールを 1 件含めます。

    Required API token permissions

    At least one of the following token permissions is required:
    • Account WAF Write
    • Account Rulesets Write
    Create an account rulesetbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/rulesets" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"description": "",
    		"kind": "root",
    		"name": "Account-level phase entry point",
    		"rules": [
    				{
    						"action": "execute",
    						"expression": "(cf.zone.plan eq \"ENT\")",
    						"action_parameters": {
    								"id": "<RATE_LIMITING_RULESET_ID>"
    						}
    				}
    		],
    		"phase": "http_ratelimit"
    	}'

API 向けのレート制限ルール定義の例は、API でレート制限ルールを作成する を参照してください。


次のステップ

作成してデプロイしたルールセットは、Rulesets API の各操作で扱えます。アカウントレベルでレート制限ルールセットを扱うときの、よくある作業は次のとおりです。

作業 手順
レート制限ルールセットの一覧を取得する

List account rulesets 操作を使い、"kind": "custom" かつ "phase": "http_ratelimit" のルールセットを探します。レスポンスにルールセット ID が含まれます。

詳細は 既存のルールセットを一覧する を参照してください。

レート制限ルールセット内のすべてのルールを一覧する

レート制限ルールセット ID を指定して Get an account ruleset 操作を使い、設定済みのレート制限ルールとその ID の一覧を取得します。

詳細は 特定のルールセットを表示する を参照してください。

レート制限ルールを更新する

Update an account ruleset rule 操作を使います。レート制限ルールセット ID とルール ID が必要です。

詳細は ルールセット内のルールを更新する を参照してください。

レート制限ルールを削除する

Delete an account ruleset rule 操作を使います。レート制限ルールセット ID とルール ID が必要です。

詳細は ルールセット内のルールを削除する を参照してください。

関連リソース

ゾーンレベルで API からレート制限ルールをデプロイする手順は、API でレート制限ルールを作成する を参照してください。

レート制限ルールで設定できる各パラメーターの詳細は、レート制限パラメーター を参照してください。

役に立ちましたか?