Anjal di bawah kunci dan kunci: mendayakan pilihan keselamatan kelompok Elasticsearch untuk akses dari dalam dan luar

Anjal di bawah kunci dan kunci: mendayakan pilihan keselamatan kelompok Elasticsearch untuk akses dari dalam dan luar

Elastic Stack ialah alat yang terkenal dalam pasaran sistem SIEM (sebenarnya, bukan sahaja mereka). Ia boleh mengumpul banyak data bersaiz berbeza, kedua-duanya sensitif dan tidak terlalu sensitif. Ia tidak betul sepenuhnya jika akses kepada elemen Elastic Stack itu sendiri tidak dilindungi. Secara lalai, semua elemen Elastik di luar kotak (Elasticsearch, Logstash, Kibana dan pengumpul Beats) dijalankan pada protokol terbuka. Dan dalam Kibana sendiri, pengesahan dilumpuhkan. Semua interaksi ini boleh dijamin dan dalam artikel ini kami akan memberitahu anda cara melakukan ini. Untuk kemudahan, kami membahagikan naratif kepada 3 blok semantik:

  • Model capaian data berasaskan peranan
  • Keselamatan data dalam kelompok Elasticsearch
  • Melindungi data di luar kelompok Elasticsearch

Butiran di bawah potongan.

Model capaian data berasaskan peranan

Jika anda memasang Elasticsearch dan tidak menalanya dalam apa jua cara, akses kepada semua indeks akan dibuka kepada semua orang. Nah, atau mereka yang boleh menggunakan curl. Untuk mengelakkan ini, Elasticsearch mempunyai model peranan yang tersedia bermula dengan langganan Asas (yang percuma). Secara skematik ia kelihatan seperti ini:

Anjal di bawah kunci dan kunci: mendayakan pilihan keselamatan kelompok Elasticsearch untuk akses dari dalam dan luar

Apa yang ada dalam gambar

  • Pengguna ialah semua orang yang boleh log masuk menggunakan kelayakan mereka.
  • Peranan adalah satu set hak.
  • Hak adalah satu set keistimewaan.
  • Keistimewaan ialah kebenaran untuk menulis, membaca, memadam, dsb. (Senarai penuh keistimewaan)
  • Sumber ialah indeks, dokumen, medan, pengguna dan entiti storan lain (model peranan untuk sesetengah sumber hanya tersedia dengan langganan berbayar).

Secara lalai Elasticsearch mempunyai pengguna kotak, yang mana ia dilampirkan peranan kotak. Sebaik sahaja anda mendayakan tetapan keselamatan, anda boleh mula menggunakannya dengan serta-merta.

Untuk mendayakan keselamatan dalam tetapan Elasticsearch, anda perlu menambahkannya pada fail konfigurasi (secara lalai ini adalah elasticsearch/config/elasticsearch.yml) baris baru:

xpack.security.enabled: true

Selepas menukar fail konfigurasi, lancarkan atau mulakan semula Elasticsearch untuk perubahan berkuat kuasa. Langkah seterusnya ialah memberikan kata laluan kepada pengguna kotak. Mari lakukan ini secara interaktif menggunakan arahan di bawah:

[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 menyemak:

[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 boleh menepuk belakang diri sendiri - tetapan di bahagian Elasticsearch selesai. Kini tiba masanya untuk mengkonfigurasi Kibana. Jika anda menjalankannya sekarang, ralat akan muncul, jadi adalah penting untuk membuat stor kunci. Ini dilakukan dalam dua arahan (user kibana dan kata laluan yang dimasukkan pada langkah penciptaan kata laluan dalam Elasticsearch):

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

Jika semuanya betul, Kibana akan mula meminta log masuk dan kata laluan. Langganan Asas termasuk model peranan berdasarkan pengguna dalaman. Bermula dengan Emas, anda boleh menyambungkan sistem pengesahan luaran - LDAP, PKI, Active Directory dan sistem log masuk Tunggal.

Anjal di bawah kunci dan kunci: mendayakan pilihan keselamatan kelompok Elasticsearch untuk akses dari dalam dan luar

Hak akses kepada objek di dalam Elasticsearch juga boleh dihadkan. Walau bagaimanapun, untuk melakukan perkara yang sama untuk dokumen atau medan, anda memerlukan langganan berbayar (mewah ini bermula dengan tahap Platinum). Tetapan ini tersedia dalam antara muka Kibana atau melalui API Keselamatan. Anda boleh menyemak melalui menu Alat Dev yang sudah biasa:

Mencipta peranan

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

Mencipta 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"
  }
}

