
ที่มาภาพ: Unknown Source
วิธีตั้งค่าและใช้ SOPS เพื่อเข้ารหัส Secrets ในไฟล์ YAML/JSON บน Git Repository อย่างปลอดภัย
⚡ สรุป 30 วิ
SOPS (Secrets OPerationS) เป็นเครื่องมือโอเพ่นซอร์สที่ออกแบบมาสำหรับการเข้ารหัสข้อมูลลับในไฟล์ YAML หรือ JSON แล้วเก็บไว้บน Git repository อย่างปลอดภัย โดยไม่ต้องสร้างระบบจัดการ secrets แยกต่างหาก คุณ…
ทำความเข้าใจ SOPS — Overview
SOPS (Secrets OPerationS) เป็นเครื่องมือโอเพ่นซอร์สที่ออกแบบมาสำหรับการเข้ารหัสข้อมูลลับในไฟล์ YAML หรือ JSON แล้วเก็บไว้บน Git repository อย่างปลอดภัย โดยไม่ต้องสร้างระบบจัดการ secrets แยกต่างหาก คุณจะได้ ความมั่นใจว่าข้อมูลสำคัญ ไม่ถูกเปิดเผยต่อสาธารณะแม้โค้ดทั้งหมดจะอยู่ในที่สาธารณะ
SOPS ใช้ **KMS (Key Management Service) ของผู้ให้บริการคลาวด์หรือ GPG key ในการสร้างและจัดการคีย์เข้ารหัส จึงทำให้กระบวนการอัตโนมัติและสามารถรวมเข้า CI/CD pipeline ได้อย่างราบรื่น
- รองรับหลายรูปแบบไฟล์: YAML, JSON, ENV, INI
- ทำงานร่วมกับ AWS KMS, GCP KMS, Azure Key Vault, GPG อย่างเต็มที่
- สามารถผสานเข้ากับ Git‑Ops workflow ได้โดยไม่ต้องแก้ไขโครงสร้าง repository
**Tip: หากใช้คีย์ของผู้ให้บริการคลาวด์ ควรตั้งนโยบาย IAM ที่จำกัดการใช้งานเฉพาะ SOPS เท่านั้น เพื่อป้องกันการเรียกใช้คีย์จากแอปพลิเคชันอื่นโดยไม่ได้รับอนุญาต
การติดตั้ง SOPS — Installation
ขั้นตอนการติดตั้ง SOPS มีไม่กี่บรรทัดและทำได้บนทุกระบบที่รองรับ Go หรือ Docker คุณสามารถเลือกวิธีที่สะดวกที่สุดตามสภาพแวดล้อมของทีม
- **ผ่าน Homebrew (macOS/Linux): `brew install sops`
- **ใช้ apt (Debian/Ubuntu): `sudo apt-get install sops`
- **Docker image: `docker pull mozilla/sops:latest`
- ดาวน์โหลด binary ตรงจาก GitHub releases แล้วเพิ่มไปยัง `$PATH`
ตรวจสอบการติดตั้งด้วยคำสั่ง `sops --version` เพื่อให้แน่ใจว่าเวอร์ชันล่าสุดพร้อมใช้งาน
**Tip: ควรล็อกเวอร์ชัน SOPS ในไฟล์ `Dockerfile` หรือ `requirements.txt` ของโปรเจกต์ เพื่อความเสถียรของ pipeline
การตั้งค่า KMS / GPG — Key Configuration
SOPS ต้องอ้างอิงคีย์เข้ารหัสก่อนจึงจะทำการ encrypt/decrypt ได้ เลือกวิธีที่เหมาะกับองค์กรของคุณ
- **AWS KMS: สร้าง Customer Master Key (CMK) แล้วให้ IAM role ของ CI/CD มีสิทธิ `kms:Encrypt` และ `kms:Decrypt`
- **GCP KMS: สร้าง key ring + crypto key แล้วมอบบทบาท `cloudkms.cryptoKeyEncrypterDecrypter` ให้ Service Account
- **Azure Key Vault: เพิ่ม secret‑key แล้วตั้ง policy ให้แอปมีสิทธิ `encrypt/decrypt`
- **GPG: สร้างคีย์คู่ด้วย `gpg --full-generate-key` และส่ง public key ไปยังทีม
บันทึกค่า ARN, resource ID หรือ fingerprint ของคีย์ไว้ในไฟล์ `.sops.yaml` เพื่อให้ SOPS รู้ว่าจะใช้คีย์ใดในการเข้ารหัส
```yaml creation_rules:
- kms: arn:aws:kms:us-east-1:123456789012:key/abcd‑efgh‑ijkl‑mnop
encrypted_regex: ^(data|string)$ pgp: [] ```
การเข้ารหัสไฟล์ Secrets — Encrypting Secrets
เมื่อคีย์พร้อมแล้ว คุณสามารถเริ่ม encrypt ไฟล์ secrets ได้ทันที ขั้นตอนนี้เป็นการแปลงค่า plaintext เป็น ciphertext ที่เก็บในรูปแบบเดียวกับไฟล์เดิม ทำให้ไฟล์ยังอ่านได้ง่ายเมื่อต้องแก้ไข
- สร้างไฟล์ YAML/JSON ที่มีค่าลับทั้งหมด (เช่น API key, DB password)
- รันคำสั่ง `sops -e <filename> > <filename>.enc` หรือใช้ flag `--in-place` เพื่อเขียนทับไฟล์เดิม
- ตรวจสอบผลลัพธ์ว่า field ที่กำหนดให้ encrypt มีค่าเป็น **ENC[ … ]
ตัวอย่างไฟล์ที่ถูกเข้ารหัสแล้ว:
```yaml database: username: admin password: ENC[AES256_GCM,data:...,iv:...,tag:...] api_key: ENC[AES256_GCM,data:...,iv:...,tag:...] ```
**Tip: อย่าเก็บค่า plaintext ใด ๆ ไว้ในไฟล์ที่ถูก commit ให้ลบหรือย้ายไปยังไฟล์ `.enc` ก่อนทำ `git add`
การจัดการ Secrets บน Git — Git Integration
SOPS ทำให้คุณสามารถ commit ไฟล์ที่เข้ารหัสแล้วได้โดยตรง ซึ่งหมายความว่า repository ของคุณจะมีเพียง ciphertext เท่านั้น เมื่อใดก็ตามที่ต้องการใช้งานค่า plaintext ให้ทำการ decrypt ในขั้นตอน runtime หรือ CI/CD
- **Commit: `git add config.yaml.enc && git commit -m "Add encrypted secrets"`
- **Branch strategy: เก็บไฟล์ `.sops.yaml` ไว้ใน branch ที่เป็น source‑of‑truth อย่าให้ผู้ไม่มีสิทธิ์เข้าถึง KMS/GPG ได้อ่านไฟล์นี้
- **Pull request review: ให้ reviewer ตรวจสอบเฉพาะโครงสร้างไฟล์ ไม่ต้องดูค่า ciphertext
ตัวอย่าง CI/CD pipeline — CI/CD Example
```yaml stages:
- decrypt
- deploy
decrypt_secrets: stage: decrypt image: mozilla/sops:latest script:
- sops -d config.yaml.enc > config.yaml
artifacts: paths:
- config.yaml
deploy_app: stage: deploy dependencies:
- decrypt_secrets
script:
- ./deploy.sh --config config.yaml
```
**Tip: อย่าเก็บไฟล์ plaintext ที่ถูกสร้างโดยขั้นตอน `decrypt` ไว้บน artifact server นานเกินจำเป็น ลบหลังจากใช้เสร็จ (`rm config.yaml`)
การอัปเดตและรีโรเตชั่นคีย์ — Key Rotation
การหมุนคีย์ (key rotation) เป็นแนวปฏิบัติสำคัญเพื่อเพิ่มความปลอดภัย SOPS รองรับการระบุหลายคีย์ในไฟล์ `.sops.yaml` ทำให้คุณสามารถ encrypt ด้วยคีย์ใหม่และ decrypt ด้วยคีย์เก่าได้พร้อมกัน
- เพิ่มคีย์ใหม่ เข้าไปใน `creation_rules`
- รัน `sops -r <filename>` เพื่อ re‑encrypt ไฟล์ทั้งหมดด้วยคีย์ล่าสุด
- ตรวจสอบว่า pipeline ยังทำงานได้ก่อนลบคีย์เก่าออกจากไฟล์ configuration
| ขั้นตอน | คำอธิบาย |
|---|---|
| เพิ่มคีย์ใหม่ | แก้ไข `.sops.yaml` เพื่อใส่ ARN หรือ fingerprint ของคีย์ใหม่ |
| Re‑encrypt | `sops -r secret.yaml` ทำการเข้ารหัสใหม่ทั้งหมด |
| ลบคีย์เก่า | หลังจากตรวจสอบแล้ว ให้ลบ entry ของคีย์เก่าออก |
**Tip: ควรทำ key rotation อย่างน้อยทุก 6‑12 เดือน หรือเมื่อมีพนักงานลาออกที่เคยเข้าถึง KMS/GPG
การดีบักและแก้ปัญหาเบื้องต้น — Troubleshooting
บางครั้งอาจเจอข้อผิดพลาดเช่น “cannot decrypt” หรือ “key not found” ให้ตรวจสอบตามขั้นตอนต่อไปนี้
- ตรวจสอบว่า IAM/Service Account มีสิทธิ `Encrypt` / `Decrypt`
- ดูที่ไฟล์ `.sops.yaml` ว่ามีการระบุคีย์ถูกต้องหรือไม่ (ARN, fingerprint)
- ใช้คำสั่ง `sops -d <file>` เพื่อดู error message อย่างละเอียด
- หากใช้ Docker ตรวจสอบว่า volume mount ให้เข้าถึง credential files ถูกต้อง
**Tip: เปิดโหมด verbose ด้วย `SOPS_DEBUG=1` เพื่อให้ได้ข้อมูล debug เพิ่มเติม
สรุป — Summary
การใช้ SOPS ร่วมกับ Git ทำให้คุณสามารถเก็บ secrets ในรูปแบบ YAML/JSON ได้อย่างปลอดภัย โดยไม่ต้องพึ่งเครื่องมือจัดการ secret แยกต่างหาก ขั้นตอนหลักประกอบด้วยการตั้งค่า KMS/GPG, การเข้ารหัสไฟล์, การ commit ไปยัง repository, และการ decrypt ที่ runtime หรือ CI/CD pipeline
- ทำความเข้าใจคีย์ ก่อนเริ่มใช้งาน (KMS / GPG)
- ติดตั้ง SOPS อย่างง่ายผ่าน Homebrew/Docker/apt
- **กำหนดไฟล์ `.sops.yaml` เพื่อบอกคีย์และกฎการเข้ารหัส
- encrypt ไฟล์ secrets แล้ว commit ciphertext เท่านั้น
- decrypt ในขั้นตอน runtime ด้วย CI/CD หรือสคริปต์ที่ปลอดภัย
- หมุนคีย์อย่างสม่ำเสมอ เพื่อเพิ่มความมั่นใจในระบบ
ด้วยแนวทางนี้ ทีมของคุณจะได้ประโยชน์จากการจัดการ secrets ที่ง่ายต่อการตรวจสอบ, ปลอดภัยต่อผู้ไม่มีสิทธิ์ และสามารถทำ automation ได้เต็มที่ เพียงแค่ปฏิบัติตามขั้นตอนที่สรุปไว้ คุณก็พร้อมใช้ SOPS ในทุกโครงการบน Git repository ของคุณแล้ว.
แชร์บทความนี้:
ชอบบทความแบบนี้?
สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม
แหล่งข่าวต้นฉบับ
- ชื่อต้นฉบับ
- วิธีตั้งค่าและใช้ SOPS เพื่อเข้ารหัส Secrets ในไฟล์ YAML/JSON บน Git Repository อย่างปลอดภัย
- ผู้เขียน
- กองบรรณาธิการ Thai Tech News
- แหล่ง
- บทความต้นฉบับ Thai Tech News · ช่วยร่างด้วย AI, เรียบเรียง/ตรวจสอบโดยกองบรรณาธิการ
- วันที่เผยแพร่
- 21 กรกฎาคม 2569 เวลา 10:51



