SOPS Encryption
SOPS Secrets OPerationS Encryption KMS AWS GCP Azure Vault PGP age GitOps Flux ArgoCD Terraform Helm Clean Architecture
| KMS Provider | Service | Cost | Integration |
|---|---|---|---|
| AWS KMS | Key Management Service | $1/key/month + API calls | IAM Role |
| GCP KMS | Cloud KMS | $0.06/key version/month | Service Account |
| Azure Key Vault | Key Vault | $0.03/10K operations | Managed Identity |
| HashiCorp Vault | Transit Engine | Open Source / Enterprise | Token / AppRole |
| age | Local Encryption | ฟรี (Open Source) | age Key File |
| PGP | GPG Key | ฟรี | GPG Keyring |
Architecture Design
# === SOPS Clean Architecture ===
# .sops.yaml - Configuration File
# creation_rules:
# - path_regex: environments/dev/.*
# kms: arn:aws:kms:us-east-1:123456:key/dev-key-id
# - path_regex: environments/staging/.*
# kms: arn:aws:kms:us-east-1:123456:key/staging-key-id
# - path_regex: environments/prod/.*
# kms: arn:aws:kms:us-east-1:123456:key/prod-key-id
# shamir_threshold: 2
# key_groups:
# - kms:
# - arn:aws:kms:us-east-1:123456:key/prod-key-1
# - arn:aws:kms:us-west-2:123456:key/prod-key-2
# Commands:
# sops environments/dev/secrets.yaml # Create/Edit (auto-encrypt on save)
# sops -d environments/dev/secrets.yaml # Decrypt to stdout
# sops -e -i environments/dev/secrets.yaml # Encrypt in-place
# sops updatekeys environments/dev/secrets.yaml # Re-encrypt with new keys
from dataclasses import dataclass
@dataclass
class ArchLayer:
layer: str
responsibility: str
sops_interaction: str
example: str
layers = [
ArchLayer("Secret Layer (Git)",
"เก็บ Encrypted Secret Files ใน Git Repository",
"sops encrypt/decrypt ผ่าน KMS",
"environments/prod/secrets.enc.yaml"),
ArchLayer("Config Layer",
"อ่าน Decrypted Secret แปลงเป็น Config Object",
"sops -d | parse YAML → Config struct",
"config.LoadFromSOPS('secrets.enc.yaml')"),
ArchLayer("Application Layer",
"ใช้ Config Object ไม่รู้จัก SOPS โดยตรง",
"ไม่มี (Decoupled จาก SOPS)",
"db.Connect(config.DatabaseURL)"),
ArchLayer("Infrastructure Layer",
"จัดการ KMS Key IAM Permission",
"Terraform สร้าง KMS Key + IAM Policy",
"aws_kms_key.sops_prod {}"),
]
print("=== Architecture Layers ===")
for l in layers:
print(f"\n [{l.layer}]")
print(f" Responsibility: {l.responsibility}")
print(f" SOPS: {l.sops_interaction}")
print(f" Example: {l.example}")
GitOps Integration
# === GitOps Workflow with SOPS ===
# Flux + SOPS:
# apiVersion: kustomize.toolkit.fluxcd.io/v1
# kind: Kustomization
# spec:
# decryption:
# provider: sops
# secretRef:
# name: sops-age # age key stored as K8s Secret
# ArgoCD + KSOPS:
# apiVersion: viaduct.ai/v1
# kind: ksops
# metadata:
# name: secret-generator
# files:
# - environments/prod/secrets.enc.yaml
# Terraform + SOPS:
# data "sops_file" "secrets" {
# source_file = "secrets.enc.yaml"
# }
# resource "aws_db_instance" "main" {
# password = data.sops_file.secrets.data["db_password"]
# }
@dataclass
class GitOpsIntegration:
tool: str
method: str
config: str
decrypt_at: str
complexity: str
integrations = [
GitOpsIntegration("Flux CD",
"Built-in SOPS Decryption Provider",
"Kustomization spec.decryption.provider: sops",
"Flux Controller (ใน Cluster)",
"ต่ำ (Native Support)"),
GitOpsIntegration("ArgoCD + KSOPS",
"KSOPS Plugin (Kustomize Generator)",
"ksops Kind + Secret File Reference",
"ArgoCD Repo Server (ใน Cluster)",
"ปานกลาง (ต้องติดตั้ง Plugin)"),
GitOpsIntegration("Terraform",
"terraform-provider-sops",
"data sops_file + source_file",
"Terraform Runner (CI/CD หรือ Local)",
"ต่ำ (Provider Install)"),
GitOpsIntegration("Helm + sops",
"helm-secrets Plugin หรือ sops -d pipe",
"sops -d secrets.yaml | helm upgrade -f -",
"CI/CD Runner",
"ต่ำ (CLI Pipe)"),
GitOpsIntegration("Kustomize",
"ksops Generator",
"generators: [ksops.yaml]",
"Build Time (CI/CD)",
"ปานกลาง"),
]
print("=== GitOps Integrations ===")
for g in integrations:
print(f"\n [{g.tool}]")
print(f" Method: {g.method}")
print(f" Config: {g.config}")
print(f" Decrypt: {g.decrypt_at}")
print(f" Complexity: {g.complexity}")
Key Rotation & Security
# === Key Rotation Workflow ===
@dataclass
class RotationStep:
step: int
action: str
command: str
frequency: str
rotation = [
RotationStep(1, "สร้าง KMS Key ใหม่",
"aws kms create-key --description 'SOPS Prod Key v2'",
"ทุก 90 วัน หรือตาม Policy"),
RotationStep(2, "อัพเดท .sops.yaml",
"เพิ่ม Key ARN ใหม่ใน creation_rules",
"ทันทีหลังสร้าง Key ใหม่"),
RotationStep(3, "Re-encrypt ทุก Secret File",
"find . -name '*.enc.yaml' -exec sops updatekeys {} \\;",
"ทันทีหลังอัพเดท .sops.yaml"),
RotationStep(4, "ทดสอบ Decrypt",
"sops -d environments/prod/secrets.enc.yaml",
"ทันที"),
RotationStep(5, "Commit & Deploy",
"git add . && git commit -m 'Rotate SOPS keys' && git push",
"ทันที"),
RotationStep(6, "Disable Old Key (Optional)",
"aws kms disable-key --key-id OLD_KEY_ID",
"หลังยืนยันว่า Key ใหม่ทำงานแล้ว 7 วัน"),
]
print("=== Key Rotation ===")
for r in rotation:
print(f" Step {r.step}: {r.action}")
print(f" Command: {r.command}")
print(f" Frequency: {r.frequency}")
เคล็ดลับ
- .sops.yaml: ตั้ง creation_rules แยก Key ตาม Environment
- age: ใช้ age แทน PGP สำหรับ Local Dev ง่ายกว่ามาก
- Shamir: ใช้ Shamir Threshold สำหรับ Production ต้อง 2+ Key
- IAM: จำกัด KMS Access ด้วย IAM Policy อย่าให้ทุกู้คืนใช้ Prod Key
- Rotation: Rotate Key ทุก 90 วัน ใช้ sops updatekeys
แนวทางป้องกันภัยไซเบอร์สำหรับองค์กรไทย
ภัยคุกคามทางไซเบอร์ในปี 2026 มีความซับซ้อนมากขึ้น Ransomware ยังคงเป็นภัยอันดับหนึ่ง โดยผู้โจมตีใช้ AI ช่วยสร้าง Phishing Email ที่แนบเนียนขึ้น องค์กรควรมี Multi-Layered Security ตั้งแต่ Perimeter Defense ด้วย Next-Gen Firewall Endpoint Protection ด้วย EDR Solution และ Network Detection and Response
การฝึกอบรมพนักงานเป็นสิ่งสำคัญที่สุด เพราะ Human Error เป็นสาเหตุหลักของการรั่วไหลข้อมูล ควรจัด Security Awareness Training อย่างน้อยไตรมาสละครั้ง ทำ Phishing Simulation ทดสอบพนักงาน และมี Incident Response Plan ที่ชัดเจน ฝึกซ้อมเป็นประจำ
สำหรับกฎหมาย PDPA ของไทย องค์กรต้องมี Data Protection Officer แจ้งวัตถุประสงค์การเก็บข้อมูลอย่างชัดเจน ขอ Consent ก่อนใช้ข้อมูลส่วนบุคคล มีมาตรการรักษาความปลอดภัยที่เหมาะสม และแจ้งเหตุ Data Breach ภายใน 72 ชั่วโมง
SOPS คืออะไร
Secrets OPerationS Mozilla Encrypt YAML JSON ENV KMS AWS GCP Azure Vault PGP age เข้ารหัสเฉพาะ Value เก็บใน Git GitOps
ใช้กับ Architecture อย่างไร
Clean Architecture Secret Layer Git Config Layer Parse Application Layer Decoupled Infrastructure Layer KMS IAM Terraform Version Control
ตั้งค่าอย่างไร
.sops.yaml creation_rules path_regex KMS Key sops edit sops -d Flux ArgoCD KSOPS Terraform helm-secrets Kustomize
Key Rotation ทำอย่างไร
สร้าง KMS Key ใหม่ อัพเดท .sops.yaml sops updatekeys Re-encrypt ทดสอบ Commit Deploy Disable Old Key 90 วัน IAM Audit CloudTrail
สรุป
SOPS Encryption Clean Architecture KMS AWS GCP age GitOps Flux ArgoCD Terraform Helm Key Rotation IAM Shamir Secret Management Git