Keselamatan data dalam kelompok Elasticsearch

Apabila Elasticsearch berjalan dalam kelompok (yang biasa), tetapan keselamatan dalam kelompok menjadi penting. Untuk komunikasi selamat antara nod, Elasticsearch menggunakan protokol TLS. Untuk menyediakan interaksi selamat antara mereka, anda memerlukan sijil. Kami menjana sijil dan kunci peribadi dalam format PEM:

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

Selepas melaksanakan arahan di atas, dalam direktori /../elasticsearch arkib akan muncul tindanan-anjal-ca.zip. Di dalamnya anda akan menemui sijil dan kunci peribadi dengan sambungan crt ΠΈ utama masing-masing. Adalah dinasihatkan untuk meletakkannya pada sumber yang dikongsi, yang sepatutnya boleh diakses dari semua nod dalam kelompok.

Setiap nod kini memerlukan sijil dan kunci persendiriannya sendiri berdasarkan yang terdapat dalam direktori kongsi. Apabila melaksanakan arahan, anda akan diminta untuk menetapkan kata laluan. Anda boleh menambah pilihan tambahan -ip dan -dns untuk pengesahan lengkap nod yang berinteraksi.

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

Hasil daripada melaksanakan arahan, kami akan menerima sijil dan kunci peribadi dalam format PKCS#12, dilindungi oleh kata laluan. Yang tinggal hanyalah memindahkan fail yang dijana p12 ke direktori konfigurasi:

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

Tambahkan kata laluan pada sijil dalam format p12 dalam stor kunci dan stor amanah pada setiap nod:

[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 tinggal hanyalah menambah baris dengan data sijil:

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 melancarkan semua nod Elasticsearch dan melaksanakan curl. Jika semuanya dilakukan dengan betul, respons dengan beberapa nod 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

Terdapat satu lagi pilihan keselamatan - penapisan alamat IP (tersedia dalam langganan dari peringkat Emas). Membolehkan anda membuat senarai putih alamat IP dari mana anda dibenarkan untuk mengakses nod.

Melindungi data di luar kelompok Elasticsearch

Di luar kluster bermaksud menyambungkan alat luaran: Kibana, Logstash, Beats atau pelanggan luaran yang lain.

Anjal di bawah kunci dan kunci: mendayakan pilihan keselamatan kelompok Elasticsearch untuk akses dari dalam dan luar

Untuk mengkonfigurasi sokongan untuk https (bukan http), tambah baris baharu pada 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

Kerana Sijil dilindungi kata laluan, tambahkannya pada stor kunci dan stor amanah pada setiap nod:

[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

Selepas menambah kekunci, nod Elasticsearch sedia untuk disambungkan melalui https. Kini mereka boleh dilancarkan.

Langkah seterusnya ialah mencipta kunci untuk menyambungkan Kibana dan menambahnya pada konfigurasi. Berdasarkan sijil yang sudah ada dalam direktori kongsi, kami akan menjana sijil dalam format PEM (PKCS#12 Kibana, Logstash dan Beats belum menyokong):

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

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

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

Kekunci ada di sana, jadi yang tinggal hanyalah menukar konfigurasi Kibana supaya ia mula menggunakannya. Dalam fail konfigurasi kibana.yml, tukar http kepada https dan tambahkan baris dengan tetapan sambungan SSL. Tiga baris terakhir mengkonfigurasi komunikasi selamat antara penyemak imbas 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

Oleh itu, tetapan selesai dan akses kepada data dalam kelompok Elasticsearch disulitkan.

Jika anda mempunyai soalan tentang keupayaan Elastic Stack pada langganan percuma atau berbayar, memantau tugasan atau mencipta sistem SIEM, tinggalkan permintaan kepada borang maklumbalas di laman web kami.

Lagi artikel kami tentang Elastic Stack on HabrΓ©:

Memahami Pembelajaran Mesin dalam Tindanan Elastik (aka Elasticsearch, aka ELK)

Saiz carian elastik

Sumber: www.habr.com

Tambah komen