Azure App Service を Azure Key Vault 上 の証明書で HTTPS 化するための知識地図
はじめに
Azure App Service はコードを配置するだけで Web アプリケーションを展開できる人気の PaaS です。この App Service は既定の状態では、xxx.azurewebsites.net という App Service の既定のドメインでホストされます。
ただ使えればいい、というだけであれば既定のドメインで HTTPS を強制してしまえば、それで終わりです。しかし、基本的には組織のドメインを使ってアプリケーションを公開するはずです。「社内から、社外から問わずカスタム ドメインを使ってアプリを公開し、HTTPS で接続させたい」という要件を Azure 上で実現します。
MSLearn に必要な情報は基本的に記載されているのですが、複数のシナリオが同じページに記載されていたり、必要な情報が複数ページに分断されていたりするので、本記事では全体的な知識地図としてまとめておきます。
設定の流れ
カスタム ドメインの取得
前提としてカスタム ドメインは必須となります。Azure 上では、App Service ドメイン[1] というサービスから取得することも可能です。自分が保有しているドメインがあることが前提です。
証明書の取得と Azure Key Vault へのインポート
ドメインを取得したら、対応する証明書を取得しましょう。証明書の管理は Azure での一貫性を考えて Azure Key Vault を使用します。DigiCert での証明書の取得の仕方および、Azure Key Vault へのインポートに関しては以下の記事にまとめています。
Azure App Service へのカスタムドメイン設定
(App Service ドメインを使っていないケースが多いと思うので) カスタム ドメインは使いたい FQDN を直接入力します。A レコードまたは CNAME レコードによってドメインの検証を行います。
こちらのドキュメントの「カスタム ドメイン構成」~「ドメインの検証」まで行いましょう。
カスタム ドメインと証明書のバインド
カスタムドメインに対して証明書をバインド[2] していきます。本構成では、証明書のストアとして Azure Key Vault を使用するため、証明書の連携に少し追加設定が必要です。何も設定していない状態でバインドしようとしても権限不足でエラーが発生するはずです。
ここでは、Microsoft App Service というサービス ID(プリンシパル ID としては abfa0a7c-a6b6-4736-8310-5855508787cd) に対して、Azure Key Vault に対する Key Vault Certificate User 権限を付与します。
うまく ID が見つからない場合は、Azure Cloud Shell から以下のようなコマンドを実行しても同じことができます。
az role assignment create --role "Key Vault Certificate User" --assignee "abfa0a7c-a6b6-4736-8310-5855508787cd" --scope "/subscriptions/{subscriptionid}/resourcegroups/{resource-group-name}/providers/Microsoft.KeyVault/vaults/{key-vault-name}"
その後、対象の Key Vault リソースを選択して証明書をインポートします。
以下ドキュメントの、「Key Vault から証明書をインポートする」を実行しています。
カスタム ドメイン解決用 A レコードの追加
App Service がカスタム ドメインへの要求に応答できるように、DNS ゾーンに A レコードを追加します。カスタムドメインを払い出したタイミングで、App Service 側から特定のパブリック IP も払い出されるため、外部権威 DNS サーバでレコードを追加しましょう。
App Service ドメインを使っている場合には、同時に作成される Azure Public DNS Zone に追加すれば OK です。
Windows の場合は、Resolve-DnsName[3] コマンド等により適切に名前解決ができていることを確認しましょう。
疎通確認
カスタム ドメインに対してブラウザからアクセスを試みます。ブラウザから https でアクセスし、適切な証明書が返ってくることを確認します。

おわりに
App Service で HTTPS を構成するための流れをまとめました。Private DNS Zone でカスタム ドメインを App Service の Private Endpoint の プライベート IP に解決すれば、内部公開アプリでも HTTPS 化できます。App Service では、ホスト名が必要となるため、カスタム ドメインとの整合を取ることを意識しながら作業するとよいでしょう。
Discussion