Elastic under lock and key: activa as opcións de seguranza do clúster de Elasticsearch para acceder desde dentro e fóra

Elastic under lock and key: activa as opcións de seguranza do clúster de Elasticsearch para acceder desde dentro e fóra

Elastic Stack é unha ferramenta moi coñecida no mercado de sistemas SIEM (en realidade, non só eles). Pode recoller moitos datos de diferentes tamaños, tanto sensibles como pouco sensibles. Non é totalmente correcto se o acceso aos propios elementos de Elastic Stack non está protexido. De forma predeterminada, todos os elementos de Elastic listos para usar (colectores Elasticsearch, Logstash, Kibana e Beats) execútanse con protocolos abertos. E no propio Kibana, a autenticación está desactivada. Todas estas interaccións pódense garantir e neste artigo dirémosche como facelo. Para comodidade, dividimos a narración en 3 bloques semánticos:

  • Modelo de acceso a datos baseado en roles
  • Seguridade dos datos dentro dun clúster Elasticsearch
  • Protexer datos fóra dun clúster de Elasticsearch

Detalles baixo o corte.

Modelo de acceso a datos baseado en roles

Se instalas Elasticsearch e non o axustas de ningún xeito, o acceso a todos os índices estará aberto a todos. Ben, ou aqueles que poden usar curl. Para evitar isto, Elasticsearch ten un modelo que está dispoñible a partir dunha subscrición básica (que é gratuíta). Esquemáticamente parece algo así:

Elastic under lock and key: activa as opcións de seguranza do clúster de Elasticsearch para acceder desde dentro e fóra

O que hai na imaxe

  • Os usuarios son todos os que poden iniciar sesión usando as súas credenciais.
  • Un rol é un conxunto de dereitos.
  • Os dereitos son un conxunto de privilexios.
  • Os privilexios son permisos para escribir, ler, eliminar, etc. (Lista completa de privilexios)
  • Os recursos son índices, documentos, campos, usuarios e outras entidades de almacenamento (o modelo a seguir para algúns recursos só está dispoñible con subscricións de pago).

Por defecto Elasticsearch ten usuarios da caixa, ao que están adscritos roles de caixa. Unha vez que habilites as opcións de seguranza, podes comezar a usalas inmediatamente.

Para activar a seguranza na configuración de Elasticsearch, cómpre engadila ao ficheiro de configuración (por defecto, isto é elasticsearch/config/elasticsearch.yml) nova liña:

xpack.security.enabled: true

Despois de cambiar o ficheiro de configuración, inicie ou reinicie Elasticsearch para que os cambios teñan efecto. O seguinte paso é asignar contrasinais aos usuarios da caixa. Imos facelo de forma interactiva usando o seguinte comando:

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

Comprobamos:

[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

Podes darte unhas palmaditas nas costas: a configuración do lado de Elasticsearch está completada. Agora toca configurar Kibana. Se o executas agora, aparecerán erros, polo que é importante crear un almacén de claves. Isto faise en dous comandos (user kibana e o contrasinal introducido no paso de creación do contrasinal en Elasticsearch):

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

Se todo é correcto, Kibana comezará a solicitar un inicio de sesión e un contrasinal. A subscrición básica inclúe un modelo baseado en usuarios internos. Comezando por Gold, pode conectar sistemas de autenticación externos: sistemas LDAP, PKI, Active Directory e de inicio de sesión único.

Elastic under lock and key: activa as opcións de seguranza do clúster de Elasticsearch para acceder desde dentro e fóra

Tamén se poden limitar os dereitos de acceso a obxectos dentro de Elasticsearch. Non obstante, para facer o mesmo con documentos ou campos, necesitarás unha subscrición de pago (este luxo comeza co nivel Platino). Estas opcións están dispoñibles na interface de Kibana ou a través de API de seguridade. Podes comprobar a través do xa familiar menú de ferramentas de desenvolvemento:

Creando un rol

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

Creando un usuario

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

Seguridade dos datos dentro dun clúster Elasticsearch

Cando Elasticsearch se executa nun clúster (o que é común), a configuración de seguranza do clúster cobra importancia. Para unha comunicación segura entre nós, Elasticsearch usa o protocolo TLS. Para configurar unha interacción segura entre eles, necesitas un certificado. Xeramos un certificado e unha clave privada en formato PEM:

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

Despois de executar o comando anterior, no directorio /../elasticsearch aparecerá o arquivo pila-elastica-ca.zip. No seu interior atoparás un certificado e unha clave privada con extensións crt и clave respectivamente. É recomendable poñelos nun recurso compartido, que debería ser accesible desde todos os nodos do clúster.

Agora cada nodo necesita os seus propios certificados e claves privadas baseados nos que hai no directorio compartido. Ao executar o comando, pediráselle que estableza un contrasinal. Podes engadir opcións adicionais -ip e -dns para a verificación completa dos nós que interactúan.

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

Como resultado da execución do comando, recibiremos un certificado e unha clave privada en formato PKCS#12, protexidos por contrasinal. Só queda mover o ficheiro xerado p12 ao directorio de configuración:

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

Engade un contrasinal ao certificado no formato p12 no almacén de claves e almacén de confianza en cada nodo:

[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

Xa coñecido elasticsearch.yml Só queda engadir liñas cos datos do certificado:

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

Lanzamos todos os nodos de Elasticsearch e executamos enrolar. Se todo se fixo correctamente, devolverase unha resposta con varios nodos:

[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

Hai outra opción de seguridade: filtrado de enderezos IP (dispoñible nas subscricións do nivel Ouro). Permítelle crear listas brancas de enderezos IP desde os que se lle permite acceder aos nós.

Protexer datos fóra dun clúster de Elasticsearch

Fóra do clúster significa conectar ferramentas externas: Kibana, Logstash, Beats ou outros clientes externos.

Elastic under lock and key: activa as opcións de seguranza do clúster de Elasticsearch para acceder desde dentro e fóra

Para configurar o soporte para https (en lugar de http), engade novas liñas a 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

Porque O certificado está protexido por contrasinal, engádeo ao almacén de claves e ao almacén de confianza en cada nodo:

[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

Despois de engadir as claves, os nodos de Elasticsearch están listos para conectarse a través de https. Agora xa se poden lanzar.

O seguinte paso é crear unha clave para conectar Kibana e engadila á configuración. En función do certificado que xa se atopa no directorio compartido, xeraremos un certificado en formato PEM (PKCS#12 Kibana, Logstash e Beats aínda non son compatibles):

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

Só queda descomprimir as claves creadas no cartafol coa configuración de Kibana:

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

As claves están aí, polo que só queda cambiar a configuración de Kibana para que comece a utilizalas. No ficheiro de configuración kibana.yml, cambia http a https e engade liñas con configuración de conexión SSL. As tres últimas liñas configuran a comunicación segura entre o navegador do usuario e 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

Así, a configuración complétase e o acceso aos datos do clúster Elasticsearch está cifrado.

Se tes dúbidas sobre as capacidades de Elastic Stack en subscricións gratuítas ou de pago, supervisar tarefas ou crear un sistema SIEM, deixa unha solicitude a formulario de comentarios na nosa páxina web.

Máis artigos sobre Elastic Stack en Habré:

Comprensión da aprendizaxe automática no Elastic Stack (tamén coñecido como Elasticsearch, tamén coñecido como ELK)

Tamaño de Elasticsearch

Fonte: www.habr.com

Engadir un comentario