- セクティゴ・コモドSSLトップ
- > サポート
サポート
◆ こちらからサポート記事を検索いただけます
注文・設定方法など (CaaS関連)
Azure DNS、Certbot、Key Vault、および Application Gateway (AGW) を組み合わせた証明書自動更新・デプロイの構成
Azure DNS、Certbot、Key Vault、および Application Gateway (AGW) を組み合わせた証明書自動更新・デプロイの構成は、セキュリティと運用の自動化において非常に強力なパターンです。
このプロセスを自動化するための全体像と、具体的な実装コード一式を以下にまとめました。
1. 自動化のアーキテクチャ このフローでは、Certbot が DNS-01 チャレンジを使用して証明書を取得し、それを PFX 形式に変換して Key Vault に格納します。AGW は Key Vault の証明書を常時監視(ポーリング)しているため、Key Vault 側が更新されれば AGW 側も自動で最新化されます。
FROM certbot/certbot:v2.8.0
# 必要なプラグインと Azure CLI をインストール
RUN pip install --no-cache-dir \
certbot-dns-azure \
azure-cli
# 作業ディレクトリの設定
WORKDIR /scripts
# 実行スクリプトをコピー(後述)
COPY deploy-cert.sh .
RUN chmod +x deploy-cert.sh
ENTRYPOINT ["/bin/sh", "deploy-cert.sh"]
#!/bin/bash
set -e
# 変数設定 (環境変数として渡すことを推奨)
# EMAIL, DOMAIN, KEY_VAULT_NAME, CERT_NAME, AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET
# 1. Certbot で証明書取得(Sectigo ACME DNS-01を使います)
certbot certonly \
--server "https://acme.sectigo.com/v2/OV" \
--eab-kid "$SECTIGO_ACCOUNT_ID" \
--eab-hmac-key "$SECTIGO_EAB_KEY" \
--authenticator dns-azure \
--dns-azure-config /etc/letsencrypt/dnsazure.ini \
-d "$DOMAIN" \
--email "$EMAIL" \
--agree-tos \
--non-interactive
# 2. AGW/Key Vault用にPFX 形式へ変換
# パスワードは空でも可能ですが、セキュリティ上設定を推奨
openssl pkcs12 -export \
-out "/etc/letsencrypt/live/$DOMAIN/cert.pfx" \
-inkey "/etc/letsencrypt/live/$DOMAIN/privkey.pem" \
-in "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" \
-passout pass:
# 3. Azure ログイン (サービスプリンシパル使用)
az login --service-principal -u "$AZURE_CLIENT_ID" -p "$AZURE_CLIENT_SECRET" --tenant
"$AZURE_TENANT_ID"
# 4. Key Vault へインポート
# 同名の証明書がある場合は新しいバージョンとして保存される
az keyvault certificate import \
--vault-name "$KEY_VAULT_NAME" \
-n "$CERT_NAME" \
-f "/etc/letsencrypt/live/$DOMAIN/cert.pfx"
注意: /etc/letsencrypt/dnsazure.ini には Azure DNS を操作するための認証情報を記載しておく必要があります。
AGW が Key Vault から証明書を参照するための設定です。ポイントは sslCertificates セクションで、Key Vault の Secret ID(バージョンなし)を指定することです。これにより、自動更新が有効になります。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"keyVaultSecretId": { "type": "string", "metadata": { "description": "Key Vault のシークレット ID (例: https://myvault.vault.azure.net/secrets/mycert)" } },
"userAssignedIdentityId": { "type": "string", "metadata": { "description": "AGW に紐付けるマネージド ID のリソース ID" } }
},
"resources": [
{
"type": "Microsoft.Network/applicationGateways",
"apiVersion": "2023-09-01",
"name": "myAppGateway",
"location": "[resourceGroup().location]",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"[parameters("userAssignedIdentityId")]": {}
}
},
"properties": {
"sslCertificates": [
{
"name": "le-cert",
"properties": {
"keyVaultSecretId": "[parameters("keyVaultSecretId")]"
}
}
],
"httpListeners": [
{
"name": "httpsListener",
"properties": {
"protocol": "Https",
"sslCertificate": { "id": "
[concat(resourceId("Microsoft.Network/applicationGateways", "myAppGateway"), "/sslCertificates/le-cert")]" }
// その他、FrontendIP 等の設定が必要
}
}
]
}
}
]
}
実行環境: このコンテナを Azure Container Instances (ACI) で定期実行(Azure Logic Apps や GitHub Actions 等からトリガー)させるのが最も効率的です。
この構成で、証明書の期限切れを気にすることのない完全自動運用が可能です。
※SectigoのACME連携では、EAB (External Account Binding) を利用します。
| Container (Certbot): | ACMEクライアントとしてSectigoと通信。Azure DNSでTXTレコードを操作してドメイン検証(DNS-01)を行う |
| Azure Key Vault: | 発行された証明書(PFX形式)を保管 |
| Application Gateway: | Key Vaultから証明書を参照(Managed Identityを利用) |
このプロセスを自動化するための全体像と、具体的な実装コード一式を以下にまとめました。
1. 自動化のアーキテクチャ このフローでは、Certbot が DNS-01 チャレンジを使用して証明書を取得し、それを PFX 形式に変換して Key Vault に格納します。AGW は Key Vault の証明書を常時監視(ポーリング)しているため、Key Vault 側が更新されれば AGW 側も自動で最新化されます。
※事前準備
| Azure DNS ゾーン: | ドメインの権限委譲が完了していること。 |
| マネージド ID: | AGW が Key Vault から証明書を読み取るための権限が必要です。 |
2.Dockerfile サンプル
Certbot と Azure DNS 用のプラグイン、および Azure CLI を含めたイメージを作成します。Dockerfile
# Certbot 公式イメージをベースにするFROM certbot/certbot:v2.8.0
# 必要なプラグインと Azure CLI をインストール
RUN pip install --no-cache-dir \
certbot-dns-azure \
azure-cli
# 作業ディレクトリの設定
WORKDIR /scripts
# 実行スクリプトをコピー(後述)
COPY deploy-cert.sh .
RUN chmod +x deploy-cert.sh
ENTRYPOINT ["/bin/sh", "deploy-cert.sh"]
3.Azure CLI 自動化スクリプト (deploy-cert.sh)
このスクリプトはコンテナ内で実行され、「証明書取得 → PFX変換 → Key Vaultへのアップロード」を一気に行います。Bash
#!/bin/bash
set -e
# 変数設定 (環境変数として渡すことを推奨)
# EMAIL, DOMAIN, KEY_VAULT_NAME, CERT_NAME, AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET
# 1. Certbot で証明書取得(Sectigo ACME DNS-01を使います)
certbot certonly \
--server "https://acme.sectigo.com/v2/OV" \
--eab-kid "$SECTIGO_ACCOUNT_ID" \
--eab-hmac-key "$SECTIGO_EAB_KEY" \
--authenticator dns-azure \
--dns-azure-config /etc/letsencrypt/dnsazure.ini \
-d "$DOMAIN" \
--email "$EMAIL" \
--agree-tos \
--non-interactive
# 2. AGW/Key Vault用にPFX 形式へ変換
# パスワードは空でも可能ですが、セキュリティ上設定を推奨
openssl pkcs12 -export \
-out "/etc/letsencrypt/live/$DOMAIN/cert.pfx" \
-inkey "/etc/letsencrypt/live/$DOMAIN/privkey.pem" \
-in "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" \
-passout pass:
# 3. Azure ログイン (サービスプリンシパル使用)
az login --service-principal -u "$AZURE_CLIENT_ID" -p "$AZURE_CLIENT_SECRET" --tenant
"$AZURE_TENANT_ID"
# 4. Key Vault へインポート
# 同名の証明書がある場合は新しいバージョンとして保存される
az keyvault certificate import \
--vault-name "$KEY_VAULT_NAME" \
-n "$CERT_NAME" \
-f "/etc/letsencrypt/live/$DOMAIN/cert.pfx"
注意: /etc/letsencrypt/dnsazure.ini には Azure DNS を操作するための認証情報を記載しておく必要があります。
4. ARM テンプレート (JSON)
AGW が Key Vault から証明書を参照するための設定です。ポイントは sslCertificates セクションで、Key Vault の Secret ID(バージョンなし)を指定することです。これにより、自動更新が有効になります。
JSON
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"keyVaultSecretId": { "type": "string", "metadata": { "description": "Key Vault のシークレット ID (例: https://myvault.vault.azure.net/secrets/mycert)" } },
"userAssignedIdentityId": { "type": "string", "metadata": { "description": "AGW に紐付けるマネージド ID のリソース ID" } }
},
"resources": [
{
"type": "Microsoft.Network/applicationGateways",
"apiVersion": "2023-09-01",
"name": "myAppGateway",
"location": "[resourceGroup().location]",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"[parameters("userAssignedIdentityId")]": {}
}
},
"properties": {
"sslCertificates": [
{
"name": "le-cert",
"properties": {
"keyVaultSecretId": "[parameters("keyVaultSecretId")]"
}
}
],
"httpListeners": [
{
"name": "httpsListener",
"properties": {
"protocol": "Https",
"sslCertificate": { "id": "
[concat(resourceId("Microsoft.Network/applicationGateways", "myAppGateway"), "/sslCertificates/le-cert")]" }
// その他、FrontendIP 等の設定が必要
}
}
]
}
}
]
}
5.運用のポイント
AGW の自動更新: AGW は 4 時間ごとに Key Vault を確認し、新しいバージョンがあれば自動で展開します。実行環境: このコンテナを Azure Container Instances (ACI) で定期実行(Azure Logic Apps や GitHub Actions 等からトリガー)させるのが最も効率的です。
この構成で、証明書の期限切れを気にすることのない完全自動運用が可能です。
| 項目 | 必要な権限の詳細 |
| Certbot 用サービスプリンシパル: | DNS Zone Contributor |
| AGW のマネージド ID: | Key Vault の Certificate User (または Secret の Get) |
マニュアル
- CSRの生成方法
- 証明書のインストール
- ドメイン認証用サイトシールの設置
- ドメイン認証用セキュアサイトシール
(2012/11/1以降のご注文より) - 企業認証&EV用サイトシールの設置
- コード証明書関連(codesign)
- セキュアEMAIL関連(smime)
- CaaS 自動化関連(ACME)
- IISサーバのみに起因する問題と解消のコツ
- 企業認証/EV認証の電話認証(コールバック)
- Windowsサーバーにおいて不完全な証明書チェーンとなる場合の解消法
- セクティゴの中間証明書及びルート証明書について
- ルート証明書 中間証明書について
- セクティゴサイトシール(trustlogo)のインスト―ル
- 中間CA証明書・ルート証明書について
- ドメインの所有者確認【メール方式:英文の承認メールの表示例】
各種手続きについて
- Multi-Perspective Issuance Corroboration(マルチ視点発行検証)を導入
- 「サーバ証明書」の拡張キーの使用法(EKU)フィールドに「クライアント認証」を記載することを廃止
- 古いSHA1ルート終了における対応につきまして。
- 新ドメイン認証レベルで確認させていただく内容
- オンラインDBへの電話番号確認
- DUNSの新規登録申請はオンラインで簡単
- ドメイン認証レベルで確認させていただく内容
- 企業認証レベルで確認させていただく内容
- 認証レベルに応じた確認・必要書類はなんですか
- 申請ドメインの登録状態を確認しよう :whoisチェック
- 企業情報(登録確認)にはどのような媒体がありますか?
- 無償版SSLとは
- 申請までにご準備いただく物
- お申込みから納品までの流れ
- 費用の支払方法
- お見積書発行依頼
- 請求書の発行依頼
- 更新の申請方法
- 販売パートナ・アフェリエイトパートナーになる。
- ID/パスワードを忘れたら
購入前のご質問
- Sectigo ルート証明書の移行と古いCAの無効化について
- vPRO対応AMT証明書について
- セクティゴの補償とは一体どのようなものでしょうか?
- FileMaker(ファイルメーカー)製品対応SSLについて
- 携帯電話、スマートフォン、タブレット対応状況
- 新旧ドメイン認証タイプの比較
- 携帯電話・スマートフォン対応状況(ユニファイドコミュニケーション)
- ドメイン管理状況の認証 (DCV) を実施
- ブラウザーの互換性
- マルチドメインは何個まで追加できますか
- 追加ドメインの購入はどのように申請するのでしょうか?
- IEの設定の「信頼されたルート証明期間」のなかでどのように表示されますか?
- コードサイニング証明書とはなんですか?
- ユニファイドコミュニケーションとはなんですか?
- どのようにすればSSLをテストできるでしょうか?
- コモドのSSL証明書は顧客のブラウザーで正しく動作するでしょうか?
- 補償とは一体どういう意味でしょうか?
- コモドのSSLはどのバージョンのSSLプロトコルと互換性がありますか?
- SGCとは何でしょうか?
- お申込フォームで間違った申請をしてしまいました。
- 個人でもコードサイニングが購入できますか??
- コモドのSSLはどのバージョンのSSLプロトコルと互換性がありますか?