Tuyệt chiêu dùng SOPS mã hóa Secret: Chặn đứng nguy cơ lộ API Key lên Git

Security tutorial - IT technology blog
Security tutorial - IT technology blog

Bối cảnh: Nỗi ám ảnh “bay màu” tài khoản vì lộ Secret

Chỉ cần 5 giây lỡ tay git push file .env chứa AWS Access Key lên một repo public, bạn sẽ thấy “tốc độ” của hacker. Chỉ vài phút sau, các bot quét tự động có thể tiêu tốn của bạn hàng nghìn USD tiền chạy script đào coin. Ngay cả với repo private, thói quen lưu mật khẩu dạng văn bản thuần túy (plain-text) vẫn là một quả bom hẹn giờ.

Nhiều anh em thường dùng .gitignore để né, nhưng cách này khiến việc phối hợp trong team cực kỳ ức chế. Cứ mỗi lần có member mới, cả team lại phải chuyền tay nhau file config qua Slack hay Telegram — vừa thủ công, vừa dễ thất lạc. Quan trọng hơn, nếu bạn xóa file ở commit hiện tại, nó vẫn “nằm vùng” vĩnh viễn trong lịch sử Git. Kẻ xấu chỉ cần quay ngược thời gian là lấy được hết.

Đó là lúc SOPS (Secrets Operation) của Mozilla tỏa sáng. Thay vì mã hóa nguyên cả file thành một khối đen ngòm, SOPS chỉ mã hóa phần giá trị (values) và giữ nguyên các khóa (keys). Nhờ vậy, bạn vẫn xem được cấu trúc file và git diff ngon lành mà không sợ lộ dữ liệu thật. Công cụ này hỗ trợ tận răng từ PGP cho đến các ông lớn như AWS KMS, GCP KMS hay Azure Key Vault.

Cài đặt SOPS: Nhanh, gọn, nhẹ

Tùy hệ điều hành, bạn chỉ mất chưa đầy 1 phút để đưa SOPS vào máy local.

Lệnh cài đặt nhanh

Với anh em hệ máy Mac hoặc Linux (đã có Homebrew), dùng lệnh này cho lẹ:

brew install sops

Hoặc nếu muốn tải trực tiếp bản binary cho Linux:

curl -LO https://github.com/getsops/sops/releases/download/v3.8.1/sops-v3.8.1.linux.amd64
sudo mv sops-v3.8.1.linux.amd64 /usr/local/bin/sops
sudo chmod +x /usr/local/bin/sops

Khởi tạo “chìa khóa” PGP

Nếu dự án cá nhân hoặc team nhỏ, dùng PGP là phương án miễn phí và hiệu quả nhất. Với doanh nghiệp lớn, hãy ưu tiên KMS để quản lý quyền truy cập tập trung.

Tạo cặp khóa GPG mới bằng lệnh:

gpg --full-generate-key

Hãy chọn RSA 4096 bit để đảm bảo độ bảo mật cao nhất hiện nay. Sau khi tạo, hãy lấy Fingerprint (mã định danh) của khóa:

gpg --list-secret-keys --keyid-format LONG

Hãy copy chuỗi ký tự ở dòng pub (ví dụ: 1A2B3C4D...). Đây chính là “chứng minh thư” để SOPS biết cần dùng khóa nào.

Mẹo nhỏ cho anh em: Đã mất công mã hóa thì mật khẩu gốc cũng phải xịn. Thay vì đặt 123456, mình hay dùng trình tạo pass tại toolcraft.app/vi/tools/security/password-generator. Công cụ này chạy hoàn toàn trên browser, cực an toàn khi kết hợp với SOPS để lưu vào file config.

Thực chiến: Mã hóa và chỉnh sửa file trực tiếp

Giả sử bạn có file secrets.yaml chứa thông tin nhạy cảm:

api_key: "sk_live_51Mz..."
db_password: "super-strong-pass-2024"
username: "admin"

Bước 1: Cấu hình luật chơi với .sops.yaml

Đừng gõ ID khóa thủ công mỗi lần chạy lệnh, cực lắm! Hãy tạo file .sops.yaml ở thư mục gốc dự án:

creation_rules:
  - path_regex: secrets\.yaml$
    pgp: "YOUR_GPG_FINGERPRINT_HERE"

Bước 2: Mã hóa chỉ với một dòng lệnh

Chạy lệnh này để biến dữ liệu thành “ma trận”:

sops -e -i secrets.yaml

Mở file ra, bạn sẽ thấy api_key vẫn còn đó, nhưng giá trị đằng sau đã trở thành một chuỗi ENC[AES256_GCM,...] dài dằng dặc. An toàn tuyệt đối để đẩy lên GitHub!

Bước 3: Chỉnh sửa không cần giải mã

Đây là tính năng “đắt giá” nhất. Bạn không cần giải mã ra file tạm (dễ hớ hênh). Chỉ cần gõ:

sops secrets.yaml

SOPS sẽ mở file trong Vim/Nano. Bạn cứ việc sửa nội dung rồi lưu lại (:wq), SOPS sẽ tự động mã hóa lại phần nội dung mới ngay lập tức. Cảm giác mượt mà như đang sửa file text bình thường vậy.

Tích hợp CI/CD và Làm việc nhóm

Để đồng nghiệp cùng giải mã được, bạn chỉ cần thêm Public Key của họ vào file .sops.yaml. Mỗi file có thể có nhiều “chìa khóa” cùng lúc.

Đưa vào quy trình GitHub Actions

Trong script deploy, bạn cần nạp Private Key vào Secret của GitHub, sau đó giải mã trước khi ứng dụng khởi chạy:

# Giải mã file để dùng cho app
sops -d secrets.yaml > secrets.decrypted.yaml

Mấy điều “sống còn” cần nhớ

  • Luôn kiểm tra git diff: Trước khi git commit, hãy chắc chắn bạn thấy đống ký tự loằng ngoằng thay vì mật khẩu cũ.
  • Backup Private Key: Mất khóa là mất sạch secrets, không có nút “quên mật khẩu” đâu. Hãy cất nó vào 1Password hoặc in ra giấy cất tủ kính.
  • Đừng quên đồng nghiệp: Nếu bạn mã hóa mà chưa thêm khóa của team vào, họ sẽ nhìn file bằng ánh mắt bất lực đấy.

Áp dụng SOPS có thể tốn thêm của bạn 10-15 phút thiết lập ban đầu, nhưng nó mang lại sự yên tâm tuyệt đối. Từ giờ, mỗi lần git push, bạn có thể tự tin đi pha cà phê mà không phải lo lắng về việc lộ API key nữa. Chúc anh em triển khai thành công!

Share: