Skip to content

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

API でカスタムルールを作成する

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

ゾーンレベルでカスタムルールを作成するには、Rulesets API を使います。

カスタムルールは、http_request_firewall_custom フェーズのエントリポイントルールセット にデプロイする必要があります。

Terraform を使う場合は、Terraform による WAF カスタムルールの設定 を参照してください。

カスタムルールを作成する

ゾーンに custom rule を作成するには、http_request_firewall_custom フェーズのエントリポイントルールセットにルール を追加します。

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

  2. エントリポイントルールセットがすでに存在する場合(つまり 200 OK ステータスコードとルールセット定義が返された場合)は、レスポンス内のルールセット ID を控えます。次に、ゾーンルールセットにルールを作成する 操作を呼び出し、既存のルールセットに custom rule を追加します。詳細は以降の例を参照してください。

  3. エントリポイントルールセットが存在しない場合(つまり手順 1 で 404 Not Found ステータスコードが返された場合)は、ゾーンルールセットを作成する 操作で作成します。rules 配列に custom rule を含めます。例は ルールセットの作成 を参照してください。

例 A

この例のリクエストは、ID が $ZONE_ID のゾーンの http_request_firewall_custom フェーズのエントリポイントルールセットにルールを追加します。エントリポイントルールセットはすでに存在し、ID は $RULESET_ID です。

新しいルールはルールセットの最後のルールになり、イギリスまたはフランスからのリクエストのうち、攻撃スコア (attack score)20 未満のものを Challenge します。

Create a zone ruleset rulebash
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"description": "My custom rule",
		"expression": "(ip.src.country eq \"GB\" or ip.src.country eq \"FR\") and cf.waf.score lt 20",
		"action": "challenge"
	}'

新しいルールの位置を指定するには、ルールセット内のルールの順序を変更する のガイドラインに従い、リクエストボディに position オブジェクトを含めます。

エントリポイントルールセットを作成し、1 回の API 呼び出しでルールを定義する手順については、フェーズのエントリポイントルールセットにルールを追加する を参照してください。

例 B

この例のリクエストは、ID が $ZONE_ID のゾーンの http_request_firewall_custom フェーズのエントリポイントルールセットにルールを追加します。エントリポイントルールセットはすでに存在し、ID は $RULESET_ID です。

新しいルールはルールセットの最後のルールになり、ブロックしたリクエスト向けの カスタムレスポンス を定義します。

Create a zone ruleset rulebash
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"description": "My custom rule with plain text response",
		"expression": "(ip.src.country eq \"GB\" or ip.src.country eq \"FR\") and cf.waf.score lt 20",
		"action": "block",
		"action_parameters": {
				"response": {
						"status_code": 403,
						"content": "Your request was blocked.",
						"content_type": "text/plain"
				}
		}
	}'

新しいルールの位置を指定するには、ルールセット内のルールの順序を変更する のガイドラインに従い、リクエストボディに position オブジェクトを含めます。

エントリポイントルールセットを作成し、1 回の API 呼び出しでルールを定義する手順については、フェーズのエントリポイントルールセットにルールを追加する を参照してください。


次のステップ

作成したルールを扱うには、Rulesets API の各種操作を使います。よくある作業は次の表を参照してください。

作業 手順
ルールセット内のすべてのルールを一覧表示する

http_request_firewall_custom フェーズ名を指定して Get a zone entry point ruleset オペレーションを使い、設定済みの custom rules とその ID の一覧を取得します。

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

ルールを更新する

Update a zone ruleset rule オペレーションを使います。

ルールセット ID とルール ID が必要です。これらの ID を取得するには、http_request_firewall_custom フェーズ名を指定して Get a zone entry point ruleset オペレーションを使います。

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

ルールを削除する

Delete a zone ruleset rule オペレーションを使います。

ルールセット ID とルール ID が必要です。これらの ID を取得するには、http_request_firewall_custom フェーズ名を指定して Get a zone entry point ruleset オペレーションを使います。

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

これらのオペレーションは Ruleset Engine のドキュメントで説明しています。Ruleset Engine は custom rules を含む、さまざまな Cloudflare 製品の基盤です。

関連リソース

アカウントレベルでカスタムルールを API からデプロイする手順は、API でカスタムルールセットを作成する を参照してください。

役に立ちましたか?