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

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

サポート


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

検索キーワード:

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

GCP (Google Cloud) でcertbot をつかってCloudDNSに設定を自動付与しCloud Load Balancingに証明書を自動設定させるための設定

TIP

Google Cloud Load Balancingは、Certbotが生成した証明書(自己管理型証明書)を直接自動更新する機能を持っていないため、証明書の更新とロードバランサへの適用を自動化するには、Certbotのフックスクリプトとgcloudコマンドを組み合わせる必要があります。

1.CertbotとGCPの認証設定

CertbotがCloud DNSとCloud Load Balancingを操作できるように、サービスアカウントを作成し、適切なIAMロールを付与します。
サービスアカウントの作成:

Bashでの実行コマンドサンプル

gcloud iam service-accounts create certbot-automation --display-name="Certbot Automation"

必要な権限の付与:
Cloud DNS dns.admin ロール
Cloud Load Balancing compute.sslCertificates.create, compute.sslCertificates.delete, compute.targetHttpsProxies.update ロール
IAMカスタムロール 最小権限の原則に従い、これらの権限のみを持つカスタムロールを作成することも推奨されます。

Bash

# Cloud DNS の権限を付与
gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
--member="serviceAccount:certbot-automation@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/dns.admin"

# Cloud Load Balancing の権限を付与
gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
--member="serviceAccount:certbot-automation@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/compute.admin" # 簡略化のため。本番環境では最小権限を推奨

サービスアカウントキーの作成: Certbotを実行するマシンにサービスアカウントキーのJSONファイルをダウンロードします。

Bash

gcloud iam service-accounts keys create ./certbot-key.json \
--iam-account="certbot-automation@YOUR_PROJECT_ID.iam.gserviceaccount.com"

このJSONファイルのパスを環境変数GOOGLE_APPLICATION_CREDENTIALSに設定してください。

2.Certbotコマンドとフックスクリプトの作成

Certbotの--deploy-hookオプションを利用して、証明書が更新されるたびにスクリプトを実行します。

Certbotコマンドの実行例
SectigoのACMEサーバーと連携し、Cloud DNSでドメイン認証を行うコマンドです。

Bash

certbot certonly \
--email your-email@example.com \
--dns-google \
--dns-google-credentials ./certbot-key.json \
--agree-tos \
--server https://acme.sectigo.com/v2/DV \
--domain example.com,www.example.com \
--non-interactive \
--deploy-hook /path/to/gcp-deploy-hook.sh
--dns-google CertbotがCloud DNSでDNS-01チャレンジを自動的に処理するためのプラグインを指定します。
--dns-google-credentials 作成したサービスアカウントキーのパスを指定します。
--server https://acme.sectigo.com/v2/DV SectigoのACMEサーバーのエンドポイントを指定します。
--deploy-hook 証明書の更新が成功したときに実行するスクリプトを指定します。

3.フックスクリプト (gcp-deploy-hook.sh) の内容


このスクリプトは、新しく生成された証明書をGCPにアップロードし、Cloud Load Balancingのターゲットプロキシを更新する役割を担います。

Bash


#!/bin/bash

# 環境変数から証明書、キー、チェインのパスを取得
CERT_PATH=$RENEWED_LINEAGE/fullchain.pem
KEY_PATH=$RENEWED_LINEAGE/privkey.pem
CERT_NAME="ssl-cert-$(date +%Y%m%d%H%M%S)"

# 1. 新しいSSL証明書をGCPにアップロード
gcloud compute ssl-certificates create $CERT_NAME \
--certificate-file=$CERT_PATH \
--private-key-file=$KEY_PATH \
--global

# 2. ターゲットHTTPSプロキシを更新
# ロードバランサのターゲットプロキシ名を指定してください
TARGET_PROXY_NAME="your-target-https-proxy"

# 既存の証明書を取得し、新しい証明書を追加
CURRENT_CERTS=$(gcloud compute target-https-proxies describe $TARGET_PROXY_NAME --global --format="value(sslCertificates)")

# 新しい証明書をリストの先頭に追加して更新
NEW_CERTS=$CERT_NAME,$CURRENT_CERTS

gcloud compute target-https-proxies update $TARGET_PROXY_NAME \
--ssl-certificates=$NEW_CERTS \
--global

# 3. 古い証明書をクリーンアップ
# 注: 古い証明書が使用中でないことを確認してから削除してください。
# ロードバランサが新しい証明書に切り替わるまでに時間差があるため、
# 即時削除は避けるべきです。
# 以下は、古い証明書を識別して削除するための例です。
OLD_CERT_NAME="your-old-cert-name" # 手動または別の方法で取得
gcloud compute ssl-certificates delete $OLD_CERT_NAME --global --quiet
スクリプトの解説
CERT_PATH, KEY_PATH: Certbotは更新された証明書とキーのパスをRENEWED_LINEAGE環境変数で提供します。スクリプト内でこの変数を活用します。

gcloud compute ssl-certificates create fullchain.pem(証明書と中間証明書)とprivkey.pem(秘密鍵)を指定して、新しい自己管理型SSL証明書をGCPにアップロードします。
gcloud compute target-https-proxies update ロードバランサに紐づいているターゲットHTTPSプロキシの証明書を更新します。--ssl-certificatesオプションには、使用する証明書のリストをカンマ区切りで指定します。新しい証明書をリストの先頭に置くことで、GCPが新しい証明書を優先的に使用するようになります。
古い証明書の削除 自動化の際には、古い証明書を定期的にクリーンアップする仕組みも重要です。ロードバランサが新しい証明書を完全に利用していることを確認してから削除する必要があります。

4.自動化とスケジューリング

このプロセス全体を自動化するために、cronジョブを使用します。

コード スニペット

0 0 * * * /usr/bin/certbot renew --quiet
このcronジョブは毎日深夜0時にcertbot renewコマンドを実行します。Certbotは証明書の有効期限が30日以内になった場合にのみ更新処理とフックスクリプトの実行を行います。


⚠️ 注意事項
gcloudコマンドのインストール Certbotを実行するマシンにGoogle Cloud SDKがインストールされ、認証情報が正しく設定されていることを確認してください。
IAM権限 compute.adminロールは広範な権限を持つため、本番環境では最小権限の原則に基づき、compute.sslCertificates.createやcompute.targetHttpsProxies.updateなど、必要な権限のみを持つカスタムロールを推奨します。
証明書のクリーンアップ 古い証明書の削除は慎重に行ってください。新しい証明書が正常に機能していることを確認してから削除しないと、サービス停止につながる可能性があります。
SectigoのACME接続先 SectigoのACMEエンドポイントは、プランや製品によって異なる場合があります。ご自身の契約内容を確認し、適切なエンドポイントを使用してください。

サポートトップへ

CaaSとは

注文・設定方法など

トラブルシューティング

その他