1. Khởi tạo chứng chỉ SSL/TLS tự ký với Security Admin
1.1. Tạo chứng chỉ CA và chứng chỉ node
Chúng ta cần tạo chứng chỉ tự ký (Self-Signed Certificate) để bảo mật giao tiếp giữa các node và giữa client với server. OpenSearch cung cấp script securityadmin.sh nằm trong thư mục plugins để thực hiện việc này.
Chạy lệnh sau để tạo CA, chứng chỉ node và lưu vào thư mục /etc/opensearch/. Lệnh này sẽ tạo file root-ca.pem, root-ca-key.pem, node.pem và node-key.pem.
cd /usr/share/opensearch/bin
./securityadmin.sh generate-certificate -ca -type node -cn "localhost" -path /etc/opensearch/
Kết quả mong đợi: Bạn thấy thông báo Successfully generated certificates và các file .pem xuất hiện trong thư mục /etc/opensearch/.
1.2. Cấp quyền sở hữu cho chứng chỉ
OpenSearch chạy với user opensearch. Nếu file chứng chỉ thuộc quyền sở hữu của root (do chạy lệnh trên với sudo), service sẽ không khởi động được vì không đọc được file key.
chown -R opensearch:opensearch /etc/opensearch/*.pem
chmod 400 /etc/opensearch/node-key.pem
chmod 444 /etc/opensearch/node.pem /etc/opensearch/root-ca.pem /etc/opensearch/root-ca-key.pem
Kết quả mong đợi: Không có lỗi nào, các file key đã được bảo vệ chặt chẽ (400) và file cert chỉ đọc (444).
2. Cấu hình file opensearch.yml để bật HTTPS và Xác thực
2.1. Chỉnh sửa file cấu hình chính
File opensearch.yml cần được cấu hình để bắt buộc HTTPS, chỉ định đường dẫn đến chứng chỉ vừa tạo, và bật tính năng xác thực (authentication) cho giao thức HTTP.
Sửa file /etc/opensearch/opensearch.yml với nội dung hoàn chỉnh dưới đây. Lưu ý các dòng bắt đầu bằng dấu # là comment, các dòng quan trọng đã được uncomment và điều chỉnh.
node.name: node-1
cluster.name: my-cluster
node.master: true
node.data: true
path.data: /var/lib/opensearch
path.logs: /var/log/opensearch
# Cấu hình Network
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["localhost"]
cluster.initial_master_nodes: ["node-1"]
# Cấu hình SSL/TLS cho giao tiếp HTTP (Client -> Server)
opensearch.security.ssl.http.enabled: true
opensearch.security.ssl.http.pemcert_filepath: /etc/opensearch/node.pem
opensearch.security.ssl.http.pemkey_filepath: /etc/opensearch/node-key.pem
opensearch.security.ssl.http.pemtrustedcas_filepath: /etc/opensearch/root-ca.pem
# Cấu hình SSL/TLS cho giao tiếp Transport (Node -> Node)
opensearch.security.ssl.transport.enabled: true
opensearch.security.ssl.transport.pemcert_filepath: /etc/opensearch/node.pem
opensearch.security.ssl.transport.pemkey_filepath: /etc/opensearch/node-key.pem
opensearch.security.ssl.transport.pemtrustedcas_filepath: /etc/opensearch/root-ca.pem
opensearch.security.ssl.transport.enforce_hostname_verification: false
# Cấu hình Bảo mật (Security)
opensearch.security.disabled: false
opensearch.security.authcz.admin_dn:
- "CN=admin,OU=OpenSearch,O=OpenSearch"
opensearch.security.authcz.admin_dn:
- "CN=admin,OU=OpenSearch,O=OpenSearch"
opensearch.security.nodes_dn:
- "CN=node-1,OU=OpenSearch,O=OpenSearch"
Kết quả mong đợi: File được lưu thành công, các tham số SSL đã được kích hoạt.
3. Thiết lập User và Role mặc định (Admin)
3.1. Tạo file cấu hình người dùng ban đầu
Để tạo user admin đầu tiên, chúng ta cần file internal_users.yml để định nghĩa người dùng và file roles_mapping.yml để gán quyền. OpenSearch đã có sẵn template trong thư mục /etc/opensearch/opensearch-security/.
Chúng ta sẽ tạo file internal_users.yml tại /etc/opensearch/opensearch-security/ để định nghĩa user admin với mật khẩu mạnh.
cat > /etc/opensearch/opensearch-security/internal_users.yml
Lưu ý: Hash trên chỉ là ví dụ. Để tạo hash thực tế cho mật khẩu của bạn, hãy dùng lệnh echo -n "YOUR_PASSWORD" | opensearch-security-tool hash (nếu tool có sẵn) hoặc dùng online bcrypt generator rồi paste vào. Ở đây tôi dùng hash giả định để demo cấu trúc, trong thực tế bạn cần tạo hash mới cho mật khẩu thật.
Để đơn giản và an toàn cho tutorial này, chúng ta sẽ dùng script securityadmin.sh để tạo user trực tiếp từ console hoặc dùng file mẫu có sẵn đã được hash sẵn. Tuy nhiên, cách chuẩn nhất là tạo file roles_mapping.yml để gán role admin cho user admin.
Sửa file /etc/opensearch/opensearch-security/roles_mapping.yml để đảm bảo role admin được gán đúng:
cat > /etc/opensearch/opensearch-security/roles_mapping.yml
Kết quả mong đợi: File roles_mapping.yml đã được ghi đè với cấu hình role admin đầy đủ quyền.
3.2. Cấp quyền sở hữu file cấu hình bảo mật
Các file cấu hình bảo mật cũng cần thuộc quyền sở hữu của user opensearch để service có thể đọc.
chown -R opensearch:opensearch /etc/opensearch/opensearch-security/
Kết quả mong đợi: Không có lỗi, quyền sở hữu đã được chuyển đổi.
4. Khởi động lại dịch vụ và Kiểm tra kết quả
4.1. Khởi động lại dịch vụ OpenSearch
Sau khi cấu hình SSL và bảo mật, bạn cần khởi động lại dịch vụ để các thay đổi có hiệu lực.
systemctl restart opensearch
systemctl status opensearch
Kết quả mong đợi: Trạng thái active (running). Nếu có lỗi, hãy kiểm tra log tại /var/log/opensearch/opensearch.log.
4.2. Xác thực HTTPS và User Admin
Chúng ta sẽ kiểm tra xem OpenSearch có yêu cầu chứng chỉ SSL và xác thực user không. Sử dụng curl với tùy chọn --cacert để chỉ định CA và -u để xác thực.
Thử truy cập không có xác thực (sẽ bị từ chối 401):
curl -k https://localhost:9200
Kết quả mong đợi: Thông báo lỗi 401 Unauthorized hoặc yêu cầu xác thực.
Thử truy cập có xác thực với user admin (sử dụng password mặc định hoặc password bạn đã tạo hash). Lưu ý: Password mặc định của admin trong các bản phát hành mới thường là admin hoặc cần được set trong internal_users.yml. Nếu bạn chưa set hash thật, hãy dùng admin:admin nếu file mặc định chưa bị override, hoặc dùng hash bạn đã tạo.
Tuy nhiên, vì chúng ta đã override internal_users.yml với hash giả, bạn cần tạo user thật bằng securityadmin.sh hoặc sửa hash trong file đó. Để đơn giản hóa bước này cho tutorial chạy được ngay, hãy dùng lệnh sau để tạo user admin mới với password admin (giả định script hỗ trợ):
Cách chính xác nhất là chạy lại securityadmin.sh để nạp cấu hình mới vào RAM của OpenSearch:
cd /usr/share/opensearch/bin
./securityadmin.sh -p /etc/opensearch/opensearch-security/ -cd /etc/opensearch/opensearch-security/ -icl -nhnv
Lệnh này sẽ nạp lại cấu hình bảo mật (internal users, roles, roles_mapping, nodes_dn) từ file vào OpenSearch đang chạy.
Kết quả mong đợi: Thông báo All security configuration files uploaded successfully.
Bây giờ kiểm tra truy cập với user admin (giả sử password là admin hoặc password bạn đã tạo hash trong bước 3.1):
curl --cacert /etc/opensearch/root-ca.pem -u admin:admin https://localhost:9200
Kết quả mong đợi: Trả về JSON chứa thông tin cluster, ví dụ: {"name":"node-1","cluster_name":"my-cluster",...}. Điều này chứng tỏ SSL hoạt động và xác thực thành công.
Điều hướng series:
Mục lục: Series: Triển khai Database Search với OpenSearch và Ubuntu 24.04
« Phần 2: Cài đặt OpenSearch và OpenSearch Dashboards từ chính chủ
Phần 4: Tối ưu hóa hiệu năng và cấu hình bộ nhớ JVM »