Elastic under lock and key: mengaktifkan opsi keamanan cluster Elasticsearch untuk akses dari dalam dan luar

Elastic under lock and key: mengaktifkan opsi keamanan cluster Elasticsearch untuk akses dari dalam dan luar

Elastic Stack adalah alat yang terkenal di pasar sistem SIEM (sebenarnya, bukan hanya mereka). Itu dapat mengumpulkan banyak data dengan ukuran berbeda, baik sensitif maupun tidak terlalu sensitif. Tidak sepenuhnya benar jika akses ke elemen Elastic Stack itu sendiri tidak dilindungi. Secara default, semua elemen Elasticsearch (Elasticsearch, Logstash, Kibana, dan Beats collector) berjalan pada protokol terbuka. Dan di Kibana sendiri, otentikasi dinonaktifkan. Semua interaksi ini dapat diamankan dan dalam artikel ini kami akan memberi tahu Anda cara melakukannya. Untuk kenyamanan, kami membagi narasi menjadi 3 blok semantik:

  • Model akses data berbasis peran
  • Keamanan data dalam klaster Elasticsearch
  • Mengamankan data di luar cluster Elasticsearch

Detail di bawah potongan.

Model akses data berbasis peran

Jika Anda menginstal Elasticsearch dan tidak menyetelnya dengan cara apa pun, akses ke semua indeks akan terbuka untuk semua orang. Nah, atau mereka yang bisa menggunakan curl. Untuk menghindari hal ini, Elasticsearch memiliki model peran yang tersedia mulai dari langganan Dasar (yang gratis). Secara skematis terlihat seperti ini:

Elastic under lock and key: mengaktifkan opsi keamanan cluster Elasticsearch untuk akses dari dalam dan luar

Apa yang ada di gambar

  • Pengguna adalah setiap orang yang dapat login menggunakan kredensialnya.
  • Peran adalah seperangkat hak.
  • Hak adalah seperangkat hak istimewa.
  • Hak istimewa adalah izin untuk menulis, membaca, menghapus, dll. (Daftar lengkap hak istimewa)
  • Sumber daya adalah indeks, dokumen, bidang, pengguna, dan entitas penyimpanan lainnya (model peran untuk beberapa sumber daya hanya tersedia dengan langganan berbayar).

Secara default, Elasticsearch memilikinya pengguna kotak, tempat mereka dilampirkan peran kotak. Setelah Anda mengaktifkan pengaturan keamanan, Anda dapat segera mulai menggunakannya.

Untuk mengaktifkan keamanan dalam pengaturan Elasticsearch, Anda perlu menambahkannya ke file konfigurasi (secara default ini adalah elasticsearch/config/elasticsearch.yml) garis baru:

xpack.security.enabled: true

Setelah mengubah file konfigurasi, luncurkan atau mulai ulang Elasticsearch agar perubahan diterapkan. Langkah selanjutnya adalah menetapkan kata sandi untuk pengguna kotak. Mari kita lakukan ini secara interaktif menggunakan perintah di bawah ini:

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

Kami memeriksa:

