Elastic under lock and key: cho phép các tùy chọn bảo mật cụm Elaticsearch để truy cập từ bên trong và bên ngoài

Elastic under lock and key: cho phép các tùy chọn bảo mật cụm Elaticsearch để truy cập từ bên trong và bên ngoài

Elastic Stack là một công cụ nổi tiếng trên thị trường hệ thống SIEM (thực ra không chỉ có họ). Nó có thể thu thập rất nhiều dữ liệu có kích thước khác nhau, cả nhạy cảm và không nhạy cảm lắm. Sẽ không hoàn toàn chính xác nếu quyền truy cập vào các phần tử Elastic Stack không được bảo vệ. Theo mặc định, tất cả các phần tử có sẵn của Elasticsearch (Elasticsearch, Logstash, Kibana và Beats Collector) đều chạy trên các giao thức mở. Và trong chính Kibana, xác thực bị vô hiệu hóa. Tất cả những tương tác này có thể được bảo mật và trong bài viết này, chúng tôi sẽ cho bạn biết cách thực hiện việc này. Để thuận tiện, chúng tôi chia câu chuyện thành 3 khối ngữ nghĩa:

  • Mô hình truy cập dữ liệu dựa trên vai trò
  • Bảo mật dữ liệu trong cụm Elaticsearch
  • Bảo mật dữ liệu bên ngoài cụm Elaticsearch

Chi tiết dưới vết cắt.

Mô hình truy cập dữ liệu dựa trên vai trò

Nếu bạn cài đặt Elaticsearch và không điều chỉnh nó theo bất kỳ cách nào, quyền truy cập vào tất cả các chỉ mục sẽ được mở cho tất cả mọi người. Vâng, hoặc những người có thể sử dụng cuộn tròn. Để tránh điều này, Elaticsearch có sẵn một mô hình vai trò bắt đầu bằng đăng ký Cơ bản (miễn phí). Về mặt sơ đồ, nó trông giống như thế này:

Elastic under lock and key: cho phép các tùy chọn bảo mật cụm Elaticsearch để truy cập từ bên trong và bên ngoài

Có gì trong hình

  • Người dùng là tất cả những người có thể đăng nhập bằng thông tin đăng nhập của họ.
  • Một vai trò là một tập hợp các quyền.
  • Quyền là một tập hợp các đặc quyền.
  • Đặc quyền là quyền viết, đọc, xóa, v.v. (Danh sách đầy đủ các đặc quyền)
  • Tài nguyên là chỉ mục, tài liệu, trường, người dùng và các thực thể lưu trữ khác (mô hình vai trò cho một số tài nguyên chỉ khả dụng với đăng ký trả phí).

Theo mặc định Elaticsearch có người sử dụng hộp, mà chúng được gắn vào hộp vai trò. Sau khi bật cài đặt bảo mật, bạn có thể bắt đầu sử dụng chúng ngay lập tức.

Để bật bảo mật trong cài đặt Elaticsearch, bạn cần thêm nó vào tệp cấu hình (theo mặc định đây là elasticsearch/config/elasticsearch.yml) dòng mới:

xpack.security.enabled: true

Sau khi thay đổi tệp cấu hình, hãy khởi chạy hoặc khởi động lại Elaticsearch để những thay đổi có hiệu lực. Bước tiếp theo là gán mật khẩu cho người dùng hộp. Hãy thực hiện điều này một cách tương tác bằng lệnh bên dưới:

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y


Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]

Chúng tôi kiểm tra:

[elastic@node1 ~]$ curl -u elastic 'node1:9200/_cat/nodes?pretty'
Enter host password for user 'elastic':
192.168.0.2 23 46 14 0.28 0.32 0.18 dim * node1

Bạn có thể vỗ nhẹ vào lưng mình - quá trình cài đặt ở phía Elaticsearch đã hoàn tất. Bây giờ là lúc cấu hình Kibana. Nếu bạn chạy nó ngay bây giờ, lỗi sẽ xuất hiện, vì vậy điều quan trọng là phải tạo một kho lưu trữ khóa. Việc này được thực hiện bằng hai lệnh (người dùng kibana và mật khẩu đã nhập ở bước tạo mật khẩu trong Elaticsearch):

