Elastic under lock and key. Elasticsearch կլաստերի անվտանգության ընտրանքների հնարավորություն ներսից և դրսից մուտք գործելու համար

Elastic under lock and key. Elasticsearch կլաստերի անվտանգության ընտրանքների հնարավորություն ներսից և դրսից մուտք գործելու համար

Elastic Stack-ը հայտնի գործիք է SIEM համակարգերի շուկայում (իրականում ոչ միայն դրանք): Այն կարող է հավաքել շատ տարբեր չափերի տվյալներ՝ և՛ զգայուն, և՛ ոչ շատ զգայուն: Ամբողջովին ճիշտ չէ, եթե Elastic Stack տարրերին հասանելիությունը պաշտպանված չէ: Լռելյայնորեն, բոլոր Elastic-ից դուրս տարրերը (Elasticsearch, Logstash, Kibana և Beats կոլեկցիոներներ) աշխատում են բաց արձանագրություններով: Իսկ հենց Kibana-ում իսկորոշումն անջատված է: Այս բոլոր փոխազդեցությունները կարող են ապահովվել, և այս հոդվածում մենք ձեզ կասենք, թե ինչպես դա անել: Հարմարության համար մենք պատմությունը բաժանեցինք 3 իմաստային բլոկների.

  • Դերի վրա հիմնված տվյալների հասանելիության մոդել
  • Տվյալների անվտանգությունը Elasticsearch կլաստերի շրջանակներում
  • Տվյալների ապահովում Elasticsearch կլաստերից դուրս

Մանրամասները կտրվածքի տակ։

Դերի վրա հիմնված տվյալների հասանելիության մոդել

Եթե ​​տեղադրեք Elasticsearch-ը և այն որևէ կերպ չկարգավորեք, բոլոր ինդեքսների հասանելիությունը բաց կլինի բոլորի համար: Դե, կամ նրանք, ովքեր կարող են օգտագործել գանգուր: Սրանից խուսափելու համար Elasticsearch-ն ունի դերային մոդել, որը հասանելի է՝ սկսած Հիմնական բաժանորդագրությունից (որն անվճար է): Սխեմատիկորեն նման բան է թվում.

Elastic under lock and key. Elasticsearch կլաստերի անվտանգության ընտրանքների հնարավորություն ներսից և դրսից մուտք գործելու համար

Ինչ է պատկերված նկարում

  • Օգտատերերը բոլորն են, ովքեր կարող են մուտք գործել՝ օգտագործելով իրենց հավատարմագրերը:
  • Դերը իրավունքների մի ամբողջություն է:
  • Իրավունքները մի շարք արտոնություններ են:
  • Արտոնությունները գրելու, կարդալու, ջնջելու և այլնի թույլտվություններ են: (Արտոնությունների ամբողջական ցանկը)
  • Ռեսուրսները ինդեքսներն են, փաստաթղթերը, դաշտերը, օգտվողները և պահեստավորման այլ սուբյեկտներ (որոշ ռեսուրսների դերային մոդելը հասանելի է միայն վճարովի բաժանորդագրությունների դեպքում):

Լռելյայնորեն Elasticsearch-ն ունի տուփ օգտագործողներ, որին կցված են տուփի դերեր. Անվտանգության կարգավորումները միացնելուց հետո կարող եք անմիջապես սկսել դրանք օգտագործել:

Elasticsearch-ի կարգավորումներում անվտանգությունը միացնելու համար դուք պետք է այն ավելացնեք կազմաձևման ֆայլում (լռելյայն սա է elasticsearch/config/elasticsearch.yml) նոր տող.

xpack.security.enabled: true

Կազմաձևման ֆայլը փոխելուց հետո գործարկեք կամ վերագործարկեք Elasticsearch-ը, որպեսզի փոփոխություններն ուժի մեջ մտնեն: Հաջորդ քայլը տուփի օգտատերերին գաղտնաբառերի նշանակումն է: Եկեք դա անենք ինտերակտիվ կերպով՝ օգտագործելով ստորև նշված հրամանը.

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

Մենք ստուգում ենք.

