eCDN カスタムルール

カスタムルールを使用すると、さまざまなリクエストパラメーターに基づいてファイアウォールポリシーを設定して受信トラフィックを管理できます。これらの API エンドポイントは、ファイアウォールのルールの既存機能を拡張します。カスタムルールを使用すると、ルール式を完全に管理できます。また、許可されるリクエストフィールドタイプとルールのアクションのリストも拡張されました。これにより柔軟性が向上し、特定のトラフィックのニーズに一致する式を作成できるようになりました。Business Manager でカスタムルールを作成するには、Salesforce ヘルプeCDN ゾーンのカスタムファイアウォールルールの作成を参照してください。

2024 年 2 月 6 日をもって、ファイアウォールルールは廃止されました。既存のファイアウォールルールは eCDN カスタムルールに移行され、カスタムルールエンドポイントからアクセスできます。カスタムルールエンドポイントを使用してファイアウォールルールを管理する方法の詳細については、次の ファイアウォールルールからカスタムルールへの移行 セクションを参照してください。

Important

検証概要 

ルール式 

ルール式でサポートされるフィールドと演算子は、レート制限ルールで提供されるものと一致するようになりました。詳細については、eCDN レート制限ルールガイドのルール式を参照してください。

カスタムルール式の長さは最大 4096 文字です。

Note

ルールのアクション 

次のルールのアクションがアクション配列でサポートされています。

  • block - リクエストされたサイトへのアクセスを拒否します。

  • js_challenge - リクエストを行ったクライアントは、続行する前に JavaScript チャレンジに合格する必要があります。

  • legacy_captcha - リクエストを行ったクライアントは、インタラクティブなチャレンジに合格する必要があります。

    レガシー captcha は API を通じて引き続き存在します。ただし、ユーザーエクスペリエンスを向上させるために、管理されたチャレンジレスポンスを選択することをお勧めします。

    Note

  • managed_challenge - リクエストの特徴に応じ、適切なタイプのチャレンジがクライアントに提示されます。

  • log - 一致するリクエストをログに記録します。

次のスキップアクションもアクション配列でサポートされています。

  • skip_custom_rules - 残りのカスタムルールをすべてスキップします (つまり、優先度の低いカスタムルールは評価されません)。
  • skip_waf - WAFv1 管理ルールをスキップします。
  • skip_security_level - セキュリティレベルをスキップします。
  • skip_rate_limiting_rules - レート制限ルールをスキップします。関連ドキュメントについては、eCDN レート制限ルールを参照してください。
  • skip_wafv2 - WAFv2 管理ルールをスキップします。詳細については、eCDN WAFv2 を参照してください。

スキップアクションを使用する場合、ユーザーは配列内で複数のスキップアクションを指定できます。そうしない場合、配列にはルールアクションが 1 つだけ含まれます。以下の使用例を参照してください。

Important

1"actions": ["block"]
2
3"actions": ["skip_custom_rules", "skip_waf"]
4
5"actions": ["managed_challenge"]

ルールの順序 

カスタムルールは、レスポンスボディにリストされている順序で評価されます。カスタムルールの式が一致すると、アクションが実行されます。

  • managed_challengejs_challengelegacy_captchablock、および skip_custom_rules のアクションは、それ以降のカスタムルールの評価を停止し、ルールセット内の他のルールは評価されません。
  • skip_wafskip_security_level およびlog のアクションは、カスタムルールの評価を停止しません。

位置 

カスタムルールを作成または更新する場合、ユーザーはリクエストボディに position 属性を指定し、ルールセット内の特定の相対位置にルールを挿入できます。 ルールの作成時に位置が指定されていない場合、そのルールはデフォルトでルールセットの最後に追加されます。 以下の使用例を参照してください。

1# Places the rule before rule <RULE_ID>
2
3"position": {
4   "before": "<RULE_ID>"
5}
6
7or
8
9# Places the rule after rule <RULE_ID>
10
11"position": {
12   "after": "<RULE_ID>"
13}

カスタムルールの作成 

このエンドポイントは、指定されたゾーンにカスタムルールを作成します。

  • descriptionexpression、および actions 属性が必要です。
  • enabled および position 属性はオプションです。
  • 入力検証の詳細については、「検証概要」セクションを参照してください。

新しく作成されたルールはデフォルトで有効になり、特に指定のない限り、ルールセットの最後に追加されます。カスタムルールは最大 500 件まで使用できます。

