[AEM Forms]{class="badge positive" title="AEM Formsに適用)。"}

Edge Delivery Services フォーム送信での 403 Forbidden エラーのトラブルシューティング troubleshooting-403-forbidden-edge-delivery

Edge Delivery ServicesからAEM パブリッシュにフォームを送信する際に、403 Forbidden エラーが発生する場合があります。 このエラーは、通常、セキュリティ設定が原因で、サーバーがリクエストの処理を拒否していることを示します。 この記事では、この問題の最も一般的な原因を特定し、解決するのに役立ちます。

問題の説明

Edge Delivery ServicesからAEM パブリッシュにフォームを送信すると、403 Forbidden エラーが発生します。 エラーは次のように表示されます。

  • HTTP ステータスコード:403
  • エラーメッセージ:「Forbidden」または「Access Denied」
  • フォームの送信は、AEM送信サーブレットに到達せずに失敗します

この問題は、通常、Edge Delivery Servicesの統合で発生します。Edge ドメイン (.aem.live.aem.page.hlx.page.hlx.live)でホストされているフォームがAEM パブリッシュインスタンスにデータを送信しようとします。

IMPORTANT
リポーレス設定では、同じリポジトリを使用して複数のサイトをホストできます。 フォーム送信が適切に機能するためには、各サイトドメインを個別に許可リストに追加する必要があります。
例:
  • リポジトリ:https://github.com/adobe/abc
  • サイト 1: main--abc--adobe.aem.live
  • サイト 2: main--abc1--adobe.aem.live
どちらのドメインも、両方のサイトから機能するために、フォーム送信に対して別々の許可リストエントリが必要です。

一般的な原因と解決策

Edge Delivery Services フォーム送信で403 Forbidden エラーが発生すると、複数の原因が考えられます。 次のトラブルシューティング手順に従います。

​1. CORS (クロスオリジン リソース共有)の問題

症状:

  • ブラウザーコンソールにCORS関連のエラーメッセージが表示される
  • 「ネットワーク」タブには、サーバーに到達する前にブロックされているリクエストが表示されます
  • 「クロスオリジン要求がブロックされました」というエラーメッセージ

診断:

  1. ブラウザーの開発者ツールを開く(F12)
  2. CORS エラーメッセージについては、「コンソール」タブを確認してください
  3. 次のようなメッセージを探します:Access to fetch at 'https://publish-xxx.adobeaemcloud.com' from origin 'https://main--repo--owner.aem.live' has been blocked by CORS policy

解決策:
AEMでCORS設定を行い、特定のEdge Delivery サイトドメインからのリクエストを許可します。

IMPORTANT
この手順では、Dispatcher vhost設定を変更します。 AEM as a Cloud Serviceでは、出荷されたdefault.vhost ファイルは不変であり、Cloud Manager パイプラインの検証中にchecksumによって適用されます。直接編集をデプロイできません。 最初にavailable_vhosts/の下に顧客所有のコピーを作成し、以下のCORS設定を適用する前に、enabled_vhosts/シンボリックリンクをその場所にリポイントします。
参照:https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/implementing/dispatcher/disp-overview#file-structure
# Developer Localhost
SetEnvIfExpr "env('CORSProcessing') == 'true' && req_novary('Origin') =~ m#(http://localhost(:\d+)?$)#" CORSTrusted=true

# Edge Delivery Sites - Add each site domain individually
SetEnvIfExpr "env('CORSProcessing') == 'true' && req_novary('Origin') =~ m#(https://main--abc--adobe\.aem\.live$)#" CORSTrusted=true
SetEnvIfExpr "env('CORSProcessing') == 'true' && req_novary('Origin') =~ m#(https://main--abc1--adobe\.aem\.live$)#" CORSTrusted=true

# Legacy Franklin domains (deprecated - included for backward compatibility only)
SetEnvIfExpr "env('CORSProcessing') == 'true' && req_novary('Origin') =~ m#(https://.*\.hlx\.page$)#" CORSTrusted=true
SetEnvIfExpr "env('CORSProcessing') == 'true' && req_novary('Origin') =~ m#(https://.*\.hlx\.live$)#" CORSTrusted=true
NOTE
main--abc--adobe.aem.livemain--abc1--adobe.aem.live を実際のサイトドメインに置き換えます。 同じリポジトリからホストされる各サイトには、個別の CORS 設定エントリが必要です。