[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

Anda dapat menepuk punggung Anda sendiri - pengaturan di sisi Elasticsearch telah selesai. Sekarang saatnya mengkonfigurasi Kibana. Jika Anda menjalankannya sekarang, kesalahan akan muncul, jadi penting untuk membuat penyimpanan kunci. Ini dilakukan dalam dua perintah (user kibana dan kata sandi yang dimasukkan pada langkah pembuatan kata sandi di Elasticsearch):

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

Jika semuanya sudah benar, Kibana akan mulai meminta login dan kata sandi. Langganan Dasar mencakup model peran berdasarkan pengguna internal. Dimulai dengan Gold, Anda dapat menghubungkan sistem autentikasi eksternal - LDAP, PKI, Direktori Aktif, dan sistem masuk tunggal.

Elastic under lock and key: mengaktifkan opsi keamanan cluster Elasticsearch untuk akses dari dalam dan luar

Hak akses terhadap objek di dalam Elasticsearch juga dapat dibatasi. Namun, untuk melakukan hal yang sama pada dokumen atau bidang, Anda memerlukan langganan berbayar (kemewahan ini dimulai dengan level Platinum). Pengaturan ini tersedia di antarmuka Kibana atau melalui API Keamanan. Anda dapat memeriksanya melalui menu Dev Tools yang sudah familiar:

Menciptakan peran

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

Membuat pengguna

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

Keamanan data dalam klaster Elasticsearch

Ketika Elasticsearch berjalan di sebuah klaster (yang umum terjadi), pengaturan keamanan di dalam klaster menjadi penting. Untuk komunikasi yang aman antar node, Elasticsearch menggunakan protokol TLS. Untuk mengatur interaksi aman di antara keduanya, Anda memerlukan sertifikat. Kami menghasilkan sertifikat dan kunci pribadi dalam format PEM:

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

Setelah menjalankan perintah di atas, di direktori /../elasticsearch arsip akan muncul elastis-stack-ca.zip. Di dalamnya Anda akan menemukan sertifikat dan kunci pribadi dengan ekstensi crt ΠΈ kunci masing-masing. Dianjurkan untuk menempatkannya pada sumber daya bersama, yang harus dapat diakses dari semua node di cluster.

Setiap node sekarang memerlukan sertifikat dan kunci pribadinya sendiri berdasarkan yang ada di direktori bersama. Saat menjalankan perintah, Anda akan diminta untuk mengatur kata sandi. Anda dapat menambahkan opsi tambahan -ip dan -dns untuk verifikasi lengkap node yang berinteraksi.

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

Sebagai hasil dari menjalankan perintah, kita akan menerima sertifikat dan kunci pribadi dalam format PKCS#12, dilindungi oleh kata sandi. Yang tersisa hanyalah memindahkan file yang dihasilkan p12 ke direktori konfigurasi:

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

Tambahkan kata sandi ke sertifikat dalam format p12 di keystore dan truststore pada setiap node:

[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

Sudah diketahui elasticsearch.yml Yang tersisa hanyalah menambahkan baris dengan data sertifikat:

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

Kami meluncurkan semua node Elasticsearch dan mengeksekusi keriting. Jika semuanya dilakukan dengan benar, respons dengan beberapa node akan dikembalikan:

[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

Ada opsi keamanan lain - pemfilteran alamat IP (tersedia dalam langganan dari tingkat Emas). Memungkinkan Anda membuat daftar putih alamat IP yang memungkinkan Anda mengakses node.

Mengamankan data di luar cluster Elasticsearch

Di luar cluster berarti menghubungkan alat eksternal: Kibana, Logstash, Beats, atau klien eksternal lainnya.

Elastic under lock and key: mengaktifkan opsi keamanan cluster Elasticsearch untuk akses dari dalam dan luar

Untuk mengonfigurasi dukungan untuk https (bukan http), tambahkan baris baru ke 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

Karena Sertifikat dilindungi kata sandi, tambahkan ke keystore dan truststore di setiap node:

[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

Setelah menambahkan kunci, node Elasticsearch siap terhubung melalui https. Sekarang mereka bisa diluncurkan.

Langkah selanjutnya adalah membuat kunci untuk menghubungkan Kibana dan menambahkannya ke konfigurasi. Berdasarkan sertifikat yang sudah ada di direktori bersama, kami akan membuat sertifikat dalam format PEM (PKCS#12 Kibana, Logstash, dan Beats belum mendukung):

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

Yang tersisa hanyalah membongkar kunci yang dibuat ke dalam folder dengan konfigurasi Kibana:

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

Kuncinya ada di sana, jadi yang tersisa hanyalah mengubah konfigurasi Kibana agar dapat mulai menggunakannya. Pada file konfigurasi kibana.yml, ubah http menjadi https dan tambahkan baris dengan pengaturan koneksi SSL. Tiga baris terakhir mengonfigurasi komunikasi aman antara browser pengguna dan 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

Dengan demikian, pengaturan selesai dan akses ke data di cluster Elasticsearch dienkripsi.

Jika Anda memiliki pertanyaan tentang kemampuan Elastic Stack pada langganan gratis atau berbayar, memantau tugas, atau membuat sistem SIEM, tinggalkan permintaan ke formulir umpan balik di situs web kami.

Lebih banyak artikel kami tentang Elastic Stack di HabrΓ©:

Memahami Pembelajaran Mesin di Elastic Stack (alias Elasticsearch, alias ELK)

Ukuran pencarian elastis

Sumber: www.habr.com

Tambah komentar