Important

1curl "https://$CODE.api.commercecloud.salesforce.com/cdn/zones/v1/organizations/$ORG/zones/$ZONE/firewall-custom/rules" \
2--header "Authorization: Bearer $TOKEN" \
3--header 'Content-Type: application/json' \
4--data '{
5    "description": "Skip Merchant Approval",
6    "expression": "(http.user_agent contains \"MerchantApprovalServiceClient\")",
7    "actions": ["skip_custom_rules", "skip_waf"],
8    "enabled": false,
9    "position": {
10        "before": "ffffe61cf25e4ec49c34b029ff3060f7"
11    }
12}'

成功レスポンス - 201 HttpStatus コードの例 

レスポンスボディには、作成されたカスタムルールが含まれます。

1{
2   "data": {
3        "ruleId": "2c0fc9fa937b11eaa1b71c4d701ab86e",
4        "description": "Skip Merchant Approval",
5        "expression": "(http.user_agent contains \"MerchantApprovalServiceClient\")",
6        "actions": ["skip_custom_rules", "skip_waf"],
7        "lastUpdated": "2022-12-14T21:25:22.329194Z",
8        "enabled": false
9   }
10}

すべてのカスタムルールの取得 

このエンドポイントは、指定されたゾーンのすべてのカスタムルールを返します。カスタムルールが存在しない場合は、404 (Not Found) レスポンスが返されます。

1curl "https://$CODE.api.commercecloud.salesforce.com/cdn/zones/v1/organizations/$ORG/zones/$ZONE/firewall-custom/rules" \
2--header "Authorization: Bearer $TOKEN" \
3--header 'Content-Type: application/json'

成功レスポンス - 200 HttpStatus コードの例 

レスポンスボディには、指定されたゾーンの既存のカスタムルールがすべて含まれます。

1{
2   "data": [
3                    {
4                        "ruleId": "2c0fc9fa937b11eaa1b71c4d701ab86e",
5                        "description": "Skip Merchant Approval",
6                        "expression": "(http.user_agent contains \"MerchantApprovalServiceClient\")",
7                        "actions": ["skip_custom_rules", "skip_waf"],
8                        "lastUpdated": "2022-12-14T21:25:22.329194Z",
9                        "enabled": true
10                    },
11                    {
12                        "ruleId": "ffffe61cf25e4ec49c34b029ff3060f7",
13                        "description": "Block Cuba",
14                        "expression": "(ip.src.country eq \"CU\")",
15                        "actions": ["block"],
16                        "lastUpdated": "2022-12-14T21:27:45.245836Z",
17                        "enabled": true
18                    }
19                ]
20}

カスタムルールの取得 

このエンドポイントは、リクエストされたカスタムルールを返します。リクエストされたルールが存在しない場合は、404 (Not Found) レスポンスが返されます。

1curl "https://$CODE.api.commercecloud.salesforce.com/cdn/zones/v1/organizations/$ORG/zones/$ZONE/firewall-custom/rules/$RULEID" \
2--header "Authorization: Bearer $TOKEN" \
3--header 'Content-Type: application/json'

成功レスポンス - 200 HttpStatus コードの例 

レスポンスボディには、リクエストされたカスタムルールが含まれます。

1{
2   "data": {
3        "ruleId": "2c0fc9fa937b11eaa1b71c4d701ab86e",
4        "description": "Skip Merchant Approval",
5        "expression": "(http.user_agent contains \"MerchantApprovalServiceClient\")",
6        "actions": ["skip_custom_rules", "skip_waf"],
7        "lastUpdated": "2022-12-14T21:25:22.329194Z",
8        "enabled": false
9   }
10}

カスタムルールの更新 

このエンドポイントは、リクエストされたカスタムルールを更新します。リクエストされたルールが存在しない場合は、404 (Not Found) レスポンスが返されます。

  • ユーザーは、descriptionexpressionactionsenabled、または position の属性のうちの少なくとも 1 つをリクエストボディに指定する必要があります。
1curl "https://$CODE.api.commercecloud.salesforce.com/cdn/zones/v1/organizations/$ORG/zones/$ZONE/firewall-custom/rules/$RULEID" \
2--request 'PATCH' \
3--header "Authorization: Bearer $TOKEN" \
4--header 'Content-Type: application/json' \
5--data '{
6    "description": "Block Merchant Approval",
7    "actions": ["block"],
8    "enabled": false,
9    "position": {
10        "after": "ffffe61cf25e4ec49c34b029ff3060f7"
11    }
12}'

