📆
AWS ACMから証明書エクスポートできるようになったのでEC2の証明書更新を再検討してみる
これまでEC2にインストールしたNginxの証明書更新は手作業で行っていましたが、最近AWS ACMの機能アップデートがされて証明書のエクスポートが可能になりました。これをきっかけに、改めてAWS EC2環境での証明書更新手段を比較検討してみます。
CloudFrontやALBでTLS終端しているのが普通と思いますが様々な事情によりEC2に証明書をインストールしていることがあります。
現在の有力候補である ACME(Let’s Encrypt 等)、ACM の証明書エクスポート、そして ACM for Nitro Enclaves の 3 パターンを調査しました。
この記事では、実際の運用現場を想定した比較表とともに共有します。
ざっくり比較表
| ACME(Let’s Encrypt/Certbot) | ACM + 証明書エクスポート | ACM for Nitro Enclaves | |
|---|---|---|---|
| 自動更新トリガー |
certbot renew を cron/systemd-timer で定期実行(毎日想定) |
ACM が有効期限 60 日前から再発行し、EventBridge → Lambda で検知 | ACM が再発行 → enclave agent がポーリング |
| 鍵の扱い | EC2 ファイルシステム上。権限制御は自分で実装 | ACM が生成。エクスポート時に一度だけ取得 | 鍵は enclave 内に隔離されホスト OS から不可視 |
| 導入コスト | 無料 | $15 or $169 | Nitro 対応インスタンス費用 |
| 運用コスト感 | 最小(EC2 内だけで完結) | Lambda・IAM 設計など構築手間。台数少ないと割高感 | インフラ前提条件が限定的 |
| 対応証明書タイプ | 主に DV。OV/EV は一部 CA のみ | ACM 公開・私有 DV(OV/EV 未対応) | 同左 |
比較してみた感想
1. 本命は ACME
- EC2 内だけで完結し、cron+Certbot フックでシンプルに自動化可能。
- 失敗時もログファイルを直接確認できるなど、オンプレ感覚で扱いやすい。
- ただし OV/EV 証明書を必要とする案件では発行 CA が限られるため事前確認が必須です。
- 末尾に「ACMEプロトコル対応の証明書発行サービス比較(国内・グローバル)」を掲載しました。
2. ACM エクスポートは“使い所を選ぶ”
- ALB や CloudFront 以外にも ACM 証明書を配れるようになった点は大きな進歩。
- ただ、EventBridge → Lambda → S3/SSM → RunCommand といった イベント駆動パイプライン が必要で、対象 EC2 が少数だと構築・保守コストの割に合わないことも。
- Lambda 共通サービス化 までやればメリットが出る可能性はあります。
3. Nitro Enclaves はユースケースが限定的
Nitro Enclaves が想定しているユースケースは以下の通りで、ほとんどの一般的なシステムでは該当しないことが多いです。
-
機密データ処理
医療データ、金融データ、暗号鍵などを安全に処理したい場合。 -
独立したセキュア実行環境が必要な場合
ホストOSやEC2インスタンスから分離された環境で実行したいとき。 -
BYOK (Bring Your Own Key)
独自の暗号鍵をAWS KMS と組み合わせて使いたい場合。 -
Confidential Computing 要件
業界や規制で confidential computing が求められているケース。 -
サードパーティとのデータ共有
第三者にデータ処理を委託する際、データ漏洩リスクを最小化したいとき。
まとめ
- DV & 少数台運用なら ACME が最有力
- いつも証明書を買っている CA が必要な証明書の発行をACMEプロトコルに対応していたら最高
- 大規模 or AWS ネイティブ統合を重視する場合は ACM エクスポート
- Nitroのユースケースにシステムがマッチするなら Nitro Enclaves を採用
ACMEが一番よさそうだし、システム要件をACMEに向けて変えていくのが良いかなぁという感想。
参考情報
ACMEプロトコル対応の証明書発行サービス比較(国内・グローバル)
ACMEプロトコルに対応した証明書発行サービスを国内・グローバルそれぞれで調査し、対応する署名書タイプ(DV/OV/EV)をまとめました。
-
DV証明書:すべてのサービスでACME対応可能。
特にLet’s Encryptは無料かつ運用容易。 -
OV/EV証明書:国内ではemSign・Sectigo、グローバルではDigiCertがACMEに幅広く対応しているため、用途に応じて選択。
国内(日本国内・APAC)
| サービス名 | DV対応 | OV対応 | EV対応 | 備考 |
|---|---|---|---|---|
| GlobalSign | ◯ | ◯ | – | Atlas経由・SLA対応。 |
| emSign | ◯ | ◯ | ◯ | 国内法人向けに全タイプ対応。 |
| Sectigo | ◯ | ◯ | ◯ | 企業向けマネジメントに強み。 |
グローバル
| サービス名 | DV対応 | OV対応 | EV対応 | 備考 |
|---|---|---|---|---|
| Let’s Encrypt | ◯ | × | × | 無料で自動化に最適。 |
| DigiCert | ◯ | ◯ | ◯ | CertCentral経由でACME対応。 |
| GlobalSign | ◯ | ◯ | – | 国内同様、Atlas経由で対応。 |
参考リンク
自動更新フローを 1 段階深掘り
運用中に想定される作業やトラブル対応まで踏まえた上で、それぞれのフローを細かく見ていきます。
| 観点 | ACME(Certbot) | ACM + エクスポート | ACM for Nitro Enclaves |
|---|---|---|---|
| 更新トリガー | cron/systemd-timer が certbot renew を 1–2 回/日実行 |
ACM が自動再発行 → EventBridge ルールが ACM CertificateRenewed を受信 |
ACM が自動再発行 → enclave agent がポーリング |
| 新証明書の検知 |
--deploy-hook で「更新あり」を判定し Nginx に通知 |
EventBridge → Lambda (ExportCertificate API) → S3 or SSM | enclave agent が新 PEM を取り込み、サービスが通知 |
| Nginx 反映 |
systemctl reload nginx 等で即時リロード |
Lambda → SSM Run Command で nginx -s reload
|
aws-nitro-enclaves-acm サービスが conf & PEM を更新後、自動リロード |
| 失敗検知 | cron のログ/監視ツール | ACM Health Dashboard & EventBridge エラー通知 |
journalctl -u nitro-enclaves-acm.service で監視 |
| 特有の課題 | HTTP-01 検証失敗・DNS 変更で失効リスク | Lambda/SSM の権限設計とメンテ負荷 | Nitro 対応インスタンス必須/ユースケース限定 |
Discussion