現状と制限

ACME Conductor はまだ v0.x の早期段階のプロジェクトです. このページは,何が実装済みで,実デプロイで何を確認し何をまだ確認して いないか,主な制限と非目標,設計判断の記録,参加・問い合わせの方法を できるだけ率直にまとめたものです.導入を検討する際は,このページと 脅威モデル を合わせて確認してください.

実装済みの機能

Runner と Certificate Store

固定バージョンの lego CLI を同梱したワンショットの Runner と,開発・テスト用のファイルシステム Store.

Conductor(レジストリ,REST API,スケジューラ)

SQLite のレジストリ,REST API,スケジューラ,ローカルプロセスランチャー,ローカルホスト限定の開発用認証.

Azure Key Vault store(PEM / PKCS #12)

マネージド ID(開発では DefaultAzureCredential)で認証する Key Vault store アダプタ.バインディングごとにパスワードなし PKCS #12 での取り込みも選べます.

Azure Container Apps Job ランチャーと署名付きエンベロープ

Runner が自身のマネージド ID で動くスケジュール実行の Job として,Conductor が共有ボリュームに差し出すジョブを受け取ります.Conductor は実行を開始できません.分離された ID と最小権限のカスタムロール.署名付き・期限付きのジョブエンベロープと Runner 側のリプレイ台帳,署名付き Result.

認証(OIDC,localhost-dev)と GUI

名前付きプリンシパルと admin/viewer ロールによる OIDC ベアラートークン認証,PKCE サインインを備えた最小限の静的 GUI.Container Apps デプロイでは API と GUI が HTTPS ingress で応答します.

リリースパイプライン

両イメージをダイジェスト固定のベースから SBOM と provenance 付きで GHCR に公開するリリースワークフロー.

出典: docs/architecture.md「実装済みの機能」.

実デプロイで確認済み / 未確認

2026-09-25 に v0.6.0 のイメージで staging デプロイを行い,staging CA で 1 つの target の発行が端から端まで通ることを確認しました.CI はサブスクリプション へのデプロイを行わないため,実インフラでの検証はこの 1 回の手作業のデプロイに 基づいています.

確認済み

  • 毎分の実行開始と実行名の照会(CONTAINER_APP_JOB_EXECUTION_NAME)
  • 共有上のディレクトリのリネームによるジョブの受け渡し(1 実行が取る場合)
  • ロールのアクション名(Conductor は実行状態を読み,Runner は DNS TXT 書き込みと Key Vault 取り込みができる)
  • lego の azuredns プロバイダが Container Apps の ID エンドポイントでマネージド ID 認証できること
  • Azure Files(SMB,nobrl)上での SQLite の動作と,既定の resultGraceSeconds(30 秒)内での Result 到達
  • API と GUI が HTTPS ingress で応答すること
  • 1 target 分の Runner 設定がシークレットのサイズ上限に収まること

未確認(想定に基づく)

  • 2 つの実行が同じジョブを同時に取り合ったときの SMB 上のリネームの原子性
  • Microsoft.App/jobs/stop/execution/action による実行の停止
  • SMB 上の flock(所有権ロック)の信頼性.リビジョン更新時に一時的に 2 レプリカが重なりうる
  • Result 伝播遅延の幅(SMB キャッシュにより resultGraceSeconds の調整が必要な場合がある)
  • ピア暗号化(peerTrafficConfiguration.encryption.enabled)が ingress からレプリカへのホップを実際に暗号化していること
  • 多数のバインディングを持つ大きな Runner 設定がプラットフォームのシークレット値上限を超えないこと

出典: deploy/azure/README.md「実デプロイで確認したことと,まだ確認していないこと」.新しい環境へのデプロイは,ステージング CA と 1 target から始め,最初から最後まで見守ることが推奨されています.

主な制限

Conductor 側

Runner 側

Runner の renewBeforeDays/keyType というコストの レバーは,Runner 側ではまだ制限されていません(脅威モデルの残存リスク). JobSpec で名前について認可された生成者は,再発行を強制したり高価な鍵種別を 強制したりできますが,これはすでに認可されたスコープ内でのコスト・ レート制限のレバーであって権限昇格ではありません.

非目標

次の項目は,今後 ADR が別途定めるまで明示的に対象外です.理由の多くは 「MVP のスコープを絞る」「境界の外側(すでにある実装)に任せる」ことに あります.

出典: docs/architecture.md「非目標」.

設計判断の記録

アーキテクチャ上重要な決定は,MADR 風の軽量な形式で ADR (Architecture Decision Record)として記録されています.

ADR題名
0001アーキテクチャ決定を記録する
00022 つのバイナリを持つ Go モノレポ
0003Runner で lego CLI をサブプロセスとして使う
0004バージョン付きの JobSpec/Result コントラクト
0005Conductor は決してシークレットに触れない
0006v1alpha1 では ASCII のみの FQDN
0007コンテナの基本方針
0008MVP では purge しない
0009Runner の実行モデル
0010lego バイナリのバージョン固定
0011Conductor のストレージと run モデル
0012ローカルホスト限定の開発用認証
0013Azure Key Vault の store アダプタ
0014Azure Container Apps Job ランチャー
0015署名付きジョブエンベロープと Result エンベロープとリプレイ台帳
0016OIDC ベアラートークン認証と 2 つのロールと静的 GUI
0017リリースパイプライン: SBOM と provenance 付きの GHCR イメージとダイジェスト固定のベース
0018監査プリンシパルは権威(issuer,localhost-dev,scheduler)で修飾する
0019プロバイダ境界: 公開コントラクト,合成層のレジストリ,単一モジュール,deploy/azure は残す
0020既存環境(IaC の一覧)からの移行: 一覧の取り込み,shadow 比較,target-source フラグ(ADR 0025 で廃止)
0021Key Vault store のコンテンツタイプ: パスワードなし PKCS #12 での取り込みを選べるようにする

一覧の出典: docs/adr/README.md.背景と併せて docs/architecture.md と docs/threat-model.md も参照してください.

残存リスク(要約)

脅威モデルは,未解決のまま残るリスクを明示しています.おもなものだけを 挙げます(詳細は脅威モデル「残存リスクと未対策事項」を参照):

参加・問い合わせ

コントリビューション

1 PR = 1 目的.PR を開く前に make verify(gofmt と句読点の検査, go vet,go test,go test -race),make vulncheck, make images を実行します.日本語の句読点は「,」「.」に統一し, GUI にインラインスクリプトやサードパーティ資産を置かず,Conductor のコアに クラウド SDK を入れないといった規則があります.詳しくは CONTRIBUTING.md を参照してください.

セキュリティ報告

脆弱性が疑われる場合は,公開の issue や議論チャンネルではなく, リポジトリの GitHub プライベート脆弱性報告(Security タブ → Report a vulnerability)を使います.専任のセキュリティチームや 正式な SLA は持たない早期段階のプロジェクトのため,対応はベストエフォートです. v1 リリースが存在するまでは main ブランチのみが セキュリティ修正の対象です.詳しくは SECURITY.md を参照してください.

ライセンス

Apache License 2.0 で公開されています.