これは Azure Key Vault 向けに ACME を使い SSL/TLS 証明書の発行と更新を自動化するためのアプリケーションです。証明書は Azure Key Vault に格納されます。Azure App Service, Application Gateway , CDN などの多くの Azure サービスで Key Vault から直接証明書をインポート可能です。
以下のような課題を解決するために開始しました。
- Key Vault を利用して安全に証明書を格納する
- 数多くの証明書を 1 つの Key Vault を使って集中管理
- 簡単にデプロイと設定が完了する
- 信頼性の高い実装
- モニタリングを容易に (Application Insights, Webhook)
Key Vault を使うことで ACME を使った証明書の安全かつ集中管理が行えます。
Key Vault Acmebot v3 は 2019 年 12 月 31 日にリリースされました。これより前にデプロイしているユーザーは、以下の手順に従って v3 にアップグレードすることをお勧めします。
2020 年 8 月の時点で、Azure CDN / Front Door は新しい Key Vault 証明書を自動的にデプロイしません。自動的に新しいバージョンの証明書をデプロイするための補助アプリケーションを公開しています。
https://github.com/shibayan/keyvault-certificate-rotation
- 全ての Azure App Service (Web Apps / Functions / Containers, OS に依存しない)
- Azure CDN と Front Door
- Azure Application Gateway v2
- SANs (サブジェクト代替名) を持つ証明書の発行 (1 つの証明書で複数ドメインに対応)
- Zone Apex ドメイン向け証明書とワイルドカード証明書の発行
- 証明書の自動的な更新
- ACME と互換性のある証明書発行機関への対応
利用するためには以下のものが必要です。
- Azure サブスクリプション (このアプリケーションのデプロイに必要)
- Azure Key Vault (作成済み、もしくは Key Vault はデプロイ時に作成が可能)
- DNS プロバイダー (公開 DNS ゾーンにあるホスト)
- Azure DNS
- Cloudflare
- Google Cloud DNS
- GratisDNS
- TransIP DNS
- DNS Made Easy
- E メールアドレス (ACME の利用登録に必要)
Function App のアプリケーション設定から以下の項目を更新します。
- Acmebot:VaultBaseUrl
- Azure Key Vault の DNS 名 (既に存在する Key Vault を使う場合)
- Acmebot:Webhook
- Webhook 送信先の URL (オプション, Slack と Microsoft Teams を推奨)
このアプリケーションの一部としてデプロイされている Function App で認証を有効にする必要があります。
Azure Portal にて 認証/承認
メニューを開き、App Service 認証を有効化します。「要求が認証されない場合に実行するアクション」として Azure Active Directory でのログイン
を選択します。認証プロバイダーとして Azure Active Directory を利用することを推奨していますが、他のプロバイダーでもサポート外ですが動作します。
認証プロバイダーとして Azure Active Directory を選択し、管理モードとして 簡易
を選択し「OK」を選択します。
最後にこれまでの設定を保存して、App Service 認証の有効化が完了します。
対象の DNS ゾーンもしくは DNS ゾーンが含まれているリソースグループの アクセス制御 (IAM)
を開き、デプロイしたアプリケーションに対して DNS Zone Contributor
のロールを割り当てます。
Azure DNS 以外の DNS プロバイダーを利用する際には、以下のページを参考に設定を行ってください。
https://github.com/shibayan/keyvault-acmebot/wiki/DNS-Provider-Configuration
Key Vault のアクセスポリシーを開き、デプロイしたアプリケーションに対して Certificate management
アクセスポリシーを追加します。
ブラウザで https://YOUR-FUNCTIONS.azurewebsites.net/add-certificate
へアクセスして、Azure Active Directory で認証すると Web UI が表示されます。その画面から対象のドメインを選択し、必要なサブドメインを追加して実行すると、数十秒後に証明書の発行が完了します。
アクセス制御 (IAM)
の設定が正しくない場合には、ドロップダウンリストには何も表示されません。
存在する全ての ACME で発行された証明書は有効期限の 30 日前に自動的に更新されます。
Azure Portal から TLS/SSL の設定
を開き、「秘密キー証明書 (.pfx)」から「Key Vault 証明書のインポート」ボタンを選択すると、Key Vault 証明書から App Service へインポートが行えます。
インポート後は、App Service によって自動的に証明書の更新がチェックされます。
発行された証明書を Key Vault からダウンロードすることで、Azure もしくは Azure 以外で利用できます。
- ACMESharp Core 作者 @ebekker
- Durable Functions 作者 @cgillum とコントリビューター
- DnsClient.NET 作者 @MichaCo
このプロジェクトは Apache License 2.0 の下でライセンスされています。