CORS 設定について詳しくは、CORS 設定ガイドを参照してください。

​2. Dispatcher ルール

症状:

  • ブラウザーコンソールでCORS メッセージなしで403 エラーが発生する
  • リクエストはサーバーに到達しましたが、Dispatcherによってブロックされています
  • AEM アプリケーションレイヤーに到達する前にエラーが発生する

診断:

  1. リクエスト URLがDispatcher フィルタールールと一致するかどうかを確認します
  2. POST リクエストをブロックする可能性のある/filter ルールのDispatcher設定を確認します
  3. フォーム送信エンドポイントがDispatcher設定で許可されていることを確認します

解決策:
フォーム送信リクエストを許可するようにDispatcher設定を更新します。

  1. フォーム送信エンドポイントへのPOST リクエストが許可されていることを確認します
  2. Edge Delivery ドメインに適切なフィルタールールを追加する
  3. 送信サーブレット パスがブロックされていないことを確認します

Dispatcher フィルター設定の例:

/filter {
  # Allow POST requests to form submission servlet
  /0100 { /type "allow" /method "POST" /url "/content/forms/af/*" }
  /0101 { /type "allow" /method "POST" /url "/adobe/forms/af/submit/*" }
  /0102 { /type "allow" /method "POST" /url "/content/forms/portal/submit/adaptiveform" }
}

​3. リファラーフィルターの問題

症状:

  • ブラウザーコンソールでCORSの問題がない場合の403 エラー
  • リクエストがAEMに到達しましたが、Sling リファラーフィルターによって拒否されました
  • AEM アプリケーションレイヤーでエラーが発生する

診断:
リファラーフィルターの拒否メッセージのAEM エラーログを確認します。

  1. Cloud Managerを介したAEM Cloud Service ログへのアクセス

  2. 次を含むaemerror.logのエントリを探します。

    • 「リファラーフィルターが拒否されました」
    • “org.apache.sling.security.impl.ReferrerFilter”
    • リファラー検証エラーを示すメッセージ

ログエントリの例:

[ERROR] org.apache.sling.security.impl.ReferrerFilter Referrer filter rejected request with referrer 'https://main--abc--adobe.aem.live' for POST /content/forms/af/submit

解決策:
リファラーフィルターを設定して、特定のEdge Delivery サイトドメインを許可します。

  1. OSGi 設定ファイル org.apache.sling.security.impl.ReferrerFilter.cfg.json を作成または更新します。

  2. 特定のサイトドメインを使用して、次の設定を追加します。

    code language-json
    {
      "allow.empty": false,
      "allow.hosts": [
        "main--abc--adobe.aem.live",
        "main--abc1--adobe.aem.live"
      ],
      "allow.hosts.regexp": [
        "https://.*\\.aem\\.live:443",
        "https://.*\\.aem\\.page:443",
        "https://.*\\.hlx\\.page:443",
        "https://.*\\.hlx\\.live:443"
      ],
      "filter.methods": [
        "POST",
        "PUT",
        "DELETE",
        "COPY",
        "MOVE"
      ],
      "exclude.agents.regexp": [
        ""
      ]
    }
    
  3. Cloud Manager を通じて設定をデプロイします

IMPORTANT
リポーレス設定の場合:​各サイト ドメインを個別にallow.hosts配列に追加する必要があります。 正規表現パターンのみを使用するだけでは、すべてのシナリオに対して十分ではない場合があります。 包括的にカバーできるように、特定のドメインと正規表現パターンの両方を含めます。
WARNING
AEM のリファラーフィルターは OSGi 設定ファクトリではありません。つまり、AEM サービスで一度にアクティブになる設定は 1 つだけです。 可能な場合は、AEMのネイティブ設定が上書きされ、製品機能が機能しなくなる可能性があるため、カスタムリファラーフィルター設定を追加しないでください。

診断手順

403 エラーの特定の原因を特定するには、次の手順に従います。

