Cách quản lý bảo mật một cách an toàn với Hashicorp Vault trên Ubuntu 20.04
Giới thiệuĐiều này xác minh rằng mã thông báo ứng dụng ít đặc quyền không thể thực hiện bất kỳ hành động hủy hoại hoặc truy cập các giá trị bí mật khác ngoài các quy định rõ ràng trong chính sách Vault của nó. Nếu bạn muốn tiếp tục sử dụng mã thông báo chỉ đọc, hãy chắc chắn ghi lại ở đâu đó an toàn để sử dụng trong tương lai. Show
Trong hướng dẫn này, bạn sẽ:
Mặc dù hướng dẫn này chỉ trình diễn cách sử dụng mã thông báo không có đặc quyền, tài liệu Vault có nhiều ví dụ về các cách bổ sung để lưu trữ và truy cập bí mật cũng như các phương thức xác thực thay thế. Như với bất kỳ dịch vụ nào quản lý thông tin nhạy cảm, bạn nên xem xét việc đọc tài liệu bổ sung về các thực hành tốt nhất triển khai của Vault trước khi sử dụng nó trong môi trường giống như sản xuất. Ví dụ, hướng dẫn làm cứng sản xuất của Vault bao gồm các chủ đề như chính sách, mã thông báo gốc và kiểm toán. Điều kiện tiên quyếtĐiều này xác minh rằng mã thông báo ứng dụng ít đặc quyền không thể thực hiện bất kỳ hành động hủy hoại hoặc truy cập các giá trị bí mật khác ngoài các quy định rõ ràng trong chính sách Vault của nó. Nếu bạn muốn tiếp tục sử dụng mã thông báo chỉ đọc, hãy chắc chắn ghi lại ở đâu đó an toàn để sử dụng trong tương lai.
--- ----- : Vault tạo chứng chỉ TLS tự ký khi bạn cài đặt gói lần đầu tiên. Nếu bạn không có chứng chỉ tên miền hoặc chứng chỉ TLS để sử dụng với Vault nhưng muốn làm theo các bước trong hướng dẫn này, bạn có thể bỏ qua xác minh TLS bằng cách thêm -tls-skip-verify flag to the commands in this tutorial, or by defining the VAULT_SKIP_VERIFY environment variable. --- -----HASHICORP cung cấp Vault là một gói Debian / Ubuntu điển hình, vì vậy chúng tôi sẽ thông qua các bước thông thường để thêm kho lưu trữ gói của họ vào danh sách các nguồn gói của máy chủ: Trước tiên, hãy thêm mã gpg vào trình quản lý gói của bạn, để hệ thống của bạn tin tưởng vào kho gói của họ: --- -----
Bạn cũng có thể kiểm tra rằng mã thông báo không có khả năng này không thể thực hiện các hoạt động khác, chẳng hạn như danh sách Bí mật trong Vault.
Đầu ra. Vault v1.8.5 (647eccfe0bd5817bdd8628f3c3171402dfc8a8fc)
Bước 2 - Cấu hình VaultCài đặt gói Vault tự động tạo Vault Vault Người dùng trên hệ thống của bạn và thiết lập một hệ thống Dịch vụ để chạy kho tiền trong nền. Chúng ta cần thực hiện một vài thay đổi về cấu hình mặc định của mình để sử dụng các chứng chỉ HTTPS được tạo bởi Let's Encrypt. your_token_value vault user on your system and sets up a system service for running Vault in the background. We need to make a couple of changes to its default configuration in order to use the HTTPS certificates generated by Lets Encrypt. Note : Trong hướng dẫn này và theo mặc định, Vault sử dụng phụ trợ hệ thống tệp để lưu trữ bí mật được mã hóa trên hệ thống tệp cục bộ tại / Opt / Vault . Điều này phù hợp với các triển khai cục bộ hoặc một máy chủ không cần phải được nhân rộng. Các phụ trợ Vault khác, chẳng hạn như phần phụ trợ lãnh sự, sẽ lưu trữ bí mật được mã hóa khi nghỉ trong một kho lưu trữ / giá trị phân tán. . mypassword /opt/vault. This is suitable for local or single-server deployments that do not need to be replicated. Other Vault backends, such as the Consul backend, will store encrypted secrets at rest within a distributed key/value store. Cấu hình mặc định của Vault được lưu trữ trong /etc/vault.d/vault.hcl . Bạn sẽ sử dụng tệp này để kiểm soát các tùy chọn khác nhau trong Vault, chẳng hạn như các bí mật được mã hóa được lưu trữ. Mở Vault.hcl Sử dụng Nano hoặc yêu thích của bạn Trình soạn thảo văn bản. vault.hcl using nano or your favorite text editor.
Tìm Trình nghe "TCP" của tệp chứa khối này. Nếu bạn đang sử dụng nano, you can press Ctrl+W then enter listener tcp to find that line directly: /etc/vault.hcl Người nghe "TCP" { Địa chỉ = "0,0.0.0.0:8200" tls_cert_file = "/ opt/vault/tls/tls.crt" tls_key_file = "/opt/vault/tls/tls.key" ... Không Chỉnh sửa TLS_CERT_FILE và TLS_KEY_FILE Dòng để chỉ vào Let Let của bạn mã hóa chứng chỉ và tệp chính. Đừng quên thay thế bằng tên miền của riêng bạn thay cho của bạn_domain một phần của mỗi dòng. tls_cert_file and tls_key_file lines to point to your Lets Encrypt certificate and key files. Dont forget to substitute in your own domain name in place of the highlighted your_domain part of each line. /etc/vault.hcl Người nghe "TCP" { ... tls_cert_file = "/ etc / letsencrypt / live / your_domain /fullchain.pem" tls_key_file = "/ etc / letsencrypt / live / your_domain /privkey.pem" Không Lưu ý : Bạn cũng nên thay đổi Địa chỉ = "0,0.0.0:8200" thành Địa chỉ = "127.0.0.1:8200" để ngăn kết nối bên ngoài với máy chủ này ngay bây giờ. 127.0.0.1 là một địa chỉ dành riêng cho localhost. Điều này là để đảm bảo rằng dịch vụ không được tiếp xúc với Internet công cộng trước khi nó được bảo mật đúng cách. Bạn có thể cập nhật sau này, nhưng bây giờ, thay đổi cấu hình này sẽ cho phép chúng ta sử dụng Vault và giải quyết chính xác tên miền được bảo mật HTTPS. .: You should also change address = "0.0.0.0:8200" to address = 127.0.0.1:8200 to prevent external connections to this server for now. 127.0.0.1 is a reserved address for localhost only. This is to ensure that the service is not exposed to the public internet before it has been properly secured. You can update this later, but for now, this configuration change will let us use the vault command and correctly resolve the HTTPS-secured domain name. Lưu và đóng tệp. Nếu bạn đang sử dụng nano, press Ctrl+X, then Y when prompted to save the file, and Enter to confirm. Tiếp theo, Vault Người dùng hệ thống cũng cần sự cho phép để đọc các chứng chỉ này. Theo mặc định, các chứng chỉ và khóa riêng này chỉ có thể truy cập được bởi root . Để thực hiện những thứ này có sẵn một cách an toàn, chúng tôi sẽ tạo một nhóm đặc biệt có tên PKI để truy cập các tệp này. Chúng tôi sẽ tạo nhóm và sau đó thêm Vault Người dùng với nó.
Cập nhật các quyền trên hai thư mục trong / etc / letSencrypt để cho phép các thành viên pki nhóm để đọc nội dung. /etc/letsencrypt directory to allow members of the pki group to read the contents.
Sau đó thêm Vault Người dùng vào PKI Nhóm . Điều này sẽ cấp quyền truy cập Vault vào các chứng chỉ để có thể phục vụ các yêu cầu an toàn qua HTTPS. vault user to the pki group. This will grant Vault access to the certificates so that it can serve requests securely over HTTPS.
Là bước cuối cùng để thuận tiện, hãy thêm một quy tắc trong / etc / hosts để yêu cầu trực tiếp đến Vault vào localhost . /etc/hosts to direct requests to Vault to localhost. thay thế your_domain Trong lệnh sau với tên miền bạn đã mua chứng chỉ mã hóa Let:
Lệnh này nối vào dòng 127.0.0.1 your_domain.com thành / etc / hosts để bất kỳ yêu cầu HTTP nào bạn thực hiện trên máy chủ Vault của mình thành your_domain.com Bỏ qua DNS và được gửi đến localhost trực tiếp. 127.0.0.1 your_domain.com to /etc/hosts so that any HTTP requests that you make on your Vault server to your_domain.com ignore DNS and are sent to localhost directly. Với dịch vụ Vault được thiết lập và hoàn tất tệp Cấu hình Vault, giờ đây chúng ta đã sẵn sàng để bắt đầu Vault và khởi tạo Cửa hàng bí mật. Bước 3 - Khởi tạo VaultKhi bạn lần đầu tiên bắt đầu Vault, nó sẽ không được khởi tạo, điều đó có nghĩa là nó không sẵn sàng để nhận và lưu trữ dữ liệu. Trong phần này của hướng dẫn, bạn sẽ khởi động máy chủ Vault, sau đó khởi tạo nó với một tập hợp các khóa bí mật sẽ được sử dụng để unsreal (mở) các cửa hàng bí mật của Vault (mở). Lần đầu tiên bạn bắt đầu Vault, phần phụ trợ thực sự lưu trữ bí mật được mã hóa là không được khởi tạo, quá. Bắt đầu dịch vụ hệ thống Vault để khởi tạo phần phụ trợ và bắt đầu tự chạy Vault.
Bạn có thể chạy kiểm tra nhanh để xác nhận dịch vụ đã bắt đầu thành công.
Bạn sẽ nhận được đầu ra tương tự như sau: Đầu ra. vault.service - "HashiCorp Vault - A tool for managing secrets"
Loaded: loaded (/lib/systemd/system/vault.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2021-11-16 21:55:13 UTC; 22s ago
Docs: https://www.vaultproject.io/docs/
Main PID: 104207 (vault)
Tasks: 7 (limit: 1137)
Memory: 179.3M
CGroup: /system.slice/vault.service
104207 /usr/bin/vault server -config=/etc/vault.d/vault.hcl
Đầu ra của lệnh đó sẽ bao gồm một số thông tin về dịch vụ đang chạy, chẳng hạn như ID quy trình và cách sử dụng tài nguyên của nó. Đảm bảo rằng dòng sau được bao gồm trong đầu ra, cho biết dịch vụ đang chạy chính xác. Đầu ra. . . .
Active: active (running)
. . .
Đầu ra của lệnh đó sẽ bao gồm một số thông tin về dịch vụ đang chạy, chẳng hạn như ID quy trình và cách sử dụng tài nguyên của nó. Đảm bảo rằng dòng sau được bao gồm trong đầu ra, cho biết dịch vụ đang chạy chính xác. Nếu dịch vụ không hoạt động, hãy xem các dòng nhật ký kèm theo ở cuối đầu ra của lệnh để xem đầu ra của Vault, có thể giúp xác định lại bất kỳ vấn đề nào. Vault Lệnh cách kết nối với máy chủ Vault. Trong bước 1, bạn đã định cấu hình Vault chỉ nghe trên giao diện loopback cục bộ, vì vậy hãy đặt vault_addr biến môi trường thành điểm cuối https cục bộ.
. Vault Lệnh hiện có thể liên lạc với daemon. Lưu ý rằng xác định tên máy chủ thực sự thay vì đơn giản là localhost or 127.0.0.1 is necessary to properly validate the HTTPS certificate.
Máy chủ sẽ trả về một số đầu ra để bạn có thể nói rằng nó đang hoạt động nhưng chưa được khởi tạo. Giá trị khóa --- ----- Loại con dấu Shamir. BẮT ĐẦU SALY Niêm phong đúng Tổng số cổ phiếu 0. Ngưỡng 0. GIẢI QUYẾT GIẢI QUYẾT 0/0. Unsreal nonce n / a Phiên bản 1.8.5. Tệp loại lưu trữ Ha được kích hoạt sai. ........... . không có sẵn tại bất kỳ điểm nào khác:
Phím vô định Cụ thể hơn, quy trình không phân bổ của Vault giải mã phần phụ trợ bằng khóa được hình thành bởi các cổ phiếu chính. Khi bạn lần đầu tiên khởi tạo Vault, bạn có thể chọn có bao nhiêu khóa UNLEAL để tạo và bao nhiêu phím cần thiết tại thời gian vô hiệu để giải quyết thành công Vault. Để tìm hiểu thêm về cơ chế niêm phong của Vault, bạn có thể tham khảo tài liệu Vault. Một cấu hình thông thường cho các tham số unsleal sẽ là tạo ba phím và yêu cầu ít nhất hai trong số các phím đó tại thời gian vô định. Điều này cho phép các cổ phiếu quan trọng được phân tách và lưu trữ ở các vị trí riêng biệt để đảm bảo rằng sự thỏa hiệp này là không đủ để giải nén Vault.at least two unseal keys will be required in order to make the service become available and ready to use. While sealed, the files that store the actual secret values will remain encrypted and inaccessible. Nói cách khác, bất cứ khi nào Vault được bắt đầu, Ít nhất hai Phím giải định sẽ được yêu cầu để làm cho dịch vụ trở nên có sẵn và sẵn sàng để sử dụng. Trong khi niêm phong, các tệp lưu trữ các giá trị bí mật thực tế sẽ vẫn được mã hóa và không thể truy cập được. -key-shares=3 option, and require at least two keys to unseal the vault with the -key-threshold=2 flag::
Bạn sẽ nhận được đầu ra như sau: Đầu ra. Unseal Key 1: eZcJeydRrqeSMZ1zTN+VVll9TFT2KvJy7VlnxUgtvuz5
Unseal Key 2: ntmqCKq8rgNnKT1YSLCjVmCCZBAA3NwUeqxIyRpYD4Wm
Unseal Key 3: 3FK1+Hsorh4p8/L9mki3VskaEU2eQhLqGOI/pJkTHMbx
Initial Root Token: s.hY0ieybfDqCadz7JpL88uO3x
Đầu ra của lệnh đó sẽ bao gồm một số thông tin về dịch vụ đang chạy, chẳng hạn như ID quy trình và cách sử dụng tài nguyên của nó. Đảm bảo rằng dòng sau được bao gồm trong đầu ra, cho biết dịch vụ đang chạy chính xác. Nếu dịch vụ không hoạt động, hãy xem các dòng nhật ký kèm theo ở cuối đầu ra của lệnh để xem đầu ra của Vault, có thể giúp xác định lại bất kỳ vấn đề nào.vault status again, the Initialized status will now be set to true, and the Total Shares and Threshold values will reflect the number of key shards and minimum number of keys that you will need to unseal the vault.
Đầu ra. Tiếp theo, chúng tôi sẽ đặt một biến môi trường để nói với Vault Lệnh cách kết nối với máy chủ Vault. Trong bước 1, bạn đã định cấu hình Vault chỉ nghe trên giao diện loopback cục bộ, vì vậy hãy đặt vault_addr biến môi trường thành điểm cuối https cục bộ. Xuất vault_addr = https: // your_domain : 8200
Vault Lệnh hiện có thể liên lạc với daemon. Lưu ý rằng xác định tên máy chủ thực sự thay vì đơn giản là Xuất vault_addr = https: // your_domain : 8200
Vault Lệnh hiện có thể liên lạc với daemon. Lưu ý rằng xác định tên máy chủ thực sự thay vì đơn giản là Xuất vault_addr = https: // your_domain : 8200
Vault Lệnh hiện có thể liên lạc với daemon. Lưu ý rằng xác định tên máy chủ thực sự thay vì đơn giản là Xuất vault_addr = https: // your_domain : 8200
Vault Lệnh hiện có thể liên lạc với daemon. Lưu ý rằng xác định tên máy chủ thực sự thay vì đơn giản là Xuất vault_addr = https: // your_domain : 8200
Vault Lệnh hiện có thể liên lạc với daemon. Lưu ý rằng xác định tên máy chủ thực sự thay vì đơn giản là 2
Giải quyết tiến bộ 0/2.
. . .
Lưu ý rằng unsreal progess Line hiển thị giá trị 0/2 . Bắt đầu giải nén Vault bằng cách sử dụng mã thông báo mới được tạo mới của bạn. Chạy Người vận hành Vault unsreal Lệnh và nhập bất kỳ khóa nào khi được nhắc: Unseal Progess line shows the value 0/2. Begin unsealing Vault using your newly created unseal tokens. Run the 2 command and input any of your keys when prompted:
--- ----- Đầu ra. Key (will be hidden):
Đầu ra của lệnh đó sẽ bao gồm một số thông tin về dịch vụ đang chạy, chẳng hạn như ID quy trình và cách sử dụng tài nguyên của nó. Đảm bảo rằng dòng sau được bao gồm trong đầu ra, cho biết dịch vụ đang chạy chính xác. Đầu ra. Giá trị khóa
--- -----
Loại con dấu Shamir.
Khởi tạo đúng.
Niêm phong đúng
Tổng số cổ phiếu 3.
Ngưỡng 2.
Unsreal Tiến bộ 1/2
Unsreal nonce 0f3a328b-e0c6-6294-D6A2-56DA49271DFF
Phiên bản 1.8.5.
Tệp loại lưu trữ
Ha được kích hoạt sai.
Mã thông báo gốc ban đầu . Điều này tương đương với quyền root đối với việc triển khai Vault của bạn, cho phép quản lý tất cả các chính sách, gắn kết và bí mật của Vault. Phím vô định . Chúng được sử dụng để giải tỏa hầm khi daemon bắt đầu, cho phép daemon Vault để giải mã cửa hàng bí mật phụ trợ. Mã thông báo gốc ban đầu . Điều này tương đương với quyền root đối với việc triển khai Vault của bạn, cho phép quản lý tất cả các chính sách, gắn kết và bí mật của Vault. Phím vô định . Chúng được sử dụng để giải tỏa hầm khi daemon bắt đầu, cho phép daemon Vault để giải mã cửa hàng bí mật phụ trợ. Mã thông báo gốc ban đầu . Điều này tương đương với quyền root đối với việc triển khai Vault của bạn, cho phép quản lý tất cả các chính sách, gắn kết và bí mật của Vault. Phím vô định . Chúng được sử dụng để giải tỏa hầm khi daemon bắt đầu, cho phép daemon Vault để giải mã cửa hàng bí mật phụ trợ.
Thông báo cách Unsreal Tiến bộ 1/2 Dòng đã thay đổi trong đầu ra. Chạy Unsreal Lặp lại lệnh.
Và nhập một khóa khác với loại bạn đã sử dụng: Đầu ra. Key (will be hidden):
Đầu ra của lệnh chỉ ra rằng quy trình không xác định đã hoàn thành thành công. Đầu ra. Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 3
Threshold 2
Version 1.8.5
Storage Type file
Cluster Name vault-cluster-3042c7bc
Cluster ID c3e9d814-cf2a-2901-f0e4-ebc52d29e5cc
HA Enabled false
Đầu ra của lệnh chỉ ra rằng quy trình không xác định đã hoàn thành thành công. Vault hiện chưa được sử dụng và sẵn sàng để sử dụng. Những bước giải tạch này là cần thiết bất cứ khi nào hầm được bắt đầu hoặc khởi động lại. Đúng Đúng . Trong các bước tiếp theo, chúng tôi sẽ tạo các mã thông báo và chính sách truy cập cần thiết để lưu trữ các giá trị bí mật và đọc / ghi vào các đường dẫn cụ thể trong Vault. Tuy nhiên, Unsrealing là một quá trình khác biệt từ tương tác bình thường với Vault (như giá trị đọc và viết), được xác thực bởiBước 4 - Đọc và viết bí mật Đúng Đúng secret backend. This backend stores simple key/value pairs in Vault. However, it is not enabled by default. Có một số [Backends bí mật]] (https://www.vaultproject.io/docs/secrets/index.html) rằng bạn có thể sử dụng với Vault, nhưng đối với ví dụ này, chúng ta sẽ sử dụng KV BÍ MẬT BÍ MẬT. Backend này lưu trữ các cặp khóa / giá trị đơn giản trong kho tiền. Tuy nhiên, nó không được bật theo mặc định. kv secret backend, and then learn how to read and write secrets to it. Trong phần hướng dẫn này, bạn sẽ kích hoạt KV Backend, sau đó tìm hiểu cách đọc và viết bí mật vào đó. .
root_token = your_root_token_here Backend:
. . . Đầu ra. Success! Enabled the kv secrets engine at: kv/
Đầu ra của lệnh chỉ ra rằng quy trình không xác định đã hoàn thành thành công.
Bước 4 - Đọc và viết bí mật Đầu ra. Tuy nhiên, Unsrealing là một quá trình khác biệt từ tương tác bình thường với Vault (như giá trị đọc và viết), được xác thực bởi Tokens . Trong các bước tiếp theo, chúng tôi sẽ tạo các mã thông báo và chính sách truy cập cần thiết để lưu trữ các giá trị bí mật và đọc / ghi vào các đường dẫn cụ thể trong Vault. ....
root_token = your_root_token_here được bật. Bây giờ chúng ta có thể lưu trữ một số dữ liệu với phần phụ trợ này.
.kv/ prefix indicates that we are writing to the kv backend mounted at the kv path, and we are storing the key value at the path message with the value mypassword. We used the root token, which has superuser privileges, to write the generic secret. Bạn sẽ nhận được đầu ra như sau nếu lệnh thành công: Unsreal Tiến bộ 1/2 Dòng đã thay đổi trong đầu ra. Chạy
Vault hiện chưa được sử dụng và sẵn sàng để sử dụng. Những bước giải tạch này là cần thiết bất cứ khi nào hầm được bắt đầu hoặc khởi động lại. Đầu ra. Key Value
--- -----
refresh_interval 768h
value mypassword
Đầu ra của lệnh chỉ ra rằng quy trình không xác định đã hoàn thành thành công. Vault hiện chưa được sử dụng và sẵn sàng để sử dụng. Những bước giải tạch này là cần thiết bất cứ khi nào hầm được bắt đầu hoặc khởi động lại.Tuy nhiên, Unsrealing là một quá trình khác biệt từ tương tác bình thường với Vault (như giá trị đọc và viết), được xác thực bởi Bước 4 - Đọc và viết bí mật Chính sách Vault . Có một số [Backends bí mật]] (https://www.vaultproject.io/docs/secrets/index.html) rằng bạn có thể sử dụng với Vault, nhưng đối với ví dụ này, chúng ta sẽ sử dụng KV BÍ MẬT BÍ MẬT. Backend này lưu trữ các cặp khóa / giá trị đơn giản trong kho tiền. Tuy nhiên, nó không được bật theo mặc định. KV / KV KV_4D58555C8 N / A using nano or your preferred editor:
root_token = policy.hcl Tiếp theo, trong khi xác thực với mã thông báo gốc, kích hoạt Lưu và đóng tệp, sau đó viết chính sách này để Vault. Lệnh sau sẽ tải chính sách KV / Giá trị tin nhắn = MYPASSWORDmessage-readonly with the read-only capability
Tiếp theo, tạo mã thông báo mà bạn sẽ sử dụng để truy cập chỉ đọc vào Vault. Thêm Vault đọc Lệnh: vault token create command to use the new policy that you created:
Đầu ra sẽ trông như thế này: Đầu ra. Giá trị khóa
--- -----
mã thông báo your_token_value
Token_accessor your_token_accessor.
Token_duration 768h0mms.
Token_Renewable đúng
Token_pologies ["Mặc định" "Tin nhắn-readonly"]
danh tính_prockies []
Chính sách ["Mặc định" "Tin nhắn-readOnly"]
Lưu phần tô sáng Your_Token_Value Giá trị cho một biến môi trường được gọi là app_token : your_token_value value to an environment variable called app_token:
Bạn có thể sử dụng giá trị app_token Để truy cập dữ liệu được lưu trữ trong đường dẫn KV / Tin nhắn (và không có giá trị nào khác trong Vault). KV / Giá trị tin nhắn = MYPASSWORDkv/message (and no other values in Vault).
Đầu ra. Giá trị khóa
--- -----
mã thông báo your_token_value
Token_duration 768h0mms.
Đầu ra. Giá trị khóa
--- -----
mã thông báo your_token_value
danh tính_prockies [] Chính sách ["Mặc định" "Tin nhắn-readOnly"].kv backend secret store, and defined a read-only policy to limit how a user can interact with Vault secrets. Lưu phần tô sáng Your_Token_Value Giá trị cho một biến môi trường được gọi là app_token : app_token =
|