Xác thực trong Elasticsearch


76

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:


63

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 .


Rất cảm ơn vì gợi ý. Có bất kỳ kinh nghiệm nào vớiasticsearch-http-basic không? Tốt hay xấu?
Robert Reiz

Một proxy ngược như nginx sẽ cung cấp cho bạn nhiều tùy chọn bảo mật hơn, bao gồm hỗ trợ SSL.
Andrew

4
Đây cũng là sách dạy nấu ăn Chef cho ElasticSearch cung cấp một cách dễ dàng để cài đặt ElasticSearch với proxy ngược bằng Nginx. github.com/elasticsearch/cookbook-elasticsearch
Tom Rogers

Một số tính năng Bảo mật miễn phí, bắt đầu trong các phiên bản 6.8.07.1.0 . Đọc thêm : astic.co/blog/security-for-elasticsearch-is-now-free
Aaron_ab

11

<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>


7

Elasticsearch hiện có plugin bảo mật http://www.elasticsearch.org/blog/shield-know-security-coming-soon/


17
Lưu ý: Shield là một sản phẩm thương mại.
David Ammouial,

1
Bây giờ nó đã thành hiện thực : astic.co/products/shield Câu trả lời này đến muộn, nhưng rất hữu ích cho những người mới đọc.
raulsaeztapia,

2
@rsaez Tuy nhiên, đó là một sản phẩm thương mại với thời gian dùng thử 30 ngày.
polkovnikov.ph

6

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.


4

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.


3

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.


Bạn có thể cung cấp một số liên kết về cách sử dụng cái này không ?? Tôi đã cài đặt nó và tạo ap lên, nhưng không tìm thấy bất kỳ trợ giúp trực tuyến nào về cách sử dụng.
Siddharth Trikha

3

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ự.


3

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.


1
Giấy phép X-Pack có giá hàng nghìn đô la cho mỗi nút. Elastic Cloud bao gồm X-Pack và bắt đầu rẻ hơn. Một tùy chọn khác là các plugin của bên thứ 3.
Marek Toman

2

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


2

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:

http://www.minvolai.com/blog/2014/08/Setting-up-a-Secure-Single-Node-Elasticsearch-server-behind-Nginx/Setting-up-a-Secure-Single-Node-Elasticsearch- máy chủ phía sau-Nginx /


2
Tôi hiểu rằng bạn không tin tưởng họ, nhưng bạn không thể chắc chắn rằng bạn thực hiện cô lập chỉ mục thực sự nếu bạn không có quyền truy cập vào trình phân tích cú pháp ElasticSearch nội bộ :) Đó là lý do tại sao tôi viết bài này: github.com/sscarduzio/ elasticsearch-readonlyrest-Plugin
sscarduzio

2

Bắt đầu từ Elasticphiê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 )

Một số bước cơ bản để xác thực cơ bản

  1. Các cấu hình param cơ bản nhất để thiết lập là: "xpack.security.enabled=true".

Ví dụ: nếu bạn đang sử dụng docker-compose.ymltệp, hãy thêm dòng dưới environment:

elasticsearch:
    image: elastic:6.8.0
    environment:
      - "xpack.security.enabled=true"
  1. 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ớ :

  1. Khi Elasticbắt đầu, nó sẽ định dạng trước Bootstrap checks( https://www.elastic.co/guide/en/elasticsearch/reference/6.8/bootstrap-checks.html ).

  2. Có sự khác biệt Elasticgiữa chế độ "phát triển""sản xuất" khi định dạng trước các kiểm tra đó.

  3. Nếu elasticchạy ở productionchế độ, 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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.