Phần 3: Tích Hợp Bảo Mật Vào Vòng Đời DevOps
Bài 13: Quản Lý Bí Mật (Secret Management)
Bạn sẽ không để chìa khóa nhà dưới tấm thảm. Đừng hardcode API key trong code của bạn.
Ôn lại Bài 12: Quét Container
Ở bài 12, chúng ta đã thấy công cụ quét có thể phát hiện các bí mật bị lộ (ví dụ: `ENV API_KEY=...`) trong Docker image. Đây là một thực hành cực kỳ nguy hiểm. Bất cứ ai có quyền truy cập image đều có thể lấy được bí mật.
Vấn Đề: "Hardcode Secrets" Là Gì?
Đây là "anti-pattern" phổ biến nhất. Đó là khi bạn viết thẳng các thông tin nhạy cảm vào code, file cấu hình, hoặc Dockerfile và commit chúng lên Git.
Cách Làm Tệ 👎
// Trong file config.js
const API_KEY = "sk_live_123abc456def...";
// Trong file Dockerfile
ENV DB_PASSWORD="MySuperSecretP@ssword"
// Trong file .env (và lỡ commit lên Git)
DATABASE_URL="postgres://user:pass@host:5432/db"
Giải Pháp: Secret Management
Secret Management là thực hành quản lý, lưu trữ, và kiểm soát truy cập đến các "bí mật" (credentials, API keys, certificates) một cách an toàn và tập trung.
Thay vì hardcode, ứng dụng sẽ gọi đến một dịch vụ chuyên dụng (gọi là Vault hoặc "kho bí mật") tại thời điểm runtime để lấy bí mật mà nó cần.
Luồng Hoạt Động Của Secret Management
1. Lưu Trữ
Admin lưu bí mật (ví dụ: `db_pass`) vào một "Vault" trung tâm. Bí mật được mã hóa ngay lập tức.
2. Xác Thực (AuthN)
Ứng dụng (App) khởi động. Nó tự xác thực với Vault (dùng Service Account, Token, AppRole...).
3. Ủy Quyền (AuthZ)
Vault kiểm tra quyền: "App này có được phép đọc `db_pass` không?". Nếu có, Vault trả về bí mật.
4. Tiêm (Inject)
Bí mật được "tiêm" vào ứng dụng (qua biến môi trường hoặc file tạm) và chỉ tồn tại trong bộ nhớ (RAM).
Cách Làm Tốt 👍
// Trong code, đọc từ biến môi trường
const DB_PASSWORD = process.env.DB_PASSWORD;
// Hệ thống (Vault, Kubernetes) sẽ tiêm
// process.env.DB_PASSWORD vào container
// ngay trước khi nó khởi động.
# Bí mật không bao giờ xuất hiện trong Git.
Lợi Ích Của Secret Management
Tập Trung Hóa
Một nơi duy nhất để lưu trữ, quản lý và kiểm soát toàn bộ bí mật.
Kiểm Soát Truy Cập Chặt Chẽ
Tuân thủ "Đặc Quyền Tối Thiểu" (Bài 7). App A chỉ đọc được secret A, App B chỉ đọc được secret B.
Khả Năng Xoay Vòng (Rotation)
Dễ dàng thay đổi mật khẩu (ví dụ: 30 ngày một lần) mà không cần build hay deploy lại bất kỳ ứng dụng nào.
Kiểm Toán (Auditing)
Ghi log chi tiết: "Ai đã truy cập bí mật nào? Khi nào?". Cực kỳ quan trọng để điều tra sự cố.
Các Công Cụ Phổ Biến
HashiCorp Vault
Là "tiêu chuẩn vàng" (gold standard) trong thế giới secret management. Mã nguồn mở, cực kỳ mạnh mẽ, có thể tự host. Hỗ trợ bí mật động, mã hóa, ...
Cloud Secrets Managers
Các nhà cung cấp cloud đều có dịch vụ riêng: AWS Secrets Manager, GCP Secret Manager, và Azure Key Vault. Rất dễ sử dụng nếu bạn đã ở trên cloud đó.
Git-based (SOPS, git-crypt)
Dành cho GitOps. Các công cụ như SOPS (của Mozilla) cho phép bạn mã hóa file YAML chứa secret và... commit thẳng vào Git. Rất an toàn, vì chỉ ai có key mới giải mã được.
Pipeline Đã Sạch Sẽ!
Tuyệt vời! Pipeline của chúng ta giờ đã hoàn toàn "sạch sẽ": không có lỗ hổng trong code, thư viện, container, và không còn bất kỳ bí mật nào bị hardcode.
Vậy, pipeline đã xong. Bước tiếp theo là gì? Đó là "Nơi" mà pipeline này sẽ deploy ứng dụng lên: Hạ Tầng (Infrastructure).