手順1: ブラウザーコンソールの確認

  1. ブラウザーの開発者ツールを開く(F12)
  2. 「コンソール」タブに移動します
  3. フォーム送信の試行
  4. CORS関連のエラーメッセージを探します

CORS エラーが存在する場合:​上記のCORS ソリューションに従います。
CORS エラーがない場合:​手順2に進みます。

手順2:「ネットワーク」タブを確認する

  1. ブラウザーの開発者ツールを開く(F12)
  2. 「ネットワーク」タブに移動します
  3. フォーム送信の試行
  4. 失敗したリクエストの詳細を確認する
  5. 応答ヘッダーとステータスの確認

リクエストがサーバーに届かない場合: Dispatcherの問題が発生している可能性があります。
リクエストがサーバーに到達したが失敗した場合: リファラーフィルターの問題が発生している可能性があります。

手順3:AEM ログの確認

  1. Cloud Manager へのアクセス
  2. 環境→ログに移動→ます
  3. aemerror.logをダウンロードまたは表示
  4. フォーム送信時のエントリの検索
  5. リファラーフィルターまたはセキュリティ関連のメッセージを探します

予防とベストプラクティス

​1. セットアップ時の適切な設定

  • Edge Delivery Servicesの初期設定時にCORS、Dispatcher、およびリファラーフィルターの設定を行う
  • 新しいサイトごとに:​特定のドメインをすべての許可リストに追加します(CORS、リファラーフィルター)
  • 本番稼働前に、開発環境でフォーム送信をテストします

​2. 環境固有の設定

  • 開発環境、ステージング環境、実稼動環境に対して様々な設定を使用します
  • ローカル開発テスト用にlocalhost ドメインを含める
  • リポジトリに対する許可リストアクセスが必要なすべてのサイトドメイン​をドキュメント化します

​3. 監視とログ

  • リファラーフィルターの拒否に対するログ監視の設定
  • フォーム送信コードで適切なエラー処理を実装する
  • テスト中にブラウザー開発者ツールを使用する

​4. ドキュメントとチーム知識

  • 同じリポジトリを使用するすべてのサイトドメインの​ レジストリ ​を管理する
  • トラブルシューティングの手順について開発チームをトレーニングする
  • Edge Delivery Services フォーム設定のチェックリストを管理する
  • 既存のリポジトリから新しいサイトが作成されるたびに​更新します

リポーレス設定のためのサイトドメイン管理

Helix-5およびrepoless アーキテクチャでは、次のガイドラインに従います。

新しいサイトの作成時

  1. サイトドメインを特定 (例:main--newsite--adobe.aem.live
  2. 新しいドメインを含めるようにCORS設定​を更新します
  3. リファラーフィルター​を更新して、allow.hostsに新しいドメインを含めます
  4. 新しいサイトから​フォーム送信をテスト
  5. 新しいドメイン​をサイトレジストリに文書化します

ドメインの命名パターン

  • 標準パターン:{branch}--{site}--{owner}.aem.live
  • 同じリポジトリを共有しても、各サイトには一意のドメインが割り当てられます
  • .aem.live.aem.page ドメインの両方を使用できます

構成管理

  • セキュリティを強化するためにallow.hostsで特定のドメイン エントリを使用する
  • より幅広いカバレッジのために正規表現パターンを補完
  • サイトの追加や削除に伴う許可リストの定期的な監査と更新

その他のリソース

関連トピック

さらにサポートが必要ですか? 以下のトラブルシューティング手順を実行した後も問題が発生し続ける場合は、Adobe カスタマーサポートにお問い合わせください。

  • 特定のエラーメッセージ
  • AEM Cloud Service環境の詳細
  • フォーム送信アクセスが必要なすべてのEdge Delivery Services サイトドメイン
  • エラーの時点からの関連ログのエントリ

さらにサポートが必要ですか? 以下のトラブルシューティング手順を実行した後も問題が発生し続ける場合は、Adobe カスタマーサポートにお問い合わせください。

  • 特定のエラーメッセージ
  • AEM Cloud Service環境の詳細
  • Edge Delivery Servicesのドメイン情報
  • エラーの時点からの関連ログのエントリ
recommendation-more-help
experience-manager-cloud-service-help-main-toc