Bạn đang tìm giải pháp có thể lưu trữ các thông tin bảo mật như mật khẩu, access key/secret key,.. mà ứng dụng đó phải có khả năng tích hợp với các dịch vụ Cloud/OpenSource/Solution khác. Nếu vậy thì bạn không nên bỏ qua cơ hội trải nghiệm một giải pháp mang tên VAULT.
Vault là gì ?
Trang chủ: https://www.vaultproject.io/
Vault là một công cụ của công ty HashiCorp với mục tiêu lưu trữ và truy xuất các thông tin bảo mật. Các thông tin dữ liệu bảo mật mà Vault phục vụ bao gồm: api key, mật khẩu, thông tin dưới dạng key-value, chứng chỉ,…
Vault cung cấp các hình thức, kênh truy xuất dữ liệu này thông qua API, GUI, command line,… Bên cạnh đó còn có các cơ chế mã hoá dữ liệu lưu trữ và các cơ chế ACL quản lý quyền hạn khả năng truy xuất của người dùng.
Như vậy Vault được thiết kế chạy như 1 dịch vụ độc lập để lưu trữ các thông tin nhạy cảm, phục vụ tích hợp cho các ứng dụng/dịch vụ/cloud khác sử dụng. Một số dịch vụ tương ứng như AWS KM, HSM, Keywhiz,.. để bạn tham khảo.
Chúng ta sẽ không tìm hiểu nhiều về dịch vụ Vault trong bài viết này. Mà sẽ có một bài viết giới thiệu khác.
1. Cài đặt chương trình Vault trên Linux
Vault cung cấp cho chúng ta một package Vault binary để chạy luôn không cần phải tiến hành biên dịch hay cài đặt từ các repo, điều này vô cùng tiện lợi và cũng là đặc trưng của các sản phẩm công ty HarshiCorp.
Link download: https://releases.hashicorp.com/vault/
Giải nén gói zip ra và di chuyển chương trình Vault binary vào thư mục ‘/usr/bin/‘, nằm trong biến $PATH môi trường.
Chạy cú pháp lệnh sau để Vault thực hiện các cấu hình cần thiết như autocompletion.
Cấu hình cho Vault sử dụng tính năng ‘mlock syscall‘, mlock syscall sẽ ngăn một số tác vụ từ bộ nhớ bị swap xuống ổ cứng.
Kiểm tra xem binary Vault chạy ok chưa nào.
Kế đến ta tạo thông tin user hệ thống để chạy dịch vụ Vault. Rồi tạo thư mục chứa data cho Vault, chúng ta dùng cơ chế storage cơ bản là local filesystem.
Khởi tạo file khởi động dịch vụ trên systemd (CentOS 7/RHEL 7/Ubuntu 16.04)
[Unit] Description="HashiCorp Vault - A tool for managing secrets" Documentation=https://www.vaultproject.io/docs/ Requires=network-online.target After=network-online.target ConditionFileNotEmpty=/etc/vault/config.json [Service] User=vault Group=vault ProtectSystem=full ProtectHome=read-only PrivateTmp=yes PrivateDevices=yes SecureBits=keep-caps AmbientCapabilities=CAP_IPC_LOCK Capabilities=CAP_IPC_LOCK+ep CapabilityBoundingSet=CAP_SYSLOG CAP_IPC_LOCK NoNewPrivileges=yes ExecStart=/usr/bin/vault server -config=/etc/vault/config.json ExecReload=/bin/kill --signal HUP $MAINPID KillMode=process KillSignal=SIGINT Restart=on-failure RestartSec=5 TimeoutStopSec=30 StartLimitIntervalSec=60 StartLimitBurst=3 LimitNOFILE=65536 [Install] WantedBy=multi-user.target
Vault hỗ trợ 2 định dạng cấu hình cho bạn là JSON và HCL, để dễ tiếp cận phần cấu hình, mình lựa chọn định dạng JSON để cấu hình dịch vụ Vault. Bạn có thể tham khảo các chú thích cấu hình Vault tại đây: https://www.vaultproject.io/docs/configuration/
{ "listener": [ { "tcp": { "address": "0.0.0.0:8200", "tls_disable": 1 } } ], "api_addr": "http://0.0.0.0:8200", "storage": { "file": { "path": "/var/lib/vault/" } }, "max_lease_ttl": "10h", "default_lease_ttl": "10h", "ui": true }
Chú thích:
- ui : kích hoạt giao diện quản lý Vault.
- storage : lựa chọn hình thức lưu trữ dữ liệu Vault.
- api_addr : địa chỉ IP cung cấp cách thức access API Vault.
- listener : khai báo port listen cho API Vault và web.
Phân quyền cho thư mục cấu hình Vault.
Khởi động dịch vụ Vault nào.
Kiểm tra trạng thái dịch vụ Vault .
2. Cấu hình dịch vụ Vault cơ bản
Khi bạn sử dụng chương trình lệnh ‘vault‘ cli trên Linux, bạn cần export biến môi trường thể hiện thông tin địa chỉ máy chủ Vault . Ví dụ địa chỉ IP Local của máy chủ Vault của mình là “10.110.8.80“.
Lúc này Vault vẫn đang ở trạng thái chưa khởi tạo hoạt động ban đầu và bị khoá niêm phong (seal). Bạn cần khởi tạo dịch vụ Vault , khi khởi tạo hoàn tất bạn sẽ nhận được tổng cộng 5 chuỗi key dùng để mở niêm phong (seal) dịch vụ Vault và 1 Root Token để login chứng thực sử dụng Vault cơ bản ban đầu. Hãy bảo mật những thông tin này nhé.
Unseal Key 1: xXbiIqxGUNFpUG9oBi2AFGktXjaudjvp+rAbkhwDVgSi Unseal Key 2: P7dZfQQ5wK0ZFuDh01x8upXW/bK5pgR1DfSObm8im/Uc Unseal Key 3: 9ZwVyLFwib4tShY0HUoDtxTHCUpDHPzfQDqXcL44ohmY Unseal Key 4: FqtR4Uou7zBsau/dytuX0P7YjG5p4HAtsg0vC1bEF/XB Unseal Key 5: asC3Uxy170mcTnDYAEAKSmt9gOP1fxF3Yp0DMGtVf/Ef
Giờ bạn cần mở niêm phong dịch vụ Vault ra với ít nhất 3 chuỗi ‘Unseal key‘. Một điều bạn cần lưu ý là khi Vault được mở niêm phong, thì khi nào Vault sẽ quay lại trạng thái bị niêm phong :
- Dịch vụ Vault hoặc máy chủ Vault bị khởi động lại.
- Bị niêm phong bởi API
Lúc này nếu bạn kiểm tra trạng thái dịch vụ Vault qua cli , thì sẽ thấy dòng trạng thái ‘Sealed‘ đã là ‘false‘, tức đã mở niêm phong.
Giờ bạn truy cập giao diện quản lý Vault qua port mặc định 8200 login với chuỗi Root Token lúc khởi tạo Vault nhé.
Mở Firewall port: 8200
#firewall-cmd –zone=public –add-port=8200/tcp
# systemctl restart firewalld
Và đây là giao diện đầu tiên khi truy cập Vault .
Tổng kết
Việc cài đặt dịch vụ Vault cũng không quá phức tạp phải không nào ?! Nhưng mà để làm chủ các tính năng của Vault thì cũng là cả 1 bầu trời trong cả tuần đấy . Chúng ta sẽ sớm làm chủ Vault trong các bài viết kế tiếp nhé.
Nguồn: cuongquach.com