Azure Container Apps がようやく Key Vault に保存されている証明書をインポートして、カスタムドメイン向けの証明書に利用できるようになったので試しました。App Service などではサポートされている機能で、ワイルドカード証明書などが必要な場合に使うことが多いです。
ドキュメントはまだ Preview になっていますが GA しているので読み替えてください。基本的な使い方は App Service の時と同じで証明書を Key Vault からインポートして、カスタムドメインに割り当てるという流れですが、最低でも System Assigned Managed Identity が必要になりますので RBAC の割り当てを行います。
App Service とは異なり Container Apps Environment が System Assigned Managed Identity を持っているので、環境毎に RBAC を割り当てる形になっているようです。こちらのがセキュアですね。
Container Apps でカスタムドメインに証明書を当てる場合には、それぞれの Container App に割り当てる方法がメインです。Azure Portal が Key Vault 証明書のインポートに対応しているので、事前の設定が終わっていればスムーズに行えるはずです。
通常のカスタムドメインの他に Container Apps には Container Apps Environment に対してカスタム DNS サフィックスを追加する機能がありますが、こちらも確認すると Key Vault 証明書に対応していました。
カスタム DNS サフィックスはワイルドカード証明書が必須なので、Key Vault で管理するのがベストです。
Container Apps が Key Vault 証明書のインポートに対応したということは、Acmebot が使いやすくなるということなので手順を検証しておきます。
特にワイルドカード証明書が必要な場合には Let's Encrypt を使うと無料で発行できるのでお得です。Key Vault に対応したので Container Apps 特化版の Acmebot はアーカイブかなという気持ちです。
Key Vault 証明書を使ってカスタムドメインを追加する
実際に Container Apps に Key Vault 証明書をインポートして動作を確認していきます。まずは Container Apps Environment で System Assigned Managed Identity を有効化します。少し時間がかかりますが、必要なステップなので完了まで待ちます。
System Assigned Managed Identity を有効化出来れば、Key Vault の RBAC で Container Apps Environment に対して Key Vault Secrets User を追加します。
これで Container Apps Environment が Key Vault に保存された証明書にアクセスできるようになります。
実際に Azure Portal からカスタムドメインを追加する際には、同時に証明書を選択する必要があるため、手順としては先に Key Vault 証明書のインポートを行う形になります。
初回は使用する Managed Identity を選べるので、今回は System Assigned を選択しておきます。必要に応じて User Assigned Managed Identity を使うのも良いと思います。
インポートが完了すると Container Apps Environment の Certificates に表示されるようになります。
ドキュメントには Key Vault 証明書は自動的にローテートされると記載されていましたが、こればかりは実際に更新されるのを待つ必要があります。ちなみに App Service に会ったような手動でローテートする機能はなさそうでしたので、ますます実際にローテートされるのかが重要になります。
ここまで完了するとカスタムドメインを設定出来るようになります。証明書のインポートが終わってしまえば、後は DNS 周りの設定をすれば追加が完了します。
次は Container Apps 固有のカスタム DNS サフィックスの追加に Key Vault 証明書を使ってみます。手順としてはカスタムドメインの時と大きくは変わりませんが、カスタム DNS サフィックス向けの証明書は Certificates には表示されないため、事前にインポートという概念がありません。
設定は以下の画面で全て行う必要があるので、個人的には戸惑いやすいなと感じました。
追加前に DNS の設定は終わらせておく必要があるのも、また戸惑いやすい点になります。DNS レコードの追加を行い、Key Vault に保存しているワイルドカード証明書を選択すると追加に成功します。
これで一通りの設定が完了したので、ブラウザからアクセスして確認します。当たり前ではありますが、問題なく Container App に割り当てたカスタムドメインと Contianer Apps Environment に割り当てたカスタム DNS サフィックスでアクセス出来ていますね。
Container Apps が多い場合にはカスタム DNS サフィックスを使いたいケースもあると思いますが、これまで Managed Certificate に対応していないこともあり試しにくかったはずです。
今回 Key Vault 証明書のインポートに対応したので Acmebot と組み合わせて格段に使いやすくなりました。