SOPS Encryption กับ Post-mortem Analysis —

SOPS Encryption

SOPS Secrets OPerationS เข้ารหัสไฟล์ Secrets Mozilla YAML JSON ENV INI เข้ารหัสเฉพาะ Value ใช้ AWS KMS GCP KMS Azure Key Vault age PGP Git ปลอดภัย
Post-mortem Analysis วิเคราะห์หลัง Incident Root Cause Timeline Impact Action Items Blameless ไม่โทษบุคคล โฟกัสระบบกระบวนการ
อ่านเพิ่ม: LXC vs Docker เลือก Container Technology อะไรดี · อ่านเพิ่ม: Proxmox VE Cluster ทำ High Availability สำหรับ Home Lab · อ่านเพิ่ม: MinIO S3 Compatible Storage self-hosted ทดแทน AWS S3
SOPS Configuration
=== SOPS Setup และ Configuration ===
1. ติดตั้ง SOPS
macOS: brew install sops
Linux: wget https://github.com/getsops/sops/releases/download/v3.8.1/sops-v3.8.1.linux.amd64 -O /usr/local/bin/sops && chmod +x /usr/local/bin/sops
Windows: scoop install sops
2. ติดตั้ง age (Key Management)
brew install age
age-keygen -o ~/.sops/age/keys.txt
export SOPS_AGE_KEY_FILE=~/.sops/age/keys.txt
3. .sops.yaml — Configuration File
creation_rules:
- path_regex: \.enc\.yaml$
age: >-
age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
- path_regex: secrets/.*\.yaml$
kms: arn:aws:kms:us-east-1:123456789:key/abcd-1234-efgh
- path_regex: prod/.*\.yaml$
gcp_kms: projects/my-project/locations/global/keyRings/sops/cryptoKeys/sops-key
age: >-
age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
4. เข้ารหัสไฟล์
sops --encrypt secrets.yaml > secrets.enc.yaml
sops --encrypt --in-place secrets.yaml
5. แก้ไขไฟล์เข้ารหัส
sops secrets.enc.yaml # เปิด Editor decrypt อัตโนมัติ
เนื้อหาเกี่ยวข้อง — อ่านต่อ: gRPC Protobuf API Gateway Pattern
6. ถอดรหัสไฟล์
sops --decrypt secrets.enc.yaml > secrets.yaml
sops --decrypt --output-type json secrets.enc.yaml
7. Rotate Keys
sops --rotate --in-place secrets.enc.yaml
8. ใช้กับ Kubernetes
แนะนำเพิ่มเติม — XM Signal
sops --decrypt secrets.enc.yaml | kubectl apply -f -
9. ใช้กับ Terraform
data "sops_file" "secrets" {
source_file = "secrets.enc.yaml"
}
sops_commands = {
"sops --encrypt": "เข้ารหัสไฟล์",
"sops --decrypt": "ถอดรหัสไฟล์",
"sops <file>": "เปิด Editor แก้ไข (decrypt อัตโนมัติ)",
"sops --rotate": "หมุนเวียน Key",
"sops --set": "เปลี่ยนค่าเฉพาะ Key",
"sops updatekeys": "อัปเดต Key Recipients",
}
backends = {
"age": "ง่าย ไม่ต้องมี Cloud, ใช้ Local Key File",
"AWS KMS": "ใช้ IAM Roles, Envelope Encryption",
"GCP KMS": "ใช้ Service Account, Cloud KMS",
เนื้อหาเกี่ยวข้อง — ดูเพิ่มเติมเรื่อง Great Expectations Cache Strategy Redis
"Azure Key Vault": "ใช้ Azure AD, Managed Identity",
"PGP": "ใช้ GPG Keys, Legacy แต่ยังรองรับ",
}
for cmd, desc in sops_commands.items():
for backend, desc in backends.items():
SOPS กับ CI/CD Pipeline
sops_cicd.py — SOPS in CI/CD Pipeline
GitHub Actions workflow
.github/workflows/deploy.yml
name: Deploy
แนะนำเพิ่มเติม — หนังสือเทรดที่ SiamCafeBook
on:
push:

branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-arn: arn:aws:iam::123456789:role/deploy-role
aws-region: us-east-1
- name: Install SOPS
run: |
wget -qO /usr/local/bin/sops \
https://github.com/getsops/sops/releases/download/v3.8.1/sops-v3.8.1.linux.amd64
chmod +x /usr/local/bin/sops
- name: Decrypt Secrets
run: sops --decrypt k8s/secrets.enc.yaml | kubectl apply -f -
- name: Deploy
run: kubectl apply -k k8s/overlays/production/
GitOps with Flux CD + SOPS
flux create source git my-app \
--url=https://github.com/org/my-app \
--branch=main
flux create kustomization my-app \
--source=my-app \
--path=./k8s/overlays/production \
--decryption-provider=sops \เนื้อหาเกี่ยวข้อง — ดูเพิ่มเติมเรื่อง Elasticsearch Aggregation Stream Processing
--decryption-secret=sops-age
cicd_patterns = {
"GitHub Actions + SOPS": {
"flow": "Push -> Actions -> SOPS Decrypt -> kubectl apply",
"auth": "OIDC + IAM Role (ไม่ต้องเก็บ AWS Keys)",
},
"Flux CD + SOPS": {
"flow": "Git Push -> Flux detect -> SOPS Decrypt -> Apply",
"auth": "age Key ใน Kubernetes Secret",
},
"ArgoCD + SOPS": {
"flow": "Git Push -> ArgoCD Sync -> SOPS Plugin Decrypt",
"auth": "argocd-vault-plugin หรือ KSOPS",
เนื้อหาเกี่ยวข้อง — ดูเพิ่มเติมเรื่อง Uptime Kuma Monitoring Developer Experience DX
},
"Terraform + SOPS": {
"flow": "terraform plan -> SOPS Provider Decrypt -> Apply",
"auth": "AWS KMS / GCP KMS via Provider",
},
}
for pattern, info in cicd_patterns.items():
Secret Management Comparison
comparison = {
"SOPS": {"type": "File Encryption", "cost": "Free", "complexity": "Low"},
"HashiCorp Vault": {"type": "Secret Server", "cost": "Free/Enterprise", "complexity": "High"},
"AWS Secrets Manager": {"type": "Cloud Service", "cost": "$0.40/secret/mo", "complexity": "Low"},
"Sealed Secrets": {"type": "K8s Native", "cost": "Free", "complexity": "Medium"},
"External Secrets": {"type": "K8s Operator", "cost": "Free", "complexity": "Medium"},
}
for tool, info in comparison.items():
Best Practices
- SOPS + age: ใช้ age สำหรับ Local Development AWS KMS สำหรับ Production
- Pre-commit: ใช้ gitleaks Pre-commit Hook ตรวจ Secrets ก่อน Commit
- Key Rotation: หมุนเวียน Keys ทุก 90 วัน sops --rotate
- Blameless: Post-mortem ต้อง Blameless ไม่โทษบุคคล
- Action Items: ทุก Post-mortem ต้องมี Action Items พร้อม Owner และ Deadline
- 5 Whys: ใช้ 5 Whys หา Root Cause ที่แท้จริง
SOPS คืออะไร
Secrets OPerationS เข้ารหัสไฟล์ Secrets Mozilla YAML JSON ENV เข้ารหัสเฉพาะ Value AWS KMS GCP KMS age PGP Git ปลอดภัย





