Skip to content

Latest commit

 

History

History
144 lines (86 loc) · 8.63 KB

README_ja.md

File metadata and controls

144 lines (86 loc) · 8.63 KB

App Service Acmebot

Build Release License

これは Azure App Service 向けに Let's Encrypt 証明書の発行と更新を自動化するためのアプリケーションです。以下のような課題を解決するために開始しました。

  • 複数の App Service への対応
  • 簡単にデプロイと設定が完了する
  • 信頼性の高い実装
  • モニタリングを容易に (Application Insights, Webhook)

一つのアプリケーションで複数の App Service 証明書の管理が行えます。

お知らせ

Acmebot v3 へのアップグレード

shibayan#138

Key Vault との統合

証明書を様々なサービスで利用する必要がある場合は、Key Vault 版の Acmebot v3 の利用を検討してください。

https://github.com/shibayan/keyvault-acmebot

Key Vault 版は App Service / Application Gateway / CDN / Front Door といった Key Vault 証明書に対応したサービスで利用することが出来ます。

目次

対応している機能

  • Azure Web Apps と Azure Functions (Windows)
  • Azure Web Apps (Linux) / Web App for Containers (Windows と Linux, Azure DNS が必要)
  • Azure App Service Environment (Windows と Linux)
  • デプロイスロットへの証明書の発行
  • Zone Apex ドメイン向けの証明書の発行
  • SANs (サブジェクト代替名) を持つ証明書の発行 (1 つの証明書で複数ドメインに対応)
  • ワイルドカード証明書 (Azure DNS が必要)
  • 一つのアプリケーションで複数の App Service に対応
  • ACME と互換性のある証明書発行機関への対応

必要なもの

  • Azure サブスクリプション
  • カスタムドメインを登録済みの App Service
  • E メールアドレス (Let's Encrypt の利用登録に必要)

開始する

1. Acmebot をデプロイする

2. App Service 認証を有効化する

Azure Portal にて 認証/承認 メニューを開き、App Service 認証を有効化します。「要求が認証されない場合に実行するアクション」として Azure Active Directory でのログイン を選択します。認証プロバイダーとして Azure Active Directory を利用することを推奨していますが、他のプロバイダーでもサポート外ですが動作します。

Enable App Service Authentication with AAD

認証プロバイダーとして Azure Active Directory を選択し、管理モードとして 簡易 を選択し「OK」を選択します。

Create New Azure AD App

最後にこれまでの設定を保存して、App Service 認証の有効化が完了します。

3. 対象のリソースグループへアクセス制御 (IAM) を追加する

対象のリソースグループの アクセス制御 (IAM) を開き、デプロイしたアプリケーションに対して Web サイト共同作成者Web プラン共同作成者 のロールを割り当てます。

Assign a role

IAM settings

備考

もし対象の App Service と紐づく App Service Plan が別々のリソースグループに存在する場合、App Service が存在するリソースグループには Web サイト共同作成者 を、App Service Plan が存在するリソースグループには Web プラン共同作成者 を割り当てる必要があります。

使い方

新しく証明書を発行する

ブラウザで https://YOUR-FUNCTIONS.azurewebsites.net/add-certificate へアクセスして、Azure Active Directory で認証すると Web UI が表示されます。その画面から対象の App Service とドメインを選択して実行すると、数十秒後に証明書の発行が完了します。

Add certificate

アクセス制御 (IAM) の設定が正しくない場合には、ドロップダウンリストには何も表示されません。

ワイルドカード証明書もしくは Linux 向けの証明書を発行する

ワイルドカード証明書もしくは Linux 向けの証明書を発行するには Azure DNS が必要なため、対象の DNS ゾーンが含まれているリソースグループにて DNS ゾーンの共同作成者 のロールを割り当てます。

IAM settings

App Service on Linux や Web App for Containers 向けに証明書を発行するためには、常に Azure DNS が必要となります。

証明書の更新

アプリケーションは数日に 1 回、発行者が Let's Encrypt Authority X3 もしくは Let's Encrypt Authority X4 の証明書に対して有効期限のチェックを実行します。

デフォルトのチェックタイミングは UTC の 00:00 となります。タイムゾーンに合わせた変更が必要な場合には WEBSITE_TIME_ZONE を使ってタイムゾーンを設定してください。

新しいバージョンのデプロイ

このアプリケーションは自動的に更新されるため、常に最新バージョンを利用することが出来ます。明示的に最新バージョンをデプロイする必要がある場合は、Azure Function を再起動します。

トラブルシューティング

Causes Azure REST API error at GetSite or Dns01Precondition エラーが発生する

対象のリソースグループへのロール割り当てが間違っているか、まだ反映されていない可能性があります。IAM 設定の反映には 30 分ほどかかる可能性があります。

CheckDnsChallenge failed: _acme-challenge.{domain}.com value is not correct エラーが発生する

証明書を発行するために、Acmebot は Azure DNS で_acme-challenge の TXT DNS レコードを作成する必要があります。このエラーは TXT レコードが作成されていない場合に発生します。この原因の 1 つはドメインのネームサーバーが Azure DNS ではなく、ドメインレジストラを指している可能性があります。ドメインを Azure DNS に適切に委任していることを確認してください。Azure DNS でドメインをホストする

CheckHttpChallenge failed: http://{domain}/.well-known/acme-challenge/{challenge} is InternalServerError status code エラーが発生する

主に URL Rewrite によって発生するエラーなので、wwwroot の下に存在する web.config に inheritInChildApplications="false" の追加を試してみてください。

https://www.hanselman.com/blog/ChangingASPNETWebconfigInheritanceWhenMixingVersionsOfChildApplications.aspx

謝辞

ライセンス

このプロジェクトは Apache License 2.0 の下でライセンスされています。