学内のたくさんの証明書を,
秘密鍵を集めずに自動で更新する
ACME Conductor は,大学などの組織が管理する多数のホスト名について,TLS 証明書の発行と更新を ACME(Let's Encrypt など)で自動化するためのコントロールプレーンです. 「どのホスト名に,どのポリシーで,いつ証明書を出すか」を一か所で管理しつつ, 秘密鍵や DNS・Key Vault の資格情報は管理サーバに一切持たせない設計になっています.
証明書を発行したい方(UPKI の登録担当者・事務担当者)はこちら
DNS や Azure に詳しくなくても進められるよう,最初から順に説明したページを用意しています.
一覧とポリシーを一か所で
ホスト名(FQDN)の一覧,許可するドメイン,更新時期,鍵の種類を REST API と GUI で管理し,すべての操作を追記専用の監査ログに残します.
ACME の実装は lego に任せる
新しい ACME クライアントではありません.広く使われている go-acme/lego をバージョン固定で同梱し,1 回の実行ごとに 1 度だけ呼び出します.
秘密鍵は管理側を通らない
秘密鍵は使い捨ての Runner の中で生成され,Key Vault などの証明書ストアへ直接書き込まれた後,破棄されます.
全体像
システムは 2 つのプログラムに分かれています.常駐して「何をすべきか」を決める Conductor(コントロールプレーン)と,1 件の仕事ごとに起動されて実際に証明書を取りに行く Runner(データプレーン)です.両者の間を行き来するのは, 署名付きの「作業指示書(JobSpec)」と「結果報告(Result)」の 2 種類の文書だけです.
役割分担
Conductor(acme-conductor) | Runner(acme-runner) | |
|---|---|---|
| 動き方 | 常駐サービス(API・GUI・スケジューラ) | 1 件ごとに起動し,終わったら終了するジョブ |
| 秘密鍵 | 決して持たない | 1 回の実行中だけ一時領域に置き,格納後に破棄 |
| DNS / Key Vault の資格情報 | 持たない | 自分のワークロード ID で認証 |
| ACME・DNS・Store との通信 | しない | する(Runner だけ) |
| ネットワークへの公開 | 管理者向けの API と GUI | なし(待ち受けるポートを持たない) |
どんな組織に向いているか
向いている
- 学部・研究室・サービスごとに多数のホスト名があり,証明書の期限切れを仕組みで防ぎたい
- DNS-01 チャレンジで発行したい(Web サーバを外部公開していないホストも含めて)
- Azure を使っており,証明書を Key Vault に置いて Application Gateway などから参照している
- 「誰がいつどのホスト名を追加したか」を監査ログとして残したい
今のところ向いていない
- 秘密鍵を各サーバへ配布する機能が欲しい(配布 API は意図的に持ちません)
- HTTP-01 チャレンジで発行したい(DNS-01 のみ)
- AWS / GCP 上で動かしたい(設計上は見越していますが未実装)
- 国際化ドメイン名(IDN)を扱いたい
詳しくは現状と制限を参照してください.
導入までの道のり
いきなり本番の証明書を切り替える必要はありません.次の順に,小さく確かめながら進められます.
- 手元で試す — 開発用の認証(
localhost-dev)とローカルプロセスのランチャー,ファイルの証明書ストアで,1 台のマシン上に全体を動かします.ACME は Let's Encrypt の ステージング を使います.
導入ガイド: 手元で試す - Azure にデプロイする — 同梱の Bicep テンプレートで,Container Apps 上に Conductor と Runner,権限の重ならない 2 つのマネージド ID を作ります.まずはステージング CA と 1 つのホスト名から.
導入ガイド: Azure にデプロイする
守っている約束
設計全体を通して,次の原則が成り立つようにしています.それぞれがどの脅威に対応するかは安全設計で図解しています.
- Conductor は証明書の秘密鍵を保存・取得・配布しない.
- Conductor は DNS,Key Vault,長期有効なクラウド資格情報を持たない.
- Runner はワークロード ID(Azure Managed Identity など)で認証し,静的なシークレットを使わない.
- 秘密鍵は Runner の一時領域で生成され,証明書ストアに直接書き込まれた後に破棄される.
- API で指定できるのは,管理者が登録した「バインディング」の名前だけ.コマンド,イメージ,リソース ID,資格情報は指定できない.
- Runner は受け取った指示書を,自分の信頼できる設定に照らして改めて認可する.
- 自動テストが本物の ACME 認証局を呼ぶことはない.