Làm cách nào để xác định quyền truy cập bảo mật trong Elasticsearch? Tôi có pluginasticsearch-head nhưng quyền truy cập của bạn không yêu cầu bất kỳ bảo mật nào.
Câu trả lời:
Plugin được đề cập trong câu trả lời này không còn được hỗ trợ tích cực.
Không có kiểm soát truy cập tích hợp trongasticsearch. Vì vậy, bạn sẽ cần thiết lập proxy ngược (đây là bài đăng trên blog về cách thiết lập nginx), sử dụng một trong các plugin đàn hồi của bên thứ 3 như https://github.com/Asquera/elasticsearch-http-basic hoặc sử dụng plugin bảo mật chính thức Shield .
<shamelessPlug>
Xin lỗi nhưng tôi thực sự nghi ngờ về tất cả các plugin và proxy này chỉ cố gắng nắm bắt các truy vấn với regex cẩu thả ở cấp HTTP.
Bạn sẽ regex tất cả các cú pháp ES có thể thực hiện ghi? Làm thế nào để bạn lọc theo chỉ mục? Làm thế nào về bí danh chỉ mục? Truy vấn nhiều chỉ mục?
Cách dễ dàng duy nhất để thực hiện kiểm soát truy cập là SAU KHI ElasticSearch đã phân tích cú pháp các truy vấn. Đây chính xác là những gì Shield làm sau tất cả!
Tôi đã viết một plugin được cấp phép MIT ( readonly-rest-plugin ) thực hiện chính xác điều này.
Bạn có thể đáp ứng yêu cầu bằng cách:
✔️ Tên máy chủ, IP và IP với Netmask
✔️ Các chỉ số (hỗ trợ ký tự đại diện) và bí danh chỉ mục được giải quyết
✔️ Xác thực cơ bản HTTP
Nó cũng có hỗ trợ hạng nhất cho xác thực Kibana :)
</shamelessPlug>
Elasticsearch hiện có plugin bảo mật http://www.elasticsearch.org/blog/shield-know-security-coming-soon/
Cập nhật : Tính năng này hoạt động khá tốt và (đối với các tính năng nhất) miễn phí và mã nguồn mở: https://github.com/floragunncom/search-guard
LƯU Ý: Plugin được đề cập trong bài viết này không còn được duy trì
Có thể điều này hữu ích: https://github.com/salyh/elasticsearch-security-plugin
Plugin này thêm chức năng bảo mật http / rest vào Elasticsearch trong các loại mô-đun riêng biệt. Thay vì Netty, một Tomcat 7 nhúng được sử dụng để xử lý các yêu cầu http / rest.
Hiện tại để xác thực và ủy quyền dựa trên người dùng, Kerberos và NTLM được hỗ trợ thông qua waffle thư viện của bên thứ 3 (chỉ trên máy chủ windows). Đối với máy chủ UNIX, Kerberos được hỗ trợ thông qua thư viện bên thứ ba tomcatspnegoad (Hoạt động với bất kỳ triển khai kerberos nào. Để ủy quyền, Active Directory và LDAP chung được hỗ trợ).
Bạn cũng có thể sử dụng plugin này mà không có Kerberos / NTLM nhưng khi đó chỉ xác thực dựa trên máy chủ mới khả dụng.
Cách thích hợp duy nhất để kích hoạt bảo mật trong Elasticsearch là thông qua plugin X-Pack.
https://www.elastic.co/guide/en/x-pack/current/xpack-introduction.html
Đây là một plugin đa năng và sẽ phù hợp cho các mục đích bảo mật, vì bạn cũng có thể sử dụng giám sát và định cấu hình các cảnh báo và thông báo theo nhu cầu của mình.
Vì nó đã được công nhận cao, tôi chắc chắn rằng Elasticsearch sẽ tiếp tục điều này để đăng nhập.
Nếu bạn muốn sử dụng xác thực cơ bản với Kibana3, đây là giải pháp của tôi:
https://github.com/fangli/kibana-authentication-proxy
Không chỉ hỗ trợ phần phụ trợ basicAuth ES mà còn hỗ trợ GoogleOAuth và BasicAuth cho ứng dụng khách. Vui lòng cho một ngôi sao nếu nó phù hợp với bạn, cảm ơn.
Hãy thử Shield . Nó có Xác thực và Ủy quyền. Bây giờ nó cần một giấy phép. Sẽ không lâu nữa trước khi mọi người tạo ra các plugin mã nguồn mở tương tự.
Tôi là người mới làm quen với ElasticSearch, nhưng tôi cảm thấy rằng plugin X-Pack sẽ xuất hiện ở đây như một câu trả lời: https://www.elastic.co/guide/en/x-pack/current/index.html
Tôi hiểu rằng X-Pack hiện là tiêu chuẩn thực tế để bảo mật ElasticSearch (và nhiều hơn nữa), bao gồm cả xác thực.
Về một giải pháp cụ thể cho vấn đề này, tôi đã xem qua phần sau là một cách triển khai đơn giản của phương pháp proxy ngược như đã đề cập trong các câu trả lời khác:
https://gist.github.com/jpluscplusm/9227777
Như một lời cảnh báo, có vẻ như ít nhất một số người ở Elasticsearch không coi nginx là giải pháp tối ưu, nhưng tôi nghĩ rằng điều đó phụ thuộc vào các chi tiết cụ thể về yêu cầu xác thực của bạn (RBAC, số lượng người dùng, số chỉ mục, tần suất sửa đổi danh sách truy cập ). Đối với một số người dùng (bao gồm cả tôi), ví dụ đầu tiên là đủ.
http://www.elasticsearch.org/blog/restricting-users-kibana-filtered-aliases/
Nếu bạn nhận thấy rằng các chi tiết cụ thể về yêu cầu của mình không được nginx đáp ứng, một cái gì đó như thế này có thể hoạt động: https://github.com/lukas-vlcek/node.es
Vì ElasticSearch là một loại dịch vụ cơ sở dữ liệu, bạn có thể sẽ không muốn nó được hiển thị công khai.
Tôi không tin tưởng các plugin làm điều đó cho tôi, vì vậy tôi đã làm với proxy nginx.
Hướng dẫn này rất hữu ích:
Bắt đầu từ Elastic
phiên bản 6.8 , một số tính năng bảo mật trở nên miễn phí (đọc: https://www.elastic.co/blog/security-for-elasticsearch-is-now-free )
"xpack.security.enabled=true"
.Ví dụ: nếu bạn đang sử dụng docker-compose.yml
tệp, hãy thêm dòng dưới environment
:
elasticsearch:
image: elastic:6.8.0
environment:
- "xpack.security.enabled=true"
Tiếp theo, Bạn sẽ phải chỉ định mật khẩuelasic
mà người dùng mặc định (được gọi là "đàn hồi") nên chấp nhận để xác thực. Bạn làm điều đó với biến môi trường. Trong ví dụ của chúng tôi:ELASTIC_PASSWORD
elasticsearch:
image: elastic:6.8.0
environment:
- "xpack.security.enabled=true"
- "ELASTIC_PASSWORD=123456"
Bây giờ, bạn đã sẵn sàng để đi. Khi bạn chạy đàn hồi:
docker run --rm --name elastic -p 9200:9200 -v ELASTIC_PASSWORD=123456 -v xpack.security.enabled=true elastic:6.8.0
Và làm curl localhost:9200
:, Bạn sẽ gặp lỗi:
{"error": {"root_cause": [{"type": "security_exception", "reason": "thiếu mã xác thực cho yêu cầu REST [/]", "header": {"WWW-Authenticate": "Cơ bản = \ "security \" charset = \ "UTF-8 \" "}}]," type ":" security_exception "," reason ":" thiếu mã thông báo xác thực cho yêu cầu REST [/] "," tiêu đề ": {" WWW-Authenticate ":" Vùng cơ bản = \ "security \" charset = \ "UTF-8 \" "}}," trạng thái ": 401}
Đó là chính xác những gì bạn muốn (không cung cấp tên người dùng và mật khẩu, vì vậy không được phép truy cập)
Điều rất quan trọng cần ghi nhớ :
Khi Elastic
bắt đầu, nó sẽ định dạng trước Bootstrap checks
( https://www.elastic.co/guide/en/elasticsearch/reference/6.8/bootstrap-checks.html ).
Có sự khác biệt Elastic
giữa chế độ "phát triển" và "sản xuất" khi định dạng trước các kiểm tra đó.
Nếu elastic
chạy ở production
chế độ, các cấu hình đó không đủ (kiểm tra Bootstrap sẽ không thành công và DB sẽ không hoạt động). Bạn cũng phải thêm cấu hình mã hóa ssl giữa các nút. Đọc thêm: https://www.elastic.co/guide/en/elasticsearch/reference/6.8/security-settings.html