[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

Դուք կարող եք թփթփացնել ձեր մեջքին. Elasticsearch-ի կողմի կարգավորումներն ավարտված են: Այժմ ժամանակն է կարգավորել Kibana-ն: Եթե ​​այն հիմա գործարկեք, սխալներ կհայտնվեն, ուստի կարևոր է ստեղծել բանալիների պահեստ: Սա արվում է երկու հրամանով (user կիբանա և գաղտնաբառը, որը մուտքագրվել է Elasticsearch-ում գաղտնաբառի ստեղծման քայլում):

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

Եթե ​​ամեն ինչ ճիշտ է, Kibana-ն կսկսի մուտքի և գաղտնաբառ խնդրել: Հիմնական բաժանորդագրությունը ներառում է դերային մոդել, որը հիմնված է ներքին օգտագործողների վրա: Սկսած Gold-ից՝ դուք կարող եք միացնել արտաքին վավերացման համակարգեր՝ LDAP, PKI, Active Directory և Single sign-on համակարգեր:

Elastic under lock and key. Elasticsearch կլաստերի անվտանգության ընտրանքների հնարավորություն ներսից և դրսից մուտք գործելու համար

Elasticsearch-ի ներսում գտնվող օբյեկտների մուտքի իրավունքները նույնպես կարող են սահմանափակվել: Այնուամենայնիվ, փաստաթղթերի կամ դաշտերի համար նույնն անելու համար ձեզ հարկավոր կլինի վճարովի բաժանորդագրություն (այս շքեղությունը սկսվում է Platinum մակարդակից): Այս կարգավորումները հասանելի են Kibana ինտերֆեյսում կամ միջոցով Անվտանգության API. Դուք կարող եք ստուգել արդեն ծանոթ Dev Tools ցանկի միջոցով.

Դերի ստեղծում

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

Օգտագործողի ստեղծում

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

Տվյալների անվտանգությունը Elasticsearch կլաստերի շրջանակներում

Երբ Elasticsearch-ն աշխատում է կլաստերի մեջ (որը սովորական է), կլաստերի անվտանգության կարգավորումները կարևոր են դառնում: Հանգույցների միջև անվտանգ հաղորդակցության համար Elasticsearch-ն օգտագործում է TLS արձանագրությունը: Նրանց միջև անվտանգ փոխազդեցություն ստեղծելու համար ձեզ անհրաժեշտ է վկայագիր: Մենք ստեղծում ենք վկայագիր և անձնական բանալի PEM ձևաչափով.

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

Վերևի հրամանը կատարելուց հետո գրացուցակում /../elasticsearch կհայտնվի արխիվը elastic-stack-ca.zip. Դրա ներսում դուք կգտնեք վկայագիր և անձնական բանալի՝ ընդարձակումներով crt и հիմնական համապատասխանաբար. Ցանկալի է դրանք տեղադրել ընդհանուր ռեսուրսի վրա, որը պետք է հասանելի լինի կլաստերի բոլոր հանգույցներից:

Յուրաքանչյուր հանգույց այժմ կարիք ունի իր վկայականների և մասնավոր բանալիների՝ հիմնված ընդհանուր գրացուցակում գտնվողների վրա: Հրամանը կատարելիս ձեզանից կպահանջվի գաղտնաբառ սահմանել: Դուք կարող եք ավելացնել լրացուցիչ տարբերակներ՝ -ip և -dns՝ փոխազդող հանգույցների ամբողջական ստուգման համար:

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

Հրամանի կատարման արդյունքում մենք կստանանք վկայական և անձնական բանալի PKCS#12 ձևաչափով՝ պաշտպանված գաղտնաբառով։ Մնում է միայն տեղափոխել ստեղծված ֆայլը p12 դեպի կազմաձևման գրացուցակ.

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

Վկայագրին գաղտնաբառ ավելացրեք ձևաչափով p12 keystore-ում և truststore-ում յուրաքանչյուր հանգույցում՝

[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

Արդեն հայտնի է elasticsearch.yml Մնում է միայն սերտիֆիկատի տվյալներով տողեր ավելացնել.

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

Մենք գործարկում ենք Elasticsearch-ի բոլոր հանգույցները և կատարում գալար. Եթե ​​ամեն ինչ ճիշտ է արվել, մի քանի հանգույցներով պատասխան կվերադարձվի.

[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

Կա անվտանգության մեկ այլ տարբերակ՝ IP հասցեի զտում (հասանելի է Gold մակարդակի բաժանորդագրություններում): Թույլ է տալիս ստեղծել IP հասցեների սպիտակ ցուցակներ, որոնցից թույլատրվում է մուտք գործել հանգույցներ:

Տվյալների ապահովում Elasticsearch կլաստերից դուրս

Կլաստերից դուրս նշանակում է արտաքին գործիքների միացում՝ Kibana, Logstash, Beats կամ այլ արտաքին հաճախորդներ:

Elastic under lock and key. Elasticsearch կլաստերի անվտանգության ընտրանքների հնարավորություն ներսից և դրսից մուտք գործելու համար

https-ի աջակցությունը կարգավորելու համար (http-ի փոխարեն), նոր տողեր ավելացրեք 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

Որովհետեւ Վկայագիրը պաշտպանված է գաղտնաբառով, այն ավելացրեք բանալիների պահեստում և վստահության պահոց յուրաքանչյուր հանգույցում.

[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

Բանալիները ավելացնելուց հետո Elasticsearch հանգույցները պատրաստ են միանալու https-ի միջոցով: Այժմ դրանք կարող են գործարկվել։

Հաջորդ քայլը Kibana-ին միացնելու և կոնֆիգուրացիայի մեջ ավելացնելու բանալի ստեղծելն է: Վկայագրի հիման վրա, որն արդեն գտնվում է ընդհանուր գրացուցակում, մենք կստեղծենք վկայագիր PEM ձևաչափով (PKCS#12 Kibana, Logstash և Beats-ը դեռ չեն աջակցում).

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

Մնում է միայն բացել ստեղծված ստեղները Kibana-ի կազմաձևով թղթապանակում.

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

Ստեղները կան, ուստի մնում է միայն փոխել Kibana-ի կոնֆիգուրացիան, որպեսզի այն սկսի օգտագործել դրանք: Kibana.yml կոնֆիգուրացիայի ֆայլում փոխեք http-ը https-ի և ավելացրեք տողեր SSL կապի կարգավորումներով: Վերջին երեք տողերը կարգավորում են անվտանգ հաղորդակցությունը օգտվողի բրաուզերի և 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

Այսպիսով, կարգավորումներն ավարտված են, և Elasticsearch կլաստերի տվյալների հասանելիությունը կոդավորված է:

Եթե ​​հարցեր ունեք Elastic Stack-ի անվճար կամ վճարովի բաժանորդագրությունների, մոնիտորինգի առաջադրանքների կամ SIEM համակարգի ստեղծման հնարավորությունների վերաբերյալ, թողեք հարցումը հետևյալ հասցեով. հետադարձ կապի ձև մեր կայքում:

Habré-ում Elastic Stack-ի մասին մեր ավելի շատ հոդվածներ.

Հասկանալով մեքենայական ուսուցումը Elastic Stack-ում (aka Elasticsearch, aka ELK)

Elasticsearch չափագրում

Source: www.habr.com

Добавить комментарий