Cấu hình HTTPS để mã hóa kết nối
InfluxDB mặc định chỉ lắng nghe trên cổng HTTP (8086). Để bảo mật, bạn phải cấu hình HTTPS để mã hóa dữ liệu truyền tải giữa client và server.
Trước tiên, hãy tạo thư mục chứng chỉ và sử dụng OpenSSL để tự ký (self-signed) chứng chỉ cho môi trường test hoặc staging.
sudo mkdir -p /etc/influxdb/certs
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/influxdb/certs/influxdb.key -out /etc/influxdb/certs/influxdb.crt -subj "/C=VN/ST=HoChiMinhCity/L=District1/O=DevTeam/CN=influxdb.local"
System sẽ tạo ra file key (.key) và file chứng chỉ (.crt) tại đường dẫn trên. Bạn sẽ thấy thông báo "Certificate request self-signature ok".
Cấu hình file systemd của InfluxDB để trỏ vào chứng chỉ vừa tạo. Chỉnh sửa file dưới đây.
sudo nano /etc/systemd/system/influxdb.service
Sửa phần [Service] để thêm biến môi trường INFLUXDB_HTTPS_CERTIFICATE và INFLUXDB_HTTPS_KEY. Đảm bảo các dòng này nằm bên dưới dòng EnvironmentFile hoặc thêm vào dòng đó.
Nội dung bổ sung trong file /etc/systemd/system/influxdb.service:
Environment="INFLUXDB_HTTPS_CERTIFICATE=/etc/influxdb/certs/influxdb.crt"
Environment="INFLUXDB_HTTPS_KEY=/etc/influxdb/certs/influxdb.key"
Environment="INFLUXDB_HTTPS_ENABLED=true"
Tải lại cấu hình systemd và khởi động lại dịch vụ InfluxDB để áp dụng thay đổi.
sudo systemctl daemon-reload
sudo systemctl restart influxdb
Kiểm tra trạng thái dịch vụ và xác nhận cổng HTTPS (8443) đang lắng nghe.
sudo systemctl status influxdb
sudo netstat -tlnp | grep 8443
Kết quả mong đợi: Trạng thái là active (running) và bạn thấy dòng listen trên cổng 0.0.0.0:8443 hoặc 127.0.0.1:8443.
Khởi tạo Tổ chức (Organization) và Người dùng (User)
Để quản lý truy cập, bạn cần tạo Organization để nhóm các Bucket và Users. Nếu chưa tạo, InfluxDB sẽ yêu cầu bạn làm điều này lần đầu vào giao diện web, nhưng dùng CLI nhanh hơn.
Đầu tiên, đăng nhập vào InfluxDB CLI (v2) bằng tài khoản admin mặc định (tạo ở Phần 2) để thiết lập môi trường.
influx login -u admin -p --host http://localhost:8086
Thay bằng mật khẩu thực tế của bạn. Kết quả mong đợi là thông báo "Logged in successfully".
Tạo một Organization mới có tên "DevOpsTeam" để chứa các bucket và user.
influx org create -n "DevOpsTeam"
Lưu lại ID của organization vừa tạo. Đây là tham số bắt buộc cho các bước sau.
influx org list
Kết quả mong đợi: Bảng hiển thị tên "DevOpsTeam" và một chuỗi ID dài (ví dụ: a1b2c3d4...).
Tạo người dùng "monitoring_user" thuộc về organization "DevOpsTeam".
influx user create -n "monitoring_user" -p "SecurePass123!" -o "DevOpsTeam"
Thay đổi password tùy ý. Kết quả mong đợi: Thông báo "Created user monitoring_user" kèm ID người dùng.
Xác minh danh sách người dùng trong tổ chức.
influx user list -o "DevOpsTeam"
Kết quả mong đợi: Dòng chứa "monitoring_user" xuất hiện trong danh sách.
Phân quyền chi tiết cho Bucket (Read/Write/Admin)
InfluxDB 2.x sử dụng cơ chế Access Control Policy để gắn quyền (Permission) vào Bucket cụ thể cho từng User.
Đầu tiên, tạo một Bucket tên "server_metrics" trong tổ chức "DevOpsTeam".
influx bucket create -n "server_metrics" -o "DevOpsTeam"
Lưu lại ID của Bucket vừa tạo. Bạn sẽ cần nó để gán quyền.
influx bucket list -o "DevOpsTeam"
Kết quả mong đợi: Bucket "server_metrics" hiện diện với ID tương ứng.
Tạo quyền "Read" (Đọc) cho user "monitoring_user" trên bucket "server_metrics".
influx access-grant create -u "monitoring_user" -o "DevOpsTeam" -r "server_metrics" -p "read"
Giải thích: -r là resource (bucket name), -p là permission (read/write/admin).
Tạo quyền "Write" (Viết) cho user "monitoring_user" trên cùng bucket đó.
influx access-grant create -u "monitoring_user" -o "DevOpsTeam" -r "server_metrics" -p "write"
Kiểm tra danh sách quyền đã cấp cho user.
influx access-grant list -u "monitoring_user" -o "DevOpsTeam"
Kết quả mong đợi: Bảng hiển thị hai dòng quyền: một dòng read và một dòng write đối với resource "server_metrics".
Để cấp quyền Admin (Full control) cho user khác (ví dụ: "admin_user"), bạn có thể gán quyền admin.
influx access-grant create -u "admin_user" -o "DevOpsTeam" -r "server_metrics" -p "admin"
Thử xóa một quyền không cần thiết (ví dụ: xóa quyền read để chỉ giữ write nếu muốn).
influx access-grant delete -u "monitoring_user" -o "DevOpsTeam" -r "server_metrics" -p "read"
Kết quả mong đợi: Thông báo "Access grant deleted". Khi list lại, quyền read sẽ biến mất.
Tạo và quản lý Access Tokens với TTL
Access Token là chuỗi ký tự dùng để xác thực API requests. InfluxDB 2.x hỗ trợ tạo token với thời gian sống (TTL) cụ thể hoặc vĩnh viễn.
Tạo token cho user "monitoring_user" với thời hạn 24 giờ (86400 giây).
influx auth create -u "monitoring_user" -o "DevOpsTeam" -e "86400" -d "Monitoring API Token"
Tham số -e là thời gian sống (expiration) tính bằng giây. Nếu không có -e, token sẽ vĩnh viễn.
Copy ID của token vừa tạo (xuất hiện trong output). Bạn sẽ cần nó để test kết nối.
Tạo token vĩnh viễn cho user "admin_user" dùng cho các script tự động hóa.
influx auth create -u "admin_user" -o "DevOpsTeam" -d "Admin Automation Token"
Kiểm tra danh sách token hiện có.
influx auth list
Kết quả mong đợi: Danh sách hiển thị các token, bao gồm ngày tạo, ngày hết hạn (nếu có) và trạng thái.
Xóa token đã hết hạn hoặc không còn dùng nữa.
influx auth delete -i
Thay bằng ID token thực tế. Kết quả mong đợi: Thông báo "Auth deleted".
Verify quyền truy cập bằng token đã tạo (đảm bảo kết nối qua HTTP/HTTPS tùy cấu hình phần 1).
curl -H "Authorization: Token " -X GET http://localhost:8086/api/v2/health
Kết quả mong đợi: Trả về JSON {"now": "...", "repo": "...", "version": "2.x.x"} nếu token hợp lệ. Nếu token hết hạn hoặc sai quyền, sẽ trả về lỗi 401 Unauthorized.
Verify tổng thể bảo mật
Thực hiện kiểm tra cuối cùng để đảm bảo HTTPS hoạt động và phân quyền chính xác.
Thử kết nối qua HTTPS bằng curl với token đã tạo.
curl -k -H "Authorization: Token " https://localhost:8443/api/v2/buckets
Tham số -k bỏ qua cảnh báo chứng chỉ tự ký (vì chúng ta tự tạo). Kết quả mong đợi: JSON trả về danh sách bucket mà user được quyền truy cập.
Thử truy cập bằng user không có quyền trên bucket đó (nếu có).
influx auth create -u "guest_user" -o "DevOpsTeam" -d "Guest Token"
curl -k -H "Authorization: Token " https://localhost:8443/api/v2/buckets
Kết quả mong đợi: Nếu "guest_user" chưa được gán quyền vào bucket nào, API sẽ trả về mảng rỗng [] hoặc lỗi tùy cấu hình bucket privacy, nhưng chắc chắn không thấy bucket "server_metrics".
Điều hướng series:
Mục lục: Series: Triển khai Database Time-Series với InfluxDB trên Ubuntu 24.04
« Phần 2: Cài đặt InfluxDB 2.x và cấu hình khởi động
Phần 4: Khái niệm dữ liệu Time-Series và mô hình hóa Bucket »