Twitter で世界のやまさが Azure Front Door を試していて、Key Vault 向けにも Let's Encrypt の証明書を自動でいい感じに出来れば良いみたいなオーラを感じ取ったので、前に作った App Service 向けのものからコピペで新しく Key Vault 向けを作ってみました。
鍵は Key Vault に保存されているので安全です。てか公式で欲しい Integration でした。
ちなみに Key Vault は単に証明書をストアする機能だけではなく、新しく CSR を作成したり、その後認証局で署名して貰った証明書をマージする機能もあるので、実装自体は非常に簡単でした。
統合された CA の場合は簡単なんですが Let's Encrypt は対応していないので、例によって Managed Service Identity を有効にした Azure Functions で処理させることになります。
Key Vault に証明書を格納すると、他の Azure サービスから簡単に扱えるようになるので便利です。Key Vault 内の証明書はバージョニングされているので、更新するといい感じに新しいものが使われていきます。
今のところは Front Door / Application Gateway v2 / App Service が Key Vault に対応しています。
App Service に関しては Key Vault がまだ存在しない時期からのサービスなので、統合がちょっと弱いです。
とりあえず簡単に使い方を書いておきます。デプロイすると少なめの Functions が表示されるはずです。
App Settings に今回 Key Vault の URL が必要になっているので、LetsEncrypt:VaultBaseUrl
というキー名で Key Vault のアドレスを設定しておきます。
例によって ARM Template を使ってデプロイすると、自動的に Managed Service Identity が有効化されるので、それに対してアクセス権を設定していきます。DNS-01 を使っているので Azure DNS への IAM 設定と、Key Vault の Access policy の設定が必要です。
Access policy は Certificates に対して List / Get / Create / Update が出来れば良いはずです。
ここまでの設定で証明書の発行が行えるようになっているので、適当な設定済みドメインを使って AddCertificate_HttpStart
を叩けば証明書の発行処理が走ります。
今のところ Key Vault が RSA にしか対応していないので、デフォルトでは RSA 2048bit な証明書となります。App Service の方は単純にするために ECC 256bit 固定にしていました。
今回は最初から SAN 証明書に対応しています。コピペで作ったので当然ですね。
証明書の自動更新にも対応しているので、App Service 版と同様に 30 日前になると更新が行われます。
複数の App Service に同じ証明書を当てる場合には、通常ならそれぞれのリージョンの Service Plan 向けに PFX をアップロードする必要がありますが、Key Vault を使うと 1 箇所から読み込んでくれるので便利です。