Certificate Manager Backup Recovery Strategy —
Certificate Manager คืออะไร

Certificate Manager เป็นระบบจัดการ digital certificates (SSL/TLS certificates) สำหรับ encrypt การสื่อสารระหว่าง clients และ servers ครอบคลุมทั้ง certificate lifecycle ตั้งแต่ issuance, deployment, renewal และ revocation
ประเภทของ Certificate Managers ได้แก่ cert-manager สำหรับ Kubernetes จัดการ certificates อัตโนมัติผ่าน Let's Encrypt หรือ internal CA, AWS Certificate Manager (ACM) managed service สำหรับ AWS resources, HashiCorp Vault PKI สำหรับ internal certificate authority, Google Certificate Manager สำหรับ Google Cloud และ OpenSSL/cfssl สำหรับ manual certificate management
Backup และ Recovery Strategy สำคัญมากเพราะ certificate expiration ทำให้ services ใช้งานไม่ได้, private key สูญหายทำให้ต้อง re-issue certificate ทั้งหมด, disaster recovery ต้อง restore certificates ให้เร็วที่สุด และ compliance requirements บังคับให้มี backup plan สำหรับ cryptographic materials
ติดตั้ง Certificate Management Tools
ติดตั้งเครื่องมือจัดการ certificates
เนื้อหาเกี่ยวข้อง — อ่านต่อ: Python คืออะไร — คู่มือโปรแกรมมิ่ง 2026
# === Certificate Management Tools Setup ===
# 1. cert-manager for Kubernetes
# ===================================
# Install with Helm
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--set installCRDs=true \
--set prometheus.enabled=true
# Verify
kubectl get pods -n cert-manager
# cert-manager-xxx 1/1 Running
# cert-manager-cainjector-xxx 1/1 Running
# cert-manager-webhook-xxx 1/1 Running
# 2. Create ClusterIssuer (Let's Encrypt)
cat <<'EOF' | kubectl apply -f -
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: admin@example.com
privateKeySecretRef:
name: letsencrypt-prod-key
solvers:
- http01:
ingress:
class: nginx
EOF
# 3. Request Certificate
cat <<'EOF' | kubectl apply -f -
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: app-tls
namespace: default
spec:
secretName: app-tls-secret
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
dnsNames:
- app.example.com
- www.app.example.com
duration: 2160h # 90 days
renewBefore: 720h # Renew 30 days before expiry
EOF
# 4. OpenSSL for Local Certs
# ===================================
# Generate CA
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 \
-out ca.crt -subj "/CN=Internal CA/O=MyOrg"
# Generate server cert
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr \
-subj "/CN=server.internal/O=MyOrg"
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key \
-CAcreateserial -out server.crt -days 365 -sha256
# Verify cert
openssl x509 -in server.crt -text -noout | head -20
openssl verify -CAfile ca.crt server.crt
# 5. cfssl (CloudFlare's PKI toolkit)
# ===================================
go install github.com/cloudflare/cfssl/cmd/cfssl@latest
go install github.com/cloudflare/cfssl/cmd/cfssljson@latest
echo "Certificate tools installed"
Backup Strategy สำหรับ Certificates
วางแผน backup certificates
Automated Backup Scripts

