Azure Front Door + Application Gateway で 証明書の検証を有効化する場合は、 FQDN で指定する

# Azure Front Door のバックエンドに Application Gateway を FQDN で指定する
Azure Front Door は基本的に HTTPS で利用するかと思います。
TLS/SSL 証明書の検証を有効化する場合、Azure Front Door のバックエンドは FQDN で指定する必要があります。
Azure Front Door のバックエンドとして、 Application Gateway を IPアドレスで指定した場合には、 エラー　となります。
Application Gateway の FQDN で指定しましょう。


こんな感じで。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/51613420-a523-77b2-9851-9bc8bb475416.png)


## とりあえず Azure Front Door の背後に Application Gateway を指定してみる ( そしてエラーになる ）
Azure Front Door -> 設定 -> 配信元グループ より、配信元(Origin)の設定を行います。
[配信元の種類] としては Application Gateway を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/013d173d-b467-a0e1-32e6-7fa356fc87fb.png)


[ホスト名] に 既存 Application Gateway のフロントエンド がプルダウンで表示されます。
今回の例では、2つの Applcation Gatway と、それぞれのパブリックIP が表示されていることが確認できます。
任意の Application Gatway を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/03e35e2f-ca2a-bacc-8bbb-316094eb0fbb.png)


Application Gatway を選択すると、[ホスト名] だけでなく [配信元のホストヘッダー] にも、[ホスト名] と同様の値がセットされます。
また、[証明書のサブジェクト名の検証] にもチェックが入っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/8ab9eb7c-9ab7-846d-9448-b219f615554b.png)

これで保存や適用を行って構成完了・・・。
AFD + AppGW の構成が無事にできました・・・？
めでたしめでたし・・・？
いえ、これは、ミスっています。
Application Gateway を IPアドレスで指定した状態です。

## [証明書のサブジェクト名の検証] のエラー : SSLHandshakeError が記録される
Azure Front Door に接続を試すと以下のようなエラー画面が出ました。
Azure Front Door のバックエンドとして Application Gateway を IPアドレスで指定した状態では、上手くいきません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/4d76e679-ece1-8ecd-b687-2f1a90002ac9.png)

Azure Front Door のログ を確認してみます。
Azure Front Door -> 監視 -> 診断設定 より、LogAnalytics ワークスペースへログを収集するように構成しておけば、 AzureDiagnostics テーブルにログが保存されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/6256e678-a1de-913b-9eb6-70a2f524dc9a.png)

ログには、SSLHandshakeError が記録されています。
また、バックエンドに対しては、IPアドレス (https:// < AppGW IP > /)でアクセスしようとしていることもわかります。

> [Azure Front Door でのメトリックとログの監視 | アクセス ログ](https://learn.microsoft.com/ja-jp/azure/frontdoor/front-door-diagnostics?pivots=front-door-standard-premium#access-log )
> SSLHandshakeError: SSL ハンドシェイクの失敗が原因で、Azure Front Door で配信元との接続を確立できませんでした。


このエラーは、[公開ドキュメント](https://learn.microsoft.com/ja-jp/azure/frontdoor/troubleshoot-issues#troubleshooting-steps-1 ) にも記載がありますが、
 - バックエンドプールを IP アドレスで指定している
 - 証明書のサブジェクト名の検証 を有効化している

上記２つを満たす構成となってしまっているために、発生しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/a53ae2e5-f47f-06cc-9bc9-8aecdbf1729d.png)

## Application Gateway を FQDN で指定するように修正する
対処としては、バックエンドプールを FQDN で指定するか、証明書の検証を無効化するかということになります。
基本的には、証明書の検証は有効化したいというシナリオが多いかと思いますので、バックエンドを FQDN で指定するように修正します。

[ホスト名] を Application Gateway の FQDN へ更新してみます。
[配信元のホストヘッダー] も空欄とし、HTTP ホストヘッダー の上書きについても [公開ドキュメント](https://learn.microsoft.com/ja-jp/azure/architecture/best-practices/host-name-preservation#reverse-proxy-configuration ) に沿って、上書きをしない構成としておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/1845b3a8-fa95-b545-fb52-30969fd1008a.png)


以下のような構成となっています。
　Azure Front Door のカスタムドメインとして、　www.contoso.com を設定する。
　Application Gateway のカスタムドメインとして、appgw.contoso.com を設定する。
　Azure Front Door のバックエンドには、Application Gateway の FQDN ( appgw.contoso.com ) を指定する。

さらに、 Application Gateway のバックエンドとしては AppService を用意しました。
　Application Gateway のバックエンドとして、既定のドメイン (例: https\://contoso.azurewebsites.net/) を使用し、指定しています。
　カスタムドメインとして、　www.contoso.com も付与し、Azure Front Door のカスタムドメインと一致するようにしてあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/51613420-a523-77b2-9851-9bc8bb475416.png)


無事にアクセスが出来ました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/08208976-dc16-fa61-8cd7-b19f7cf1eec7.png)

# まとめ
TLS/SSL 証明書の検証を有効化する場合、Azure Front Door のバックエンドは FQDN で指定する必要があります。
Application Gateway も FQDN で指定しましょう。

Azure Front Door + Application Gateway + KeyVault の記事を書きましたので、
続けて、End-to-End で暗号化する場合に少しハマるかもしれない箇所も記事にしておこうと思った次第。

何かのお役に立てば。



# 参考

https://qiita.com/ueda_it/items/920627490cb12d3da17d

https://learn.microsoft.com/ja-jp/azure/frontdoor/troubleshoot-issues#troubleshooting-steps-1 

https://learn.microsoft.com/ja-jp/azure/frontdoor/front-door-diagnostics?pivots=front-door-standard-premium#access-log