HashiCorp Vault là một hệ thống quản lý secret tập trung, mã nguồn mở. Nó cung cấp một cách an toàn và đáng tin cậy để lưu trữ và phân phối các secret như khóa API, mã thông báo truy cập và mật khẩu.
Mục tiêu của Vault là quản lý và bảo vệ secret trong cơ sở hạ tầng động. Từ quan điểm ứng dụng động, Vault cung cấp các secret động và triển khai danh sách kiểm soát truy cập (ACL), trong đó mật khẩu là động và liên tục thay đổi trong trường hợp bị rò rỉ. Ai có quyền truy cập vào các mật khẩu này sẽ được ACL thiết lập và bảo vệ.
Hướng dẫn này bao gồm các nguyên tắc cơ bản về cách sử dụng Vault cũng như quy trình thiết lập máy chủ và máy khách Vault.
secret là gì?
secret là thông tin xác thực hoặc khóa cho phép bạn có quyền truy cập vào một tài nguyên cụ thể hoặc vào một hệ thống, ví dụ: mật khẩu, khóa API, mã thông báo truy cập hoặc mật khẩu cơ sở dữ liệu.
Trước khi bắt đầu
- Đảm bảo rằng bạn đã làm theo hướng dẫn Bắt đầu và Bảo mật máy chủ của bạn . Đảm bảo rằng tên máy chủ của Linode được đặt . Kiểm tra tên máy chủ Linode của bạn. Lệnh đầu tiên sẽ hiển thị tên máy chủ ngắn của bạn và lệnh thứ hai sẽ hiển thị tên miền đủ điều kiện (FQDN) của bạn.
hostname
hostname -f
2. Cập nhật hệ thống của bạn:
sudo apt update
Cài đặt Vault
- Tải xuống tệp nhị phân Vault cho hệ điều hành Linux trên máy chủ Linode. Bạn có thể tìm thấy phiên bản mới nhất của tệp nhị phân tại trang tải xuống Dự án Vault .
sudo wget https://releases.hashicorp.com/vault/1.12.2/vault_1.12.2_linux_amd64.zip
2. Giải nén kho lưu trữ.
sudo unzip vault_1.12.2_linux_amd64.zip
3. Thêm tệp nhị phân vào đường dẫn có thể truy cập trong thiết bị đầu cuối bằng cách di chuyển tệp nhị phân sang thư mục nhị phân cục bộ của Linux.
sudo mv vault /usr/local/bin
4. Trong thư mục được giải nén có một tệp nhị phân vault duy nhất có thể được sử dụng mà không cần quá trình thiết lập hoặc cài đặt. Thực thi nhị phân bằng cách chạy các lệnh sau:
cd /usr/local/bin ./vault
Bây giờ bạn có thể khởi chạy Vault từ bất kỳ thư mục hoặc người dùng nào trên hệ thống.
Khởi động máy chủ “dev”
Để tìm hiểu chức năng và cú pháp sử dụng Vault, bạn cần thiết lập máy chủ. Bạn có thể sử dụng máy chủ phát triển sẵn có không được thiết kế để sẵn sàng sản xuất nhưng được sử dụng để tìm hiểu những điều cần thiết và thử nghiệm các phần chức năng khác nhau.
- Khởi động máy chủ phát triển Vault bằng cách chạy lệnh sau:
vault server -dev
Theo mặc định, máy chủ phát triển lưu trữ tất cả bộ nhớ phụ trợ trong bộ nhớ nên đây chỉ là giải pháp tạm thời. Do đó, mọi secret bạn tạo và lưu trữ sẽ bị mất khi bạn dừng máy chủ. Một đầu ra tương tự như sau xuất hiện:
==> Vault server configuration:
Api Address: http://127.0.0.1:8200
Cgo: disabled
Cluster Address: https://127.0.0.1:8201
Go Version: go1.15.8
Listener 1: tcp (addr: "127.0.0.1:8200", cluster address: "127.0.0.1:8201", max_request_duration: "1m30s", max_request_size: "33554432", tls: "disabled")
Log Level: info
Mlock: supported: true, enabled: false
Recovery Mode: false
Storage: inmem
Version: Vault v1.7.0-rc1
Version Sha: 9af08a1c5f0f855984a1fa56d236675d167f578e
==> Vault server started! Log data will stream in below:
2021-03-18T16:46:07.284+0530 [INFO] proxy environment: http_proxy= https_proxy= no_proxy=
2021-03-18T16:46:07.285+0530 [WARN] no `api_addr` value specified in config or in VAULT_API_ADDR; falling back to detection if possible, but this value should be manually set
2021-03-18T16:46:07.346+0530 [INFO] rollback: starting rollback manager
WARNING! dev mode is enabled! In this mode, Vault runs entirely in-memory
and starts unsealed with a single unseal key. The root token is already
authenticated to the CLI, so you can immediately begin using Vault.
You may need to set the following environment variable:
$ export VAULT_ADDR='http://127.0.0.1:8200'
The unseal key and root token are displayed below in case you want to
seal/unseal the Vault or re-authenticate.
Unseal Key: M+9B2DU9YniT0oqp7PO32sk0XWfgHL0JHekpC6Ju1pA=
Root Token: s.pOkS8XqKP5F7sAmgvHJPcaqF
Development mode should NOT be used in production installations!
2.Thêm địa chỉ Vault và mã thông báo dưới dạng biến môi trường trong thiết bị đầu cuối mới, điều này đảm bảo rằng Vault có thể tự động kết nối với máy chủ vault mà không cần phải chỉ định địa chỉ mỗi lần.
export VAULT_ADDR='http://127.0.0.1:8200'
export VAULT_DEV_ROOT_TOKEN_ID=s.SHYYqfhBQm8vIcwjuXJcJ0yk
3.Để xác minh rằng máy chủ đang chạy, hãy sử dụng lệnh sau:
vault status
Một đầu ra tương tự như sau xuất hiện:
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 1
Threshold 1
Version 1.7.0-rc1
Storage Type inmem
Cluster Name vault-cluster-83efa92c
Cluster ID 97f970c7-f4ef-71e2-1c7c-db97223296b3
HA Enabled false
Bây giờ bạn đã khởi động thành công máy chủ dev và có thể bắt đầu tìm hiểu về quá trình tạo secret.
Tạo secret
Bây giờ máy chủ nhà phát triển đã hoạt động, hãy xem cách đọc và ghi secret đầu tiên của bạn.
1.Viết secret vào secrets engine key/value trên máy chủ nhà phát triển:
vault kv put secret/ssh alexis=password
Lệnh ghi cặp key/value alexis=password Trong đường dẫn secret/ssh. Sử dụng đường dẫn secret vì đó là đường dẫn được xác định trước trên máy chủ nhà phát triển.
2. Để lấy lại secret, hãy chạy lệnh sau:
vault kv get secret/ssh
Điều này hiển thị tất cả các secret key/value được lưu trữ trong đường dẫn secret/ssh:
====== Metadata ======
Key Value
--- -----
created_time 2021-03-18T11:49:20.888146913Z
deletion_time n/a
destroyed false
version 1
==== Data ====
Key Value
--- -----
rajie password
3.Để xóa một secret, hãy chạy lệnh sau:
vault kv delete secret/ssh
Một đầu ra tương tự như sau xuất hiện:
Bây giờ bạn đã nắm được cách tạo, truy xuất và xóa secret, bạn có thể xem qua các secrets engine.
Secrets Engines
secrets engine xác định loại secret nào có thể được lưu trữ trong đường dẫn. Ví dụ: Vault có nhiều secrets engine khác nhau có thể được sử dụng để lưu trữ nhiều loại secret khác nhau như secret key/value, thông tin xác thực cơ sở dữ liệu và khóa SSH. Trong trường hợp máy chủ nhà phát triển, secrets engine được định cấu hình cho đường dẫn secret thuộc loại key/value, có nghĩa là đường dẫn đó chỉ có thể lưu trữ các secret ở định dạng key/value.
Để kích hoạt secrets engine của riêng bạn bằng đường dẫn riêng, mỗi đường dẫn được tách biệt với các phần khác:
vault secrets enable -path=database-creds kv
Trong trường hợp này, bạn tạo một đường dẫn có tên là cơ sở dữ liệu-tín dụng sử dụng secrets engine key/value.
Liệt kê các đường dẫn secret trên máy chủ bằng cách chạy lệnh:
vault secrets list
Điều này hiển thị tất cả các đường dẫn secret và secrets engine mà chúng đã được cấu hình để sử dụng.
Một đầu ra tương tự như sau xuất hiện:
Path Type Accessor Description
---- ---- -------- -----------
cubbyhole/ cubbyhole cubbyhole_0fb3f4cb per-token private secret storage
database-creds/ kv kv_c2460aa1 n/a
identity/ identity identity_fca9f3c8 identity store
secret/ kv kv_ca428525 key/value secret storage
sys/ system system_357b7655 system endpoints used for control, policy and debugging
Tạo secret trong đường dẫn cơ sở dữ liệu-tín dụng mới được tạo bằng cách chạy:
vault kv put database-creds/dev alexis=password!
Điều này tạo ra một đường dẫn trong cơ sở dữ liệu-creds/dev trong đó secret key/value alexis=password! được lưu trữ:
Success! Data written to: database-creds/dev
Tính đến thời điểm này, bạn đã tương tác với máy chủ nhà phát triển, máy chủ này sẽ tự động mở niêm phong Vault và thiết lập bộ nhớ trong bộ nhớ. Bây giờ bạn đã biết kiến thức cơ bản về Vault, bạn có thể xem cách triển khai máy chủ Vault vào môi trường thực.
Trước khi bắt đầu triển khai máy chủ Vault, hãy đảm bảo rằng bạn đã chấm dứt quá trình máy chủ nhà phát triển. Bạn có thể thực hiện việc này bằng cách sử dụng tổ hợp bàn phím CTRL+C. Đồng thời hủy đặt VAULT_TOKEN
biến môi trường bằng lệnh
unset VAULT_TOKEN
Triển khai máy chủ Vault
Để thiết lập máy chủ Vault của riêng bạn, bạn cần bắt đầu bằng cách thiết lập tệp cấu hình chỉ định phần phụ trợ lưu trữ mà máy chủ sử dụng và địa chỉ API trong số các tùy chọn khác.
Tạo một tập tin cấu hình mới:
nano config.hcl
Thêm nội dung sau vào config.hcl
tập tin. Đảm bảo rằng bạn thay thế <LinodeIPaddress>
bằng địa chỉ IP của máy chủ Linode và lưu tệp.
storage "raft" {
path = "./vault/data"
node_id = "node1"
}
listener "tcp" {
address = "<LinodeIPaddress>:8200"
tls_disable = "true"
}
disable_mlock = true
api_addr = "http://127.0.0.1:8200"
cluster_addr = "https://127.0.0.1:8201"
ui = true
Trong đó:
disable_mlock
– Theo mặc định, Vault sử dụngmlock()
để khóa các trang bộ nhớ quy trình của nó, ngăn không cho chúng bị hoán đổi vào đĩa. Bạn phải luôn cố gắng bật tính năng này (nó được bật theo mặc định) như được mô tả trong phần tăng cường sản xuất khi vận hành Vault trong sản xuất. Tuy nhiên, tùy chọn này không được hỗ trợ trên một số nền tảng nhất định như macOS hoặc Windows, vì vậy, để đây là một ví dụ hữu ích và di động nhất, nó sẽ vô hiệu hóamlock()
.ui
– Theo mặc định, giao diện người dùng web Vault không được bật; ví dụ này cho phép nó.storage
– Đây là phần phụ trợ vật lý mà Vault sử dụng để lưu trữ. Cho đến thời điểm này, máy chủ nhà phát triển đã sử dụnginmem
(trong bộ nhớ), nhưng ví dụ trên sử dụng bộ lưu trữ tích hợp (bè), một chương trình phụ trợ sẵn sàng sản xuất hơn nhiều.listener
– Một hoặc nhiều trình nghe xác định cách Vault lắng nghe các yêu cầu API. Ví dụ trên nghe trên cổng localhost 8200 không có TLS. Trong môi trường của bạn được đặtVAULT_ADDR=http://127.0.0.1:8200
để ứng dụng khách Vault kết nối mà không cần TLS.api_addr
– Chỉ định địa chỉ cần quảng cáo để định tuyến các yêu cầu của khách hàng.cluster_addr
– Cho biết địa chỉ và cổng được sử dụng để liên lạc giữa các nút Vault trong một cụm.
Tạo thư mục lưu trữ phụ trợ mà bạn đã chỉ định trong tệp config.hcl:
mkdir -p vault/data
Khởi động máy chủ bằng cách chạy lệnh vault server và chỉ định tệp cấu hình sẽ được sử dụng:
vault server -config=config.hcl
Trong thiết bị đầu cuối mới, thêm địa chỉ Vault làm biến môi trường:
export VAULT_ADDR='http://:8200'
Để khởi tạo máy chủ, hãy chạy lệnh sau:
vault operator init
Quá trình khởi tạo đưa ra hai thông tin cực kỳ quan trọng: khóa không được niêm phong và mã thông báo gốc ban đầu. Đây là lần duy nhất Vault biết tất cả dữ liệu này và cũng là lần duy nhất các khóa không được niêm phong ở gần nhau đến vậy. Do đó, điều cực kỳ quan trọng là phải giữ an toàn cho những thông tin này.
Mở khóa vault bằng cách chạy lệnh sau:
vault operator unseal
Để hủy niêm phong vault, bạn cần nhập lệnh này ba lần và chỉ định 3 trong số 5 khóa hủy niêm phong được tạo trong quá trình khởi tạo.
Sau khi nhập 3 trong số 5 khóa không được niêm phong, giá trị được niêm phong sẽ được đặt thành false.
Unseal Key (will be hidden):
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 5
Threshold 3
Version 1.7.0-rc1
Storage Type raft
Cluster Name vault-cluster-3abb9a8f
Cluster ID 2591892a-c64a-24f8-1334-e12ce4cf67dd
HA Enabled true
HA Cluster n/a
HA Mode standby
Active Node Address <none>
Raft Committed Index 24
Raft Applied Index 24
Đăng nhập vào vault bằng cách chạy lệnh sau:
vault login <root-token>
Giao diện người dùng web
Vault có giao diện người dùng (UI) dựa trên web cho phép bạn hủy niêm phong, xác thực và quản lý các chính sách cũng như secrets engine dễ dàng hơn nhiều.
- Để đăng nhập vào giao diện người dùng web, hãy điều hướng đến URL sau trong trình duyệt của bạn sau khi vault được mở khóa bằng cách nhập
http:\\<LinodeIPaddress>:8200
.
2. Bạn được nhắc đăng nhập bằng mã thông báo gốc của mình, bạn cũng có thể sử dụng các phương tiện xác thực khác.
Tạo người dùng mới với phương thức xác thực được đặt thành tên người dùng và mật khẩu.
Bạn cũng có thể tạo đường dẫn mới và chỉ định secrets engine sẽ sử dụng.
Định cấu hình máy khách Vault
Ứng dụng khách Vault yêu cầu thông tin xác thực và nhị phân của vault. Trong trường hợp này, bạn đã tạo thông tin xác thực tùy chỉnh cho khách hàng của mình, tuy nhiên tài khoản không có các quyền cần thiết để truy cập bất kỳ secret nào.
Quyền truy cập trong Vault được thiết lập và quản lý bằng các chính sách truy cập được đặt cấu hình để hoạt động giống như danh sách kiểm soát quyền truy cập.
- Sửa đổi chính sách mặc định để cho phép bất kỳ người dùng nào được gán quyền cho chính sách này truy cập vào một đường dẫn cụ thể. trong giao diện người dùng, đi tới Chính sách và nhấp vào mặc định .
path"alexis-passwords/*"{
capabilities = ["create","update","read"]
}
# Allow tokens to look up their own properties
path "auth/token/lookup-self" {
capabilities = ["read"]
}
# Allow tokens to renew themselves
path "auth/token/renew-self" {
capabilities = ["update"]
}
# Allow tokens to revoke themselves
path "auth/token/revoke-self" {
capabilities = ["update"]
}
Thêm biến môi trường địa chỉ vault vào máy khách bằng cách chạy lệnh sau:
export VAULT_ADDR='’
Xác thực máy chủ với máy khách bằng cách chạy lệnh sau:
./vault login -method=userpass username= password=
Key Value
--- -----
token s.ZXWpD0jVKBYHQwniSVxaB4yw
token_accessor XiuHMe8B5HyBrWQqa1W313fv
token_duration 768h
token _renewable true
token_policies ['default"]
identity_policies []
policies ["default"]
token_mets_username alexis
Cluster ID 97f970c7-f4ef-71e2-1c7c-db97223296b3
HA Enabled false
Sau khi xác thực, thông tin đăng nhập của bạn sẽ được lưu trên thư mục chính của người dùng mà bạn đã đăng nhập. Bây giờ bạn có thể truy cập các đường dẫn và chức năng đã được chỉ định trong chính sách mặc định.
Thêm thông tin
Bạn có thể muốn tham khảo các tài nguyên sau để biết thêm thông tin về chủ đề này. Mặc dù những thông tin này được cung cấp với hy vọng chúng sẽ hữu ích nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc kịp thời của các tài liệu được lưu trữ bên ngoài.
Đăng ký liền tay Nhận Ngay Bài Mới
Subscribe ngay
Cám ơn bạn đã đăng ký !
Lỗi đăng ký !
Add Comment