成功レスポンス - 200 HttpStatus コードの例 

レスポンスボディには、リクエストされたルールが含まれます。

1{
2   "data": {
3        "ruleId": "2c0fc9fa937b11eaa1b71c4d701ab86e",
4        "description": "Block Merchant Approval",
5        "expression": "(http.user_agent contains \"MerchantApprovalServiceClient\")",
6        "actions": ["block"],
7        "lastUpdated": "2022-12-14T21:27:22.329194Z",
8        "enabled": false
9   }
10}

すべてのカスタムルールの順序の更新 

このエンドポイントは、既存のすべてのカスタムルールの順序を更新します。ユーザーは、新規ルールの順序を表す ruleIds の配列を提供します。配列には、既存カスタムルールのルール ID がすべて正確に含まれている必要があります。

1curl "https://$CODE.api.commercecloud.salesforce.com/cdn/zones/v1/organizations/$ORG/zones/$ZONE/firewall-custom/rules" \
2--request 'PATCH' \
3--header "Authorization: Bearer $TOKEN" \
4--header 'Content-Type: application/json' \
5--data '{
6    "ruleIds": ["ffffe61cf25e4ec49c34b029ff3060f7", "2c0fc9fa937b11eaa1b71c4d701ab86e"]
7}'

成功レスポンス - 200 HttpStatus コードの例 

レスポンスボディには、更新されたルールの順序で既存カスタムルールがすべて含まれます。

1{
2   "data": [
3                    {
4                        "ruleId": "ffffe61cf25e4ec49c34b029ff3060f7",
5                        "description": "Block Cuba",
6                        "expression": "(ip.src.country eq \"CU\")",
7                        "actions": ["block"],
8                        "lastUpdated": "2022-12-14T21:27:45.245836Z",
9                        "enabled": true
10                    },
11                    {
12                        "ruleId": "2c0fc9fa937b11eaa1b71c4d701ab86e",
13                        "description": "Skip Merchant Approval",
14                        "expression": "(http.user_agent contains \"MerchantApprovalServiceClient\")",
15                        "actions": ["skip_custom_rules", "skip_waf"],
16                        "lastUpdated": "2022-12-14T21:25:22.329194Z",
17                        "enabled": true
18                    }
19                ]
20}

カスタムルールの削除 

このエンドポイントは、リクエストされたカスタムルールを削除します。リクエストされたルールが存在しない場合は、404 (Not Found) レスポンスが返されます。

1curl "https://$CODE.api.commercecloud.salesforce.com/cdn/zones/v1/organizations/$ORG/zones/$ZONE/firewall-custom/rules/$RULEID" \
2--request 'DELETE' \
3--header "Authorization: Bearer $TOKEN" \
4--header 'Content-Type: application/json'

成功レスポンス - 204 HttpStatus コード (コンテンツなし) の例 

ファイアウォールルールからカスタムルールへの移行 

2024 年 2 月 6 日をもって、createFirewallRule エンドポイントと updateFirewallRuleエンドポイントは廃止され、使用できなくなりました。既存のファイアウォールルールはカスタムルール に移行され、カスタムルールとファイアウォールルールエンドポイントの 両方 を使用してアクセスできます。getFirewallRulesgetFirewallRule、および deleteFirewallRule のエンドポイントは、カスタムルールへの移行を支援するために引き続き使用できますが、近い将来非推奨になります。

getCustomRulesエンドポイントを使用して、カスタムルールを表示します。既存のファイアウォールルールと作成したカスタムルールがレスポンスに含まれます。

「すべてのブロック」ルール情報の管理 

既存の許可リストのファイアウォールルールがある場合、getCustomRules エンドポイントは追加のブロックルールを返します。「すべてブロック」ルールは、構成された許可リストルールの実行後に残りのすべてのトラフィックをブロックするために CDN-API によって作成されました。以前は、このルールはファイアウォールルール API レスポンスに表示されませんでした。トラフィックの柔軟性と制御性を高めるために、このルールがカスタムルール API レスポンスで公開されるようになりました。

次のレスポンスの例に示すように、getCustomRules エンドポイントを使用して、「すべてブロック」のルール情報を返します。複数の許可リストのファイアウォールルールを作成した場合、複数の許可リストのルールがレスポンスに含まれます。