Scripts สำหรับ backup certificates อัตโนมัติ
แนะนำเพิ่มเติม — บทวิเคราะห์จาก XM Signal
#!/bin/bash
# cert_backup.sh — Automated Certificate Backup
set -euo pipefail
BACKUP_BASE="/secure-backup/certificates"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/"
ENCRYPTION_KEY_FILE="/etc/cert-backup/.encryption-key"
VAULT_ADDR="https://vault.internal:8200"
LOG_FILE="/var/log/cert-backup.log"
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"; }
mkdir -p "$BACKUP_DIR"
log "Starting certificate backup to $BACKUP_DIR"
# === 1. Backup Kubernetes cert-manager secrets ===
log "Backing up Kubernetes certificate secrets..."
NAMESPACES=$(kubectl get namespaces -o jsonpath='{.items[*].metadata.name}')
for ns in $NAMESPACES; do
SECRETS=$(kubectl get secrets -n "$ns" \
-l cert-manager.io/certificate-name \
-o jsonpath='{.items[*].metadata.name}' 2>/dev/null || echo "")
for secret in $SECRETS; do
if [ -n "$secret" ]; then
kubectl get secret "$secret" -n "$ns" -o yaml \
> "/k8s__.yaml"
log " Backed up: /"
fi
done
done
# === 2. Backup local certificates ===
log "Backing up local certificates..."
CERT_DIRS=("/etc/ssl/private" "/etc/letsencrypt/live" "/opt/certs")
for dir in ""; do
if [ -d "$dir" ]; then
tar -czf "/local_$(echo $dir | tr '/' '_').tar.gz" \
-C "$(dirname $dir)" "$(basename $dir)"
log " Backed up: $dir"
fi
done
# === 3. Backup cert-manager resources ===
log "Backing up cert-manager CRDs..."
kubectl get certificates --all-namespaces -o yaml \
> "/cert-manager-certificates.yaml"
kubectl get clusterissuers -o yaml \
> "/cert-manager-clusterissuers.yaml"
kubectl get issuers --all-namespaces -o yaml \
> "/cert-manager-issuers.yaml"
# === 4. Encrypt backup ===
log "Encrypting backup..."
tar -czf ".tar.gz" -C "$BACKUP_BASE" "$(basename $BACKUP_DIR)"
openssl enc -aes-256-gcm -salt \
-in ".tar.gz" \
-out ".tar.gz.enc" \
-pass file:"$ENCRYPTION_KEY_FILE"
# Generate checksum
sha256sum ".tar.gz.enc" > ".tar.gz.enc.sha256"
# Clean unencrypted files
rm -rf "$BACKUP_DIR" ".tar.gz"
log "Encrypted backup: .tar.gz.enc"
# === 5. Upload to remote storage ===
log "Uploading to remote storage..."
# AWS S3
# aws s3 cp ".tar.gz.enc" \
# "s3://cert-backup-bucket/$(basename ).tar.gz.enc" \
# --sse aws:kms
# HashiCorp Vault
# vault kv put secret/cert-backups/ \
# backup=@".tar.gz.enc"
# === 6. Cleanup old backups (keep 90 days) ===
find "$BACKUP_BASE" -name "*.tar.gz.enc" -mtime +90 -delete
log "Cleaned up backups older than 90 days"
# === 7. Verify backup ===
log "Verifying backup integrity..."
sha256sum -c ".tar.gz.enc.sha256"
if [ $? -eq 0 ]; then
log "Backup verified successfully"
else
log "ERROR: Backup verification failed!"
exit 1
fi
log "Certificate backup completed successfully"
# Crontab: 0 2 * * * /opt/scripts/cert_backup.sh >> /var/log/cert-backup.log 2>&1
Recovery Procedures
ขั้นตอน restore certificates
เนื้อหาเกี่ยวข้อง — แนะนำให้อ่าน SigNoz Observability Stream Processing — คู่มือฉบับสมบูรณ์ 2026
Monitoring และ Alerting
ตรวจสอบ certificate status
FAQ คำถามที่พบบ่อย
Q: ต้อง backup อะไรบ้างสำหรับ certificates?
A: ต้อง backup Private key (สำคัญที่สุด สูญหายเท่ากับต้อง re-issue certificate), Certificate file (.crt/.pem), CA chain/intermediate certificates, CSR (Certificate Signing Request) สำหรับ re-issue, cert-manager CRD resources (ClusterIssuers, Certificates), ACME account keys สำหรับ Let's Encrypt สำหรับ Kubernetes backup ทั้ง Secret objects ที่เก็บ certificates ใน etcd
แนะนำเพิ่มเติม — SiamCafeBook
Q: ควร backup certificates บ่อยแค่ไหน?
เนื้อหาเกี่ยวข้อง — อ่านต่อ: AWS CDK GreenOps Sustainability
A: Production certificates ควร backup ทุกวัน หรือทันทีหลัง renew/issue certificate ใหม่ Staging ทุกสัปดาห์ Development ทุกเดือน สำคัญที่สุดคือ trigger backup ทันทีเมื่อมี certificate ใหม่ ไม่ใช่แค่ scheduled backup cert-manager มี events ที่ใช้ trigger backup ได้ retention ขั้นต่ำ 1 ปีสำหรับ production เพื่อ compliance
Q: เก็บ private keys อย่างไรให้ปลอดภัย?
A: ห้ามเก็บ private keys ใน plaintext บน disk ใช้ encrypted storage เสมอ เช่น HashiCorp Vault, AWS KMS, Azure Key Vault, GCP Secret Manager สำหรับ Kubernetes ใช้ sealed-secrets หรือ external-secrets operator encrypt backups ด้วย AES-256 แยก encryption key จาก backup data ใช้ HSM (Hardware Security Module) สำหรับ CA private keys จำกัด access ด้วย RBAC เฉพาะคนที่จำเป็น
เนื้อหาเกี่ยวข้อง — ทำความเข้าใจ AWS Amplify 12 Factor App — คู่มือฉบับสมบูรณ์ 2026
Q: cert-manager ทำ auto-renewal ได้ไหม?
A: cert-manager renew certificates อัตโนมัติก่อน expiry (default 30 วัน ก่อนหมดอายุ ตั้งค่าได้ด้วย renewBefore) สำหรับ Let's Encrypt certificates (90 วัน) จะ renew อัตโนมัติที่ 60 วัน ไม่ต้องทำอะไรเพิ่ม แต่ต้อง monitor ว่า renewal สำเร็จ เพราะอาจ fail จาก DNS issues, rate limits, network problems ตั้ง alerting สำหรับ certificate expiry เพื่อ catch failures





