DevOps Kiến Thức Linux

Hướng dẫn sử dụng Vault

Vault-logo-congdonglinux

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

  1. Đả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

  1. 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.

  1. 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ụng  mlock() để 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óa  mlock().
  • 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ụng  inmem (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 đặt  VAULT_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.

  1. Để đă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.

  1. 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ý !

Tags

Add Comment

Click here to post a comment

Đă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ý !