+2

Series HashiCorp Vault Thực chiến | Bài 1: Chấm dứt kỷ nguyên "Hardcode" file .env

Chào anh em! Chắc hẳn anh em làm backend ai cũng quen thuộc với file .env. Nó sinh ra để giữ cho các thông tin nhạy cảm (mật khẩu DB, Secret Key của SSO) không bị đẩy lên Git.

Nhưng hãy tưởng tượng một kịch bản thực tế: Hệ thống của anh em có 20 Microservices khác nhau, chạy trên nhiều server. Một ngày đẹp trời, công ty yêu cầu đổi mật khẩu Database định kỳ 1 tháng/lần để bảo mật. Anh em sẽ làm gì? Đi SSH vào từng server, mở 20 file .env ra sửa tay, rồi khởi động lại từng cái service? Quá thủ công, quá rủi ro và chắc chắn sẽ có lúc gây ra downtime (sập hệ thống).

HashiCorp Vault ra đời để giải quyết triệt để bài toán này. Nó đóng vai trò là một "Két sắt trung tâm" duy nhất trong hệ thống, nơi mọi ứng dụng phải đến gõ cửa, xuất trình thẻ căn cước, thì mới được cấp chìa khóa (mật khẩu) để dùng.

1. HashiCorp Vault là gì?

Đừng nhầm lẫn Vault với các trình quản lý mật khẩu cá nhân như 1Password hay LastPass. Vault là một Identity-based Secret and Encryption Management System (Hệ thống quản lý mã hóa và bí mật dựa trên danh tính), được thiết kế riêng cho Máy móc (Machines) và Ứng dụng (Applications) giao tiếp với nhau.

Thay vì ứng dụng của bạn cầm sẵn mật khẩu DB, ứng dụng sẽ gọi API lên Vault, Vault sẽ kiểm tra xem ứng dụng này có quyền không, rồi mới trả mật khẩu về cho ứng dụng xài trên RAM (In-memory).

2. Bốn khái niệm "Cốt tủy" của Vault

Để làm chủ Vault, anh em bắt buộc phải hiểu 4 thành phần cấu tạo nên nó:

A. Secrets Engines (Động cơ sinh bí mật)

Đây là nơi lưu trữ hoặc tự động tạo ra các bí mật.

  • Key-Value (KV): Nơi lưu trữ tĩnh (giống dạng JSON) cho các chuỗi cấu hình cơ bản.
  • Database: Vault có thể kết nối với MySQL/PostgreSQL. Thay vì lưu 1 cái pass cố định, Vault có thể tự động sinh ra một user/pass mới tinh mỗi khi có 1 Microservice yêu cầu, và tự động xóa user đó sau 1 tiếng. (Đây gọi là Dynamic Secrets - Tính năng sát thủ của Vault).
  • Transit: Vault đóng vai trò như một máy mã hóa (Encryption as a Service). Ứng dụng gửi data thô lên Vault, Vault trả về data đã mã hóa để lưu vào DB. Ứng dụng không cần tự viết hàm mã hóa nữa.

B. Authentication Methods (Phương thức xác thực)

Làm sao Vault biết được cái Microservice (ví dụ: Ticket Service) đang gọi lên xin mật khẩu là "hàng auth" chứ không phải do hacker giả mạo? Vault cung cấp nhiều cách để Server chứng minh danh tính:

  • AppRole: Thiết kế riêng cho các ứng dụng tự động (như CI/CD, kịch bản bash script).
  • Kubernetes/AWS: Vault tích hợp sâu vào hạ tầng cloud, tự động nhận diện Pod hay EC2 instance nào đang gọi lên.
  • Token: Cách cơ bản nhất, dùng chuỗi token để giao tiếp.

C. Policies (Luật phân quyền)

Vault áp dụng nguyên tắc RBAC (Role-Based Access Control) cực kỳ chặt chẽ qua file cấu hình HCL (HashiCorp Configuration Language). Ví dụ: Anh em có thể định nghĩa luật "Service Bán Vé chỉ được phép ĐỌC mật khẩu của DB Bán Vé, tuyệt đối không được ghi hay xóa, và cấm không được đụng vào DB Nhân sự".

D. Audit Devices (Nhật ký thanh tra)

Mọi hành động chọc vào Vault (ai đăng nhập, service nào xin cấp mật khẩu, xin lúc mấy giờ, thất bại hay thành công) đều được ghi log lại chi tiết bằng chuẩn JSON. Không một hacker hay nhân viên nội bộ nào có thể truy xuất dữ liệu mà không để lại dấu vết.

3. Tại sao hệ thống lớn bắt buộc phải có Vault?

Nếu anh em đang thiết kế hệ thống cho các nhà ga, trạm thu phí (nơi có nhiều thiết bị phần cứng giao tiếp với server trung tâm), Vault mang lại 3 lợi thế khổng lồ:

  1. Loại bỏ Secret Sprawl (Bí mật rơi vãi): Không còn chuyện dev gửi mật khẩu production cho nhau qua chat, hay lỡ tay commit file .env lên Bitbucket. Mọi thứ chỉ nằm ở 1 nơi duy nhất.
  2. Tự động thu hồi (Revocation): Chẳng may một con server ở trạm bị hack, anh em chỉ cần lên Vault bấm nút "Revoke", toàn bộ hệ thống ngay lập tức cắt quyền truy cập của con server đó vào Database trung tâm.
  3. Tự động luân chuyển (Rotation): Mật khẩu DB tự động đổi 24h/lần mà code ứng dụng không cần sửa bất cứ dòng nào.

Tổng kết Bài 1

Vault không phải là công cụ dễ học ngày 1 ngày 2, nó đòi hỏi tư duy thiết kế bảo mật rất vững. Nhưng một khi đã setup thành công, anh em có thể kê cao gối ngủ mà không lo hệ thống bị lộ thông tin nhạy cảm.

Ở Bài 2, để bắt đầu thực hành, bạn muốn chúng ta đi vào việc Cài đặt Vault Dev Server cục bộ và thao tác bằng CLI, hay muốn tìm hiểu ngay cách tích hợp Vault vào dự án Backend (dùng API/SDK) để lấy cấu hình thay cho file .env?


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí