Vault hoạt động như thế nào
Mục tiêu của bài
Sau khi đọc xong, bạn sẽ:
- Mô tả được 3 interface tương tác với Vault (CLI, HTTP API, UI) và biết interface nào phù hợp với ngữ cảnh nào.
- Giải thích được workflow 5 bước từ lúc authenticate đến khi Vault trả dữ liệu về cho client.
- Hiểu cấu trúc của một Vault token: TTL, policies, capabilities. Vì sao token hết hạn bắt buộc phải authenticate lại.
- Tổng quát quyền truy cập tới path.
Ba interface của Vault
Vault không bắt buộc bạn dùng một giao diện duy nhất. Có 3 cách tương tác, mỗi cách phù hợp với một nhóm người dùng khác nhau:
| Interface | Đặc điểm | Dùng khi nào |
|---|---|---|
CLI (vault binary) | Wrapper mỏng trên HTTP API. Output dạng bảng hoặc text thuần. Hỗ trợ flag -format=json để parse tự động. | Vận hành thủ công, scripting, debug nhanh |
HTTP API (/v1/...) | Mọi endpoint đều là REST. Truyền token qua header X-Vault-Token. Trả JSON. | Tích hợp ứng dụng, CI/CD pipeline, SDK nội bộ |
| UI (trình duyệt web) | Giao diện đồ họa, có API Explorer tích hợp. Phù hợp với người mới. | Khám phá cấu trúc secrets engine, debug policy, quản trị lần đầu |
Điều quan trọng cần nắm: CLI thực chất chỉ là wrapper gọi HTTP API ở bên trong - hoàn toàn tương đương về chức năng. Cùng một thao tác có thể thực hiện qua cả hai cách:
# Dùng CLI
vault kv get secret/myapp/config
# Tương đương bằng HTTP API
curl -H "X-Vault-Token: $VAULT_TOKEN" \
$VAULT_ADDR/v1/secret/data/myapp/config
Cả hai lệnh trên gọi đến đúng một endpoint và trả về đúng một dữ liệu, nó chỉ khác ở cách bạn tương tác.
Luồng hoạt động của Vault
Mọi thao tác với Vault đều đi qua cùng một workflow 5 bước:
- Client gửi credentials đến auth method (username/password, role_id + secret_id, cloud IAM token...).
- Vault xác minh credentials xác minh nội bộ (với userpass) hoặc gọi sang hệ thống bên ngoài (AWS, Kubernetes...).
- Vault cấp token kèm TTL (thời gian sống) và danh sách policies xác định quyền.
- Client gửi mọi request tiếp theo với token đó thông qua header
X-Vault-Tokenhoặc biến môi trườngVAULT_TOKEN. - Vault kiểm tra mỗi request token còn hiệu lực không? Token có capability cần thiết tại path đó không? Nếu hợp lệ Vault sẽ trả dữ liệu.
Sơ đồ dưới đây minh họa luồng qua các thành phần của Vault. Nhấn vào để xem giải thích, hoặc nhấn "Phát" để xem theo thứ tự:
[Sơ đồ: Vault Authentication Workflow (5 bước)]
Token
Cấu trúc token
Sau khi authenticate, bạn có thể xem chi tiết token hiện tại:
vault token lookup
Các trường quan trọng cần biết:
id: giá trị thật của token — giữ bí mật tuyệt đối, không bao giờ log.accessor: ID phụ dùng để quản lý token (renew, revoke, lookup) mà không cần biết giá trị token thật.policies: danh sách policy áp dụng cho token này — quyết định những gì token được làm.ttl: thời gian sống còn lại tính bằng giây.renewable: token có thể được gia hạn không.expire_time: thời điểm token hết hạn tuyệt đối.
Hai loại token
Vault có hai loại token với đặc điểm khác nhau:
Service token ( tiền tố hvs.) | Batch token (tiền tố hvb.) | |
|---|---|---|
| Renewable | Có | Không |
| Tạo child token | Có | Không |
| Lưu trạng thái trên disk | Cần thiết | Không cần |
| Use case | Long-running service, operator | Workload ngắn hạn, hiệu năng cao |
TTL và renewal
Mỗi token có hai giới hạn thời gian:
- TTL hiện tại: khoảng thời gian còn lại trước khi hết hạn. Có thể gia hạn nhiều lần.
- Max TTL: giới hạn tổng thể - token không thể tồn tại quá giá trị này dù gia hạn nhiều lần. Mặc định system max TTL là 32 ngày.
Gia hạn token trước khi hết:
vault token renew # gia hạn token hiện tại
vault token renew -increment=2h # yêu cầu gia hạn thêm 2 giờ
Renewal thất bại nếu token đã đạt max TTL hoặc đã bị revoke - lúc đó phải authenticate lại để nhận token mới.
Periodic token là trường hợp đặc biệt: có TTL nhưng không có max TTL. Dành cho long-running service trong trường hợp này token sẽ sống mãi miễn là được renew trong cửa sổ TTL.
Khi token hết hạn, Vault tự động revoke token và toàn bộ lease/dynamic secret được cấp trong phiên đó, đây là cơ chế cleanup tự động quan trọng.
Accessor
Accessor là ID phụ của token. Bạn dùng accessor để:
- Renew hoặc revoke token của người dùng khác mà không cần biết giá trị token thật.
- Ghi vào audit log vì trong Audit không bao giờ log giá trị của token mà chỉ log accessor.
vault token renew -accessor <ACCESSOR>
vault token revoke -accessor <ACCESSOR>
Quy tắc vàng: chỉ log accessor, không bao giờ log token value.
Capabilities
Policy gán capabilities cho từng path cụ thể. Vault kiểm tra capabilities của token tại path được request trước khi trả dữ liệu.
| Capability | Mô tả |
|---|---|
create | Tạo dữ liệu tại path khi chưa tồn tại |
read | Đọc dữ liệu |
update | Sửa dữ liệu đã tồn tại |
patch | Cập nhật một phần dữ liệu (HTTP PATCH) |
delete | Xóa dữ liệu |
list | Liệt kê keys trong path |
sudo | Truy cập root-protected paths |
deny | Từ chối tuyệt đối — luôn override mọi capability khác |
Hai điểm cần ghi nhớ:
denyoverride tất cả: nếu bất kỳ policy nào códenycho path đó, request bị từ chối dù các policy khác cho phép.listkhông filter theo policy: tên của keys trong path có thể bị lộ dù token không córeadkhi thiết kế policy cần cẩn thận với điểm này.
Kiểm tra capabilities của token tại một path cụ thể:
vault token capabilities secret/data/myapp/config # kiểm tra token hiện tại
vault token capabilities <TOKEN> secret/data/foo # kiểm tra token cụ thể
Tóm tắt nhanh
- CLI, API, UI là 3 cách tương tác với Vault; CLI và API tương đương về chức năng vì CLI là wrapper của HTTP API.
- Mọi thao tác đều đi qua workflow: authenticate → nhận token → dùng token → Vault validate → trả dữ liệu.
- Token mang TTL và policies; khi hết hạn phải authenticate lại để nhận token mới.
- Dùng accessor để quản lý token an toàn mà không lộ giá trị token thật.
Tài liệu tham khảo
- Vault HTTP API — tài liệu API đầy đủ, dùng khi tích hợp qua REST
- Vault CLI Reference — danh sách toàn bộ subcommand và flag
- Tokens — Concepts — vòng đời token, TTL, renewal, accessor
- Auth Methods Overview — danh sách tất cả auth methods được hỗ trợ
Bắt tay vào thực hành
Hãy mở Codespace để làm bài thực hành tương ứng. Vault dev server sẽ tự khởi động sẵn cho bạn.
Lab: Thực hành workflow: authenticate, token lookup và revoke
Thời gian ước tính: 20 phút
Open in GitHub Codespaces →