HashiCorp Vault là một công cụ quản lý secret, cho phép bạn lưu trữ và kiểm soát truy cập đến API keys, password hay certificate. Bài viết dưới đây sẽ hướng dẫn bạn cài đặt và cấu hình Vault chi tiết từng bước.
1. Chuẩn bị
Cập nhật hệ thống và cài đặt GPG:
// Lệnh này cập nhật danh sách gói và cài đặt GPG, giúp hệ thống kiểm tra tính hợp lệ của các key ký số. sudo apt update && sudo apt install gpg // Tải Về Key Ký Số Của HashiCorp wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg // xác nhận rằng key chính xác và không bị giả mạo gpg --no-default-keyring --keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg --fingerprint
2. Cài Đặt Vault
// Để hệ thống có thể tải gói Vault từ kho lưu trữ chính thức, bạn cần thêm repository của HashiCorp: echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list //Cập Nhật Và Cài Đặt Vault sudo apt update && sudo apt install vault // Kiểm tra phiên bản Vault đã cài đặt: vault -v
3. Cấu Hình Vault
Thiết lập biến môi trường
//Việc này giúp đảm bảo rằng bạn không sử dụng token mặc định, tránh sai sót khi khởi tạo Vault. unset VAULT_TOKEN
Tạo file cấu hình cho Vault
Tạo một file cấu hình config.hcl với nội dung như sau:
storage "raft" { path = "./vault/data" node_id = "node1" } listener "tcp" { address = "0.0.0.0:8200" tls_disable = "true" } api_addr = "http://127.0.0.1:8200" cluster_addr = "https://127.0.0.1:8201" ui = true
- storage “raft”: Sử dụng backend lưu trữ RAFT, dữ liệu sẽ được lưu trong thư mục
./vault/data
và định danh node lànode1
. - listener “tcp”: Vault sẽ lắng nghe kết nối trên địa chỉ
0.0.0.0:8200
với TLS bị vô hiệu hóa (phù hợp cho môi trường thử nghiệm). - api_addr & cluster_addr: Xác định địa chỉ API và địa chỉ cho cụm (cluster) của Vault.
- ui: Bật giao diện web để quản trị.
Tạo thư mục lưu trữ Backend RAFT
//Lệnh này đảm bảo rằng Vault có nơi để lưu trữ thông tin theo cấu hình backend RAFT. mkdir -p ./vault/data
Khởi chạy Vault Server
vault server -config=config.hcl
Thiết lập địa chỉ API và Token
Ở một terminal khác, thiết lập biến môi trường cho địa chỉ API của Vault:
export VAULT_ADDR='http://20.191.142.182:8200' export VAULT_TOKEN="hvs.cF0tdh2dgR1CTpTK3vMfOVjN"
Khởi tạo (Initialize) Vault
Quá trình khởi tạo sẽ tạo ra các unseal keys và root token. Hãy ghi lại những thông tin này vì nó sử dụng cho mở khóa và quản trị Vault.
vault operator init
4. Cấu hình và quản lý quyền truy cập
Vault hỗ trợ nhiều phương thức xác thực (authentication) và quản lý quyền truy cập (policy). Dưới đây là một số ví dụ cơ bản:
4.1. Cấu hình AppRole
AppRole là phương thức xác thực cho phép máy chủ hoặc ứng dụng đăng nhập vào Vault thông qua role và secret ID.
Tạo role với các tùy chọn:
vault write auth/approle/role/my-role \ token_type=batch \ secret_id_ttl=10m \ token_ttl=20m \ token_max_ttl=30m \ secret_id_num_uses=40
- token_type=batch: Chỉ định loại token sẽ được tạo ra khi đăng nhập bằng AppRole. Token loại batch thường có thời gian sống cố định và không thể gia hạn, phù hợp cho các tác vụ tự động (batch jobs) hoặc các ứng dụng cần token ngắn hạn.
- secret_id_ttl=10m: Thời gian sống (Time To Live – TTL) của Secret ID được cấp cho AppRole. Sau 10 phút, Secret ID sẽ hết hạn và không thể sử dụng để đăng nhập nữa.
- token_ttl=20m: Thời gian sống ban đầu của token được cấp sau khi đăng nhập thành công bằng AppRole. Token này sẽ có hiệu lực trong 20 phút kể từ thời điểm cấp.
- token_max_ttl=30m: Thời gian sống tối đa của token, tức là dù token có thể được gia hạn hay kéo dài thêm, thời gian sống của nó sẽ không vượt quá 30 phút.
- secret_id_num_uses=40: Xác định số lần tối đa mà một Secret ID có thể được sử dụng để đăng nhập.
Đăng nhập bằng AppRole:
vault read auth/approle/login role_id="f3142fd8-63c6-4a4e-9408-3bd27fe395d6" secret_id="abc39e14-8b83-75fd-0bf0-34dc581ebf26"
Sử dụng CURL cho AppRole:
curl --request POST \ --header "Content-Type: application/json" \ --data '{"role_id": "6b4870aa-a130-ceaf-6aee-2edc14b3820a", "secret_id": "75533fb1-fa2d-f1d1-938a-fd8cff1a1c0f"}' \ http://10.14.171.25:8200/v1/auth/approle/login
Đọc dữ liệu secret:
curl --header "X-Vault-Token: hvs.CAESIImc3lTH-Fbih7KQP27CSJmScBsYJxID9wJNJ95Oh2OcGh4KHGh2cy5KOHhSeUdLWEJRaHZPZXRUZFpUV3JWOXk" \ --header "X-Vault-Namespace: admin" \ http://10.14.171.25:8200/v1/secret/data/myapp | jq -r ".data"
Kiểm tra đăng nhập AppRole với token mới:
vault write auth/approle/login role_id="f3142fd8-63c6-4a4e-9408-3bd27fe395d6" secret_id="385ffc99-aeff-4c53-cf6a-4cc6d8d9b188"
4.2. Quản lý chính sách
Chính sách (policy) giúp bạn kiểm soát các quyền truy cập đến các đường dẫn (path) trong Vault.
Ví dụ, tạo file policy (enable_secrets.hcl) với nội dung:
path "sys/mounts/*" { capabilities = ["create", "update", "delete", "read"] }
Tải policy vào Vault:
vault policy write enable_secrets enable_secrets.hcl
Gán policy cho người dùng qua phương thức userpass:
vault write auth/userpass/users/admin \ password="<password>" \ policies="enable_secrets"
Gán policy cho AppRole:
vault write auth/approle/role/my-role policies="enable_secrets"