[elastic@node1 ~]$ ./kibana/bin/kibana-keystore add elasticsearch.username
[elastic@node1 ~]$ ./kibana/bin/kibana-keystore add elasticsearch.password

Nếu mọi thứ đều chính xác, Kibana sẽ bắt đầu yêu cầu thông tin đăng nhập và mật khẩu. Đăng ký Cơ bản bao gồm một mô hình vai trò dựa trên người dùng nội bộ. Bắt đầu với Gold, bạn có thể kết nối các hệ thống xác thực bên ngoài - LDAP, PKI, Active Directory và hệ thống đăng nhập một lần.

Elastic under lock and key: cho phép các tùy chọn bảo mật cụm Elaticsearch để truy cập từ bên trong và bên ngoài

Quyền truy cập vào các đối tượng bên trong Elaticsearch cũng có thể bị hạn chế. Tuy nhiên, để làm điều tương tự đối với các tài liệu hoặc trường, bạn sẽ cần đăng ký trả phí (sự sang trọng này bắt đầu từ cấp Bạch kim). Các cài đặt này có sẵn trong giao diện Kibana hoặc thông qua API bảo mật. Bạn có thể kiểm tra qua menu Dev Tools vốn đã quen thuộc:

Tạo một vai trò

PUT /_security/role/ruslan_i_ludmila_role
{
  "cluster": [],
  "indices": [
    {
      "names": [ "ruslan_i_ludmila" ],
      "privileges": ["read", "view_index_metadata"]
    }
  ]
}

Tạo người dùng

POST /_security/user/pushkin
{
  "password" : "nataliaonelove",
  "roles" : [ "ruslan_i_ludmila_role", "kibana_user" ],
  "full_name" : "Alexander Pushkin",
  "email" : "[email protected]",
  "metadata" : {
    "hometown" : "Saint-Petersburg"
  }
}

Bảo mật dữ liệu trong cụm Elaticsearch

Khi Elaticsearch chạy trong một cụm (điều này là phổ biến), các cài đặt bảo mật trong cụm đó trở nên quan trọng. Để liên lạc an toàn giữa các nút, Elaticsearch sử dụng giao thức TLS. Để thiết lập tương tác an toàn giữa chúng, bạn cần có chứng chỉ. Chúng tôi tạo chứng chỉ và khóa riêng ở định dạng PEM:

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil ca --pem

Sau khi thực hiện lệnh trên, vào thư mục /../elasticsearch kho lưu trữ sẽ xuất hiện đàn hồi-stack-ca.zip. Bên trong nó, bạn sẽ tìm thấy chứng chỉ và khóa riêng có phần mở rộng crt и chính tương ứng. Nên đặt chúng trên một tài nguyên dùng chung, tài nguyên này có thể truy cập được từ tất cả các nút trong cụm.

Bây giờ, mỗi nút cần có chứng chỉ và khóa riêng dựa trên những chứng chỉ trong thư mục dùng chung. Khi thực hiện lệnh, bạn sẽ được yêu cầu đặt mật khẩu. Bạn có thể thêm các tùy chọn bổ sung -ip và -dns để xác minh đầy đủ các nút tương tác.

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.key

Do thực thi lệnh, chúng tôi sẽ nhận được chứng chỉ và khóa riêng ở định dạng PKCS#12, được bảo vệ bằng mật khẩu. Tất cả những gì còn lại là di chuyển tệp đã tạo p12 vào thư mục cấu hình:

[elastic@node1 ~]$ mv elasticsearch/elastic-certificates.p12 elasticsearch/config

Thêm mật khẩu vào chứng chỉ ở định dạng p12 trong kho khóa và kho tin cậy trên mỗi nút:

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