1{
2    "data": [
3        {
4            "ruleId": "0b4728a05f4b413f97106b40da5804e6",
5            "expression": "(ip.src.country in {\"US\"})",
6            "actions": [
7                "skip_custom_rules"
8            ],
9            "lastUpdated": "2024-01-30T19:40:23.024514Z",
10            "enabled": true
11        },
12        {
13            "ruleId": "8fcc523bc6db4b74b905f21ca5d916d9",
14            "expression": "(ip.src in {0.0.0.0/0})",
15            "actions": [
16                "block"
17            ],
18            "lastUpdated": "2024-01-30T19:40:23.024514Z",
19            "enabled": true
20        }
21    ]
22}
  • 最初のルールには、expression (国、IP、または ASN) を使用して指定された許可リストが含まれます (例: (ip.src.country in {\"US\"}))。許可リストのルールでは skip_custom_rules action が使用されます。つまり、許可リストに一致するリクエストは、それ以降のカスタムルールでは評価されません。
    • このルールを更新して、アクセスコントロールのニーズに基づいて、他のスキップオプション (skip_rate_limiting_rulesskip_waf など) を含めることができます。
  • 2 番目のルールは、「すべてブロック」のルール情報を提供します。これには、expression(ip.src in {0.0.0.0/0}) として定義されたブロックアクションが含まれます。これにより、構成された許可リストルールに従って、残りのトラフィックがすべてブロックされます。
    • 「すべてブロック」ルールの管理は、管理者の責任です。このルールが不要な場合は削除できます。保持する場合、このルールは、ルールの順序の最後に配置する必要があることに注意してください。「すべてブロック」ルールの後にリストされているルールは実行されません。

ファイアウォールルール API とカスタムルール API では、RuleID の値が異なる場合があります。カスタムルールエンドポイントを使用して、現在のルール ID を取得してください。

Note

カスタムルールを使用した許可リストの作成 

次のいずれかのオプションを使用できます。

  • 許可リストルールを作成し、その後に「すべてブロック」ルールを作成します。このオプションでは、前の例で示したように、少なくとも 2 つの個別のルールを管理する必要があります。詳細については、前のセクションを参照してください。
    • 「すべてブロック」ルールが存在する場合は、別のルールを作成する必要はありません。
    • 「すべてブロック」ルールは、ルールの順序の最後に配置する必要があります。
  • ブロックルールを作成し、ルール式で not 演算子を使用します。以下に例を示します。
    1{
    2    "description": "IP Allowlist",
    3    "expression": "(not ip.src in {123.123.0.0/32 123.123.0.1/32 123.124.127.0/32})",
    4    "actions": ["block"]
    5}
    • このルールは、expression で定義されている IP のリストに 含まれていない IP アドレスからのすべてのリクエストをブロックします。このルールは、式に IP が含まれていないリクエストを直ちにブロックします。このため、複数のルールで許可リストを定義する場合は、この方法は機能しません。この場合、前のオプションを使用する必要があります。

カスタムルールを使用したブロックリストの作成 

IP アクセスコントロールを参照してください。

カスタムルールに関するよくある質問 (FAQ) 

  • カスタムルールはファイアウォールのルールとどう違うのですか?

    • カスタムルールを使用すると、ルール式を作成する際の柔軟性が高まります。カスタムルールとファイアウォールのルールは、どちらもストアフロントのファイアウォールポリシーを設定する機能を提供します。一方、カスタムルールはサポートされるアクションと式のフィールドの拡張セットを提供します。特にカスタムルール式では、URI パス (http.request.uri.path) やユーザーエージェント (http.user_agent) などのフィールドが許可されます。
  • ファイアウォールのルールを引き続き作成して使用できますか?

    • はい。ファイアウォールのルールのエンドポイントは、2024 年 2 月 1 日に廃止されるまで引き続き機能します。ファイアウォールのルールのエンドポイントが廃止されると、既存のすべてのファイアウォールのルールはカスタムルールに変換されます。廃止日以降、顧客が使用できるのはカスタムルールのエンドポイントのみとなります。廃止計画に関するさらなる情報のお知らせまでお待ちください。
  • ファイアウォールのルールとカスタムルールはどのような順序で評価されますか?

    • ファイアウォールのルールは、カスタムルールの前に評価されます。
  • ルール式を構築するにはどうすればいいですか?