HashiCorp Vault là công cụ mạnh mẽ để quản lý secret, nó cho phép bạn bảo vệ và kiểm soát quyền truy cập vào các API, password và certificate. Bài viết này sẽ trình bày một hướng dẫn chi tiết về cách cài đặt và thiết lập Vault.
1. Các bước chuẩn bị ban đầu
Đầu tiên, hãy 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. Tiến hành cài đặt Vault
Bạn cần thêm kho lưu trữ của HashiCorp để hệ thống có thể tải xuống gói 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. Thiết lập cấu hình cho Vault
Cài đặt biến môi trường
Để tránh sử dụng token mặc định, hãy đảm bảo bạn đã hủy thiết lập biến VAULT_TOKEN:
//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 tệp cấu hình
Tạo tệp config.hcl với nội dung 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
Giải thích các tùy chọn:
- storage “raft”: Sử dụng backend lưu trữ RAFT, dữ liệu sẽ được lưu trong thư mục
./vault/datavà định danh node lànode1. - listener “tcp”: Vault sẽ lắng nghe kết nối trên địa chỉ
0.0.0.0:8200vớ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ữ dữ liệu 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 trong một terminal khác
Ở 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 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 các phương thức xác thực 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. Thiết lập xác thực 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. Thiết lập 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"
Trong bài viết này, chúng ta đã đi qua quy trình cài đặt và cấu hình HashiCorp Vault và thiết lập các quyền truy cập và phương thức xác thực. Qua các bước chi tiết, bạn đã có thể triển khai Vault trên hệ thống của mình, tạo ra các cấu hình cho việc lưu trữ, thiết lập kết nối, và thực hiện các cuộc gọi API.