Đã biết elaticsearch.yml Tất cả những gì còn lại là thêm các dòng có dữ liệu chứng chỉ:

xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

Chúng tôi khởi chạy tất cả các nút Elaticsearch và thực thi quăn lại. Nếu mọi thứ được thực hiện chính xác, phản hồi có nhiều nút sẽ được trả về:

[elastic@node1 ~]$ curl node1:9200/_cat/nodes -u elastic:password                                                                                    
172.18.0.3 43 75 4 0.00 0.05 0.05 dim * node2                                                                                                                     
172.18.0.4 21 75 3 0.00 0.05 0.05 dim - node3                                                                                                                     
172.18.0.2 39 75 4 0.00 0.05 0.05 dim - node1

Có một tùy chọn bảo mật khác - lọc địa chỉ IP (có sẵn trong các đăng ký từ cấp Vàng). Cho phép bạn tạo danh sách trắng các địa chỉ IP mà từ đó bạn được phép truy cập các nút.

Bảo mật dữ liệu bên ngoài cụm Elaticsearch

Bên ngoài cụm có nghĩa là kết nối các công cụ bên ngoài: Kibana, Logstash, Beats hoặc các máy khách bên ngoài khác.

Elastic under lock and key: cho phép các tùy chọn bảo mật cụm Elaticsearch để truy cập từ bên trong và bên ngoài

Để định cấu hình hỗ trợ cho https (thay vì http), hãy thêm dòng mới vào elasticsearch.yml:

xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: elastic-certificates.p12
xpack.security.http.ssl.truststore.path: elastic-certificates.p12

Bởi vì Chứng chỉ được bảo vệ bằng mật khẩu, thêm nó vào kho khóa và kho tin cậy trên mỗi nút:

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.http.ssl.truststore.secure_password

Sau khi thêm khóa, các nút Elaticsearch đã sẵn sàng kết nối qua https. Bây giờ họ có thể được đưa ra.

Bước tiếp theo là tạo key để kết nối Kibana và thêm nó vào cấu hình. Dựa trên chứng chỉ đã có trong thư mục dùng chung, chúng tôi sẽ tạo chứng chỉ ở định dạng PEM (PKCS#12 Kibana, Logstash và Beats chưa hỗ trợ):

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.key --pem

Tất cả những gì còn lại là giải nén các khóa đã tạo vào thư mục có cấu hình Kibana:

[elastic@node1 ~]$ unzip elasticsearch/certificate-bundle.zip -d kibana/config

Các phím đã ở đó, vì vậy tất cả những gì còn lại là thay đổi cấu hình Kibana để nó bắt đầu sử dụng chúng. Trong tệp cấu hình kibana.yml, thay đổi http thành https và thêm các dòng có cài đặt kết nối SSL. Ba dòng cuối cùng định cấu hình giao tiếp an toàn giữa trình duyệt của người dùng và Kibana.

elasticsearch.hosts: ["https://${HOSTNAME}:9200"]
elasticsearch.ssl.certificateAuthorities: /shared_folder/ca/ca.crt
elasticsearch.ssl.verificationMode: certificate
server.ssl.enabled: true
server.ssl.key: /../kibana/config/instance/instance.key
server.ssl.certificate: /../kibana/config/instance/instance.crt

Như vậy, quá trình cài đặt đã hoàn tất và quyền truy cập vào dữ liệu trong cụm Elaticsearch được mã hóa.

Nếu bạn có thắc mắc về khả năng của Elastic Stack trên các đăng ký miễn phí hoặc trả phí, giám sát tác vụ hoặc tạo hệ thống SIEM, hãy để lại yêu cầu tới mẫu phản hồi trên trang web của chúng tôi.

Các bài viết khác của chúng tôi về Elastic Stack trên Habré:

Tìm hiểu về Machine Learning trong Elastic Stack (còn gọi là Elaticsearch, hay còn gọi là ELK)

Kích thước Elaticsearch

Nguồn: www.habr.com

Thêm một lời nhận xét