SSLならセクティゴ・コモドのEV・企業・ドメイン認証

SSLならセクティゴ・コモドのEV・企業・ドメイン認証

サポート


こちらからサポート記事を検索いただけます

検索キーワード:

注文・設定方法など (CaaS関連)

Azure DNS、Certbot、Key Vault、および Application Gateway (AGW) を組み合わせた証明書自動更新・デプロイの構成

Azure DNS、Certbot、Key Vault、および Application Gateway (AGW) を組み合わせた証明書自動更新・デプロイの構成は、セキュリティと運用の自動化において非常に強力なパターンです。

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)

サポートトップへ

CaaSとは

注文・設定方法など

トラブルシューティング

その他