From 11721ebe147f27ce33b921ce52f2a950ea375a94 Mon Sep 17 00:00:00 2001 From: manuasir Date: Wed, 26 Jun 2019 17:00:40 +0200 Subject: [PATCH 01/53] Added new tasks for xpack security --- .../elastic-stack/ansible-elasticsearch/tasks/main.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml index bd7bc0d4..35c30aa9 100644 --- a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml @@ -112,6 +112,16 @@ - wazuh_alerts_template_exits.status != 200 tags: init +- name: Check that the instances.yml file exists + stat: + path: /usr/share/elasticsearch/instances.yml + register: instances_exists + +- name: Generating certificates for Elasticsearch security + shell: "/usr/share/elasticsearch/bin/elasticsearch-certutil cert ca --pem --in /usr/share/elasticsearch/instances.yml --out /usr/share/elasticsearch/certs.zip" + when: instances_exists + tags: xpack-security + - import_tasks: "RMRedHat.yml" when: ansible_os_family == "RedHat" From a18a235b139df92433cf10887d9da081ff4dfea9 Mon Sep 17 00:00:00 2001 From: manuasir Date: Wed, 26 Jun 2019 17:00:54 +0200 Subject: [PATCH 02/53] Modifying template for allowing xpack.security --- .../ansible-elasticsearch/templates/elasticsearch.yml.j2 | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 b/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 index 595dd58a..02b1872d 100644 --- a/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 +++ b/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 @@ -22,3 +22,9 @@ discovery.seed_hosts: - {{ item }} {% endfor %} {% endif %} + +# XPACK Security + +{% if elasticsearch_xpack_security %} +xpack.security.enabled: true +{% endif %} \ No newline at end of file From 0e9996b47285cc2e70eeec1a310ec3b328b262af Mon Sep 17 00:00:00 2001 From: manuasir Date: Wed, 26 Jun 2019 17:01:06 +0200 Subject: [PATCH 03/53] Added new variable for enabling xpack security --- roles/elastic-stack/ansible-elasticsearch/defaults/main.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml b/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml index 5d380b6b..fc0e9551 100644 --- a/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml @@ -9,4 +9,5 @@ single_node: false elasticsearch_bootstrap_node: false elasticsearch_master_candidate: false elasticsearch_cluster_nodes: - - 127.0.0.1 \ No newline at end of file + - 127.0.0.1 +elasticsearch_xpack_security: false \ No newline at end of file From dda93ebd15ff017115d1347445960e0c12dd90d4 Mon Sep 17 00:00:00 2001 From: manuasir Date: Wed, 26 Jun 2019 18:52:58 +0200 Subject: [PATCH 04/53] Added new conditions and variables to tasks --- .../ansible-elasticsearch/defaults/main.yml | 3 ++- roles/elastic-stack/ansible-elasticsearch/tasks/main.yml | 9 +++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml b/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml index fc0e9551..5d04e5ee 100644 --- a/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml @@ -10,4 +10,5 @@ elasticsearch_bootstrap_node: false elasticsearch_master_candidate: false elasticsearch_cluster_nodes: - 127.0.0.1 -elasticsearch_xpack_security: false \ No newline at end of file +elasticsearch_xpack_security: false +node_generate_certs: false \ No newline at end of file diff --git a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml index 35c30aa9..84271d15 100644 --- a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml @@ -115,11 +115,16 @@ - name: Check that the instances.yml file exists stat: path: /usr/share/elasticsearch/instances.yml - register: instances_exists + register: instances_file_exists + when: + - node_generate_certs + - elasticsearch_xpack_security - name: Generating certificates for Elasticsearch security shell: "/usr/share/elasticsearch/bin/elasticsearch-certutil cert ca --pem --in /usr/share/elasticsearch/instances.yml --out /usr/share/elasticsearch/certs.zip" - when: instances_exists + when: + - instances_file_exists + - elasticsearch_xpack_security tags: xpack-security - import_tasks: "RMRedHat.yml" From 7194675f028edfb235e95abc45b5511c645efb18 Mon Sep 17 00:00:00 2001 From: manuasir Date: Wed, 26 Jun 2019 19:05:17 +0200 Subject: [PATCH 05/53] Added new template for instances.yml file --- .../ansible-elasticsearch/templates/instances.yml.j2 | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 roles/elastic-stack/ansible-elasticsearch/templates/instances.yml.j2 diff --git a/roles/elastic-stack/ansible-elasticsearch/templates/instances.yml.j2 b/roles/elastic-stack/ansible-elasticsearch/templates/instances.yml.j2 new file mode 100644 index 00000000..ce4c287b --- /dev/null +++ b/roles/elastic-stack/ansible-elasticsearch/templates/instances.yml.j2 @@ -0,0 +1,11 @@ + +# {{ ansible_managed }} +# TO-DO + +{% if node_generate_certs %} +instances: +{% for item in elasticsearch_cluster_nodes %} + ip: {{ item.ip }} + - "{{ item.name }}" +{% endfor %} +{% endif %} \ No newline at end of file From 090514b9c5e2c3b6cc6873ed627f4adb04afa938 Mon Sep 17 00:00:00 2001 From: manuasir Date: Wed, 26 Jun 2019 19:05:46 +0200 Subject: [PATCH 06/53] New tasks for checking instances.yml file --- .../elastic-stack/ansible-elasticsearch/tasks/main.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml index 84271d15..55ef924d 100644 --- a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml @@ -119,7 +119,15 @@ when: - node_generate_certs - elasticsearch_xpack_security - + +- name: Check that the instances.yml file exists + stat: + path: /usr/share/elasticsearch/instances.yml + register: instances_file_exists + when: + - node_generate_certs + - elasticsearch_xpack_security + - name: Generating certificates for Elasticsearch security shell: "/usr/share/elasticsearch/bin/elasticsearch-certutil cert ca --pem --in /usr/share/elasticsearch/instances.yml --out /usr/share/elasticsearch/certs.zip" when: From 48746b9f5a7e689e54506fefb099aa47cdfe247e Mon Sep 17 00:00:00 2001 From: manuasir Date: Wed, 26 Jun 2019 19:37:02 +0200 Subject: [PATCH 07/53] New task for generating instances.yml file --- .../elastic-stack/ansible-elasticsearch/tasks/main.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml index 55ef924d..f9cb07c4 100644 --- a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml @@ -120,10 +120,12 @@ - node_generate_certs - elasticsearch_xpack_security -- name: Check that the instances.yml file exists - stat: - path: /usr/share/elasticsearch/instances.yml - register: instances_file_exists +- name: Write the instances.yml file in the selected node + instances_file: + src: instances.yml.j2 + dest: "/usr/share/elasticsearch/instances.yml" + tags: + - config when: - node_generate_certs - elasticsearch_xpack_security From f0c6d0fcac2e3958daf42ae222e44c2c0c43af4e Mon Sep 17 00:00:00 2001 From: Jose M Date: Fri, 28 Jun 2019 10:09:39 +0200 Subject: [PATCH 08/53] Add elasticsearch_discover_nodes parameter --- roles/elastic-stack/ansible-elasticsearch/defaults/main.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml b/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml index 5d04e5ee..95dd2737 100644 --- a/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml @@ -10,5 +10,7 @@ elasticsearch_bootstrap_node: false elasticsearch_master_candidate: false elasticsearch_cluster_nodes: - 127.0.0.1 +elasticsearch_discovery_nodes: + - 127.0.0.1 elasticsearch_xpack_security: false node_generate_certs: false \ No newline at end of file From 4b1c7d76e8a4174b543957b49eab49265e181bb6 Mon Sep 17 00:00:00 2001 From: Jose M Date: Fri, 28 Jun 2019 10:09:51 +0200 Subject: [PATCH 09/53] Customize playbook. --- playbooks/wazuh-elastic_stack-distributed.yml | 45 ++++++++++++++++--- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/playbooks/wazuh-elastic_stack-distributed.yml b/playbooks/wazuh-elastic_stack-distributed.yml index 887cafbd..5348c876 100644 --- a/playbooks/wazuh-elastic_stack-distributed.yml +++ b/playbooks/wazuh-elastic_stack-distributed.yml @@ -1,9 +1,42 @@ --- -- hosts: + +- hosts: 172.16.0.161 roles: - - role: /etc/ansible/roles/wazuh-ansible/roles/wazuh/ansible-wazuh-manager - - {role: /etc/ansible/roles/wazuh-ansible/roles/wazuh/ansible-filebeat, filebeat_output_logstash_hosts: 'your elastic stack server IP'} -- hosts: + - role: /etc/ansible/roles/wazuh-ansible/roles/elastic-stack/ansible-elasticsearch + elasticsearch_network_host: 172.16.0.161 + elasticsearch_bootstrap_node: true + elasticsearch_cluster_nodes: + - 172.16.0.161 + node_generate_certs: true + node_name: node-1 + + vars: + instances: + node_1: + name: node-1 + ip: 172.16.0.161 + node_2: + name: node-2 + ip: 172.16.0.162 + node_3: + name: node-3 + ip: 172.16.0.163 + +- hosts: 172.16.0.162 roles: - - {role: /etc/ansible/roles/wazuh-ansible/roles/elastic-stack/ansible-elasticsearch, elasticsearch_network_host: 'localhost'} - - {role: /etc/ansible/roles/wazuh-ansible/roles/elastic-stack/ansible-kibana, elasticsearch_network_host: 'localhost'} + - role: /etc/ansible/roles/wazuh-ansible/roles/elastic-stack/ansible-elasticsearch + elasticsearch_network_host: 172.16.0.162 + elasticsearch_discovery_nodes: + - 172.16.0.161 + - 172.16.0.162 + - 172.16.0.163 + +- hosts: 172.16.0.163 + roles: + - role: /etc/ansible/roles/wazuh-ansible/roles/elastic-stack/ansible-elasticsearch + elasticsearch_network_host: 172.16.0.163 + elasticsearch_discovery_nodes: + - 172.16.0.161 + - 172.16.0.162 + - 172.16.0.163 + From ed9b411b63f4277495dc42cfb1927cfc0bdfba79 Mon Sep 17 00:00:00 2001 From: Jose M Date: Fri, 28 Jun 2019 10:10:22 +0200 Subject: [PATCH 10/53] Add 'node_generate_certs' condition to shell block --- roles/elastic-stack/ansible-elasticsearch/tasks/main.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml index f9cb07c4..90201893 100644 --- a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml @@ -121,7 +121,7 @@ - elasticsearch_xpack_security - name: Write the instances.yml file in the selected node - instances_file: + template: src: instances.yml.j2 dest: "/usr/share/elasticsearch/instances.yml" tags: @@ -133,6 +133,7 @@ - name: Generating certificates for Elasticsearch security shell: "/usr/share/elasticsearch/bin/elasticsearch-certutil cert ca --pem --in /usr/share/elasticsearch/instances.yml --out /usr/share/elasticsearch/certs.zip" when: + - node_generate_certs - instances_file_exists - elasticsearch_xpack_security tags: xpack-security From 42fb6bf937e78b937f648d439195f1cd0acbf57c Mon Sep 17 00:00:00 2001 From: Jose M Date: Fri, 28 Jun 2019 10:11:16 +0200 Subject: [PATCH 11/53] Get node master value for template. Rename cluster to discovery block. --- .../ansible-elasticsearch/templates/elasticsearch.yml.j2 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 b/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 index 02b1872d..cf2b0121 100644 --- a/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 +++ b/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 @@ -15,10 +15,10 @@ cluster.initial_master_nodes: {% for item in elasticsearch_cluster_nodes %} - {{ item }} {% endfor %} -{% elif elasticsearch_master_candidate %} -node.master: true +{% else %} +node.master: {{ elasticsearch_master_candidate }} discovery.seed_hosts: -{% for item in elasticsearch_cluster_nodes %} +{% for item in elasticsearch_discovery_nodes %} - {{ item }} {% endfor %} {% endif %} From 4473c01032155ad9b1c2cf6e4207577287ec80ea Mon Sep 17 00:00:00 2001 From: Jose M Date: Fri, 28 Jun 2019 10:11:36 +0200 Subject: [PATCH 12/53] Changed format of instances template. Name is required --- .../ansible-elasticsearch/templates/instances.yml.j2 | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/templates/instances.yml.j2 b/roles/elastic-stack/ansible-elasticsearch/templates/instances.yml.j2 index ce4c287b..365da8c4 100644 --- a/roles/elastic-stack/ansible-elasticsearch/templates/instances.yml.j2 +++ b/roles/elastic-stack/ansible-elasticsearch/templates/instances.yml.j2 @@ -4,8 +4,11 @@ {% if node_generate_certs %} instances: -{% for item in elasticsearch_cluster_nodes %} - ip: {{ item.ip }} - - "{{ item.name }}" + +{% for node in instances %} +- name: "{{node.value.name}}" + ip: + - "{{ node.value.ip }}" {% endfor %} + {% endif %} \ No newline at end of file From 2f8b3a3a4df4b8cfae3fdd1e2f7e2ac3535534c0 Mon Sep 17 00:00:00 2001 From: Jose M Date: Fri, 28 Jun 2019 10:40:15 +0200 Subject: [PATCH 13/53] Modify nodes list format. --- playbooks/wazuh-elastic_stack-distributed.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/playbooks/wazuh-elastic_stack-distributed.yml b/playbooks/wazuh-elastic_stack-distributed.yml index 5348c876..b94840b9 100644 --- a/playbooks/wazuh-elastic_stack-distributed.yml +++ b/playbooks/wazuh-elastic_stack-distributed.yml @@ -9,17 +9,17 @@ - 172.16.0.161 node_generate_certs: true node_name: node-1 + elasticsearch_xpack_security: true vars: instances: - node_1: - name: node-1 + - name: node1 ip: 172.16.0.161 - node_2: - name: node-2 + + - name: node2 ip: 172.16.0.162 - node_3: - name: node-3 + + - name: node3 ip: 172.16.0.163 - hosts: 172.16.0.162 From 071e354fbdc6bd433dd8f724f1515eb389ae9cd2 Mon Sep 17 00:00:00 2001 From: Jose M Date: Fri, 28 Jun 2019 10:40:30 +0200 Subject: [PATCH 14/53] Adapted template to render nodes. --- .../ansible-elasticsearch/templates/instances.yml.j2 | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/templates/instances.yml.j2 b/roles/elastic-stack/ansible-elasticsearch/templates/instances.yml.j2 index 365da8c4..85cb2b14 100644 --- a/roles/elastic-stack/ansible-elasticsearch/templates/instances.yml.j2 +++ b/roles/elastic-stack/ansible-elasticsearch/templates/instances.yml.j2 @@ -4,11 +4,10 @@ {% if node_generate_certs %} instances: - {% for node in instances %} -- name: "{{node.value.name}}" - ip: - - "{{ node.value.ip }}" +- name: "{{ node.name }}" + ip: + - "{{ node.ip }}" {% endfor %} {% endif %} \ No newline at end of file From e76dc5dcab606a256cccad39ac08e0b89d463ef7 Mon Sep 17 00:00:00 2001 From: Jose M Date: Fri, 28 Jun 2019 12:50:19 +0200 Subject: [PATCH 15/53] Update main.yml to add rsync --- .../ansible-elasticsearch/tasks/main.yml | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml index 90201893..b67687c9 100644 --- a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml @@ -126,6 +126,7 @@ dest: "/usr/share/elasticsearch/instances.yml" tags: - config + - xpack-security when: - node_generate_certs - elasticsearch_xpack_security @@ -138,6 +139,27 @@ - elasticsearch_xpack_security tags: xpack-security +# - name: Importing certificates generated previously +# synchronize: +# mode: push +# src: /usr/share/elasticsearch/certs.zip +# dest: /usr/share/elasticsearch/certs.zip +# rsync_opts: +# - "--rsync-path='sudo rsync'" +# - "-v" +# delegate_to: "{{groups['elk'][0]}}" +# when: +# - not node_generate_certs +# - elasticsearch_xpack_security +# tags: xpack-security + +- name: Importing certificate generated previously + shell: "/usr/bin/rsync -avg -e 'ssh -o StrictHostKeyChecking=no' --rsync-path='sudo rsync' vagrant@172.16.0.161:/usr/share/elasticsearch/{{elasticsearch_node_name}}/ /home/es_certificates/" + when: + - not node_generate_certs + - elasticsearch_xpack_security + tags: xpack-security + - import_tasks: "RMRedHat.yml" when: ansible_os_family == "RedHat" From 7580b547c9c67d3fc66412dc92e640a3ef2d1f76 Mon Sep 17 00:00:00 2001 From: Jose M Date: Fri, 28 Jun 2019 12:50:44 +0200 Subject: [PATCH 16/53] Update playbook --- playbooks/wazuh-elastic_stack-distributed.yml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/playbooks/wazuh-elastic_stack-distributed.yml b/playbooks/wazuh-elastic_stack-distributed.yml index b94840b9..c0695c9b 100644 --- a/playbooks/wazuh-elastic_stack-distributed.yml +++ b/playbooks/wazuh-elastic_stack-distributed.yml @@ -13,19 +13,21 @@ vars: instances: - - name: node1 - ip: 172.16.0.161 + - name: node-1 # Important: must be equal to node name. + ip: 172.16.0.161 # When unzipping, node will search for his node name folder to get the cert. - - name: node2 + - name: node-2 ip: 172.16.0.162 - - name: node3 + - name: node-3 ip: 172.16.0.163 - hosts: 172.16.0.162 roles: - role: /etc/ansible/roles/wazuh-ansible/roles/elastic-stack/ansible-elasticsearch elasticsearch_network_host: 172.16.0.162 + elasticsearch_xpack_security: true + elasticsearch_node_name: node-2 elasticsearch_discovery_nodes: - 172.16.0.161 - 172.16.0.162 @@ -35,8 +37,9 @@ roles: - role: /etc/ansible/roles/wazuh-ansible/roles/elastic-stack/ansible-elasticsearch elasticsearch_network_host: 172.16.0.163 + elasticsearch_xpack_security: true + elasticsearch_node_name: node-3 elasticsearch_discovery_nodes: - 172.16.0.161 - 172.16.0.162 - - 172.16.0.163 - + - 172.16.0.163 \ No newline at end of file From d3170139a0df4d8fa8cbcdee1446fab197a0bb48 Mon Sep 17 00:00:00 2001 From: Jose M Date: Fri, 28 Jun 2019 12:51:01 +0200 Subject: [PATCH 17/53] Add xpack parameters to elasticsearch.yml --- .../ansible-elasticsearch/templates/elasticsearch.yml.j2 | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 b/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 index cf2b0121..e8cefff1 100644 --- a/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 +++ b/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 @@ -16,7 +16,7 @@ cluster.initial_master_nodes: - {{ item }} {% endfor %} {% else %} -node.master: {{ elasticsearch_master_candidate }} +node.master: "{{ elasticsearch_master_candidate }}" discovery.seed_hosts: {% for item in elasticsearch_discovery_nodes %} - {{ item }} @@ -26,5 +26,10 @@ discovery.seed_hosts: # XPACK Security {% if elasticsearch_xpack_security %} -xpack.security.enabled: true +#xpack.security.enabled: false +#xpack.security.transport.ssl.enabled: true +#xpack.security.transport.ssl.verification_mode: certificate +#xpack.security.transport.ssl.key: /home/es_certificates/{{ elasticsearch_node_name }}.key +#xpack.security.transport.ssl.certificate: /home/es_certificates/{{ elasticsearch_node_name }}.crt +#xpack.security.transport.ssl.certificate_authorities: [ "/home/es/config/ca.crt" ] {% endif %} \ No newline at end of file From 19622360b16b48fdfab0d1f8c810371fe6922661 Mon Sep 17 00:00:00 2001 From: mohamed-aziz Date: Fri, 28 Jun 2019 12:51:02 +0100 Subject: [PATCH 18/53] Fix elasticsearch config bug requiring lowercase boolean value --- .../ansible-elasticsearch/templates/elasticsearch.yml.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 b/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 index e8cefff1..6ca12c6f 100644 --- a/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 +++ b/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 @@ -16,7 +16,7 @@ cluster.initial_master_nodes: - {{ item }} {% endfor %} {% else %} -node.master: "{{ elasticsearch_master_candidate }}" +node.master: "{{ elasticsearch_master_candidate|lower }}" discovery.seed_hosts: {% for item in elasticsearch_discovery_nodes %} - {{ item }} From 7fe831d6eeccd74abfe821b98ee5de4aa39d918e Mon Sep 17 00:00:00 2001 From: Jose M Date: Fri, 28 Jun 2019 14:56:43 +0200 Subject: [PATCH 19/53] Remove quotes from node master option. --- .../ansible-elasticsearch/templates/elasticsearch.yml.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 b/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 index 6ca12c6f..e4bd4b16 100644 --- a/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 +++ b/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 @@ -16,7 +16,7 @@ cluster.initial_master_nodes: - {{ item }} {% endfor %} {% else %} -node.master: "{{ elasticsearch_master_candidate|lower }}" +node.master: {{ elasticsearch_master_candidate|lower }} discovery.seed_hosts: {% for item in elasticsearch_discovery_nodes %} - {{ item }} From 868cf75ca754e28d73bf56fec626a0f7632f3d1e Mon Sep 17 00:00:00 2001 From: manuasir Date: Fri, 28 Jun 2019 15:20:06 +0200 Subject: [PATCH 20/53] Develop mode playbook --- playbooks/wazuh-elastic_stack-distributed.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/playbooks/wazuh-elastic_stack-distributed.yml b/playbooks/wazuh-elastic_stack-distributed.yml index c0695c9b..494d55a9 100644 --- a/playbooks/wazuh-elastic_stack-distributed.yml +++ b/playbooks/wazuh-elastic_stack-distributed.yml @@ -2,7 +2,7 @@ - hosts: 172.16.0.161 roles: - - role: /etc/ansible/roles/wazuh-ansible/roles/elastic-stack/ansible-elasticsearch + - role: ../roles/elastic-stack/ansible-elasticsearch elasticsearch_network_host: 172.16.0.161 elasticsearch_bootstrap_node: true elasticsearch_cluster_nodes: @@ -10,7 +10,6 @@ node_generate_certs: true node_name: node-1 elasticsearch_xpack_security: true - vars: instances: - name: node-1 # Important: must be equal to node name. @@ -24,7 +23,7 @@ - hosts: 172.16.0.162 roles: - - role: /etc/ansible/roles/wazuh-ansible/roles/elastic-stack/ansible-elasticsearch + - role: ../roles/elastic-stack/ansible-elasticsearch elasticsearch_network_host: 172.16.0.162 elasticsearch_xpack_security: true elasticsearch_node_name: node-2 @@ -35,7 +34,7 @@ - hosts: 172.16.0.163 roles: - - role: /etc/ansible/roles/wazuh-ansible/roles/elastic-stack/ansible-elasticsearch + - role: ../roles/elastic-stack/ansible-elasticsearch elasticsearch_network_host: 172.16.0.163 elasticsearch_xpack_security: true elasticsearch_node_name: node-3 From 02e4bd951bcbfff012a1618d9858d087046670df Mon Sep 17 00:00:00 2001 From: manuasir Date: Fri, 28 Jun 2019 15:20:14 +0200 Subject: [PATCH 21/53] Check if the certificates exist or not --- .../ansible-elasticsearch/tasks/main.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml index b67687c9..3d540fac 100644 --- a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml @@ -131,12 +131,21 @@ - node_generate_certs - elasticsearch_xpack_security +- name: Check that the certificates ZIP file exists + stat: + path: /usr/share/elasticsearch/certs.zip + register: xpack_certs_zip + when: + - node_generate_certs + - elasticsearch_xpack_security + - name: Generating certificates for Elasticsearch security shell: "/usr/share/elasticsearch/bin/elasticsearch-certutil cert ca --pem --in /usr/share/elasticsearch/instances.yml --out /usr/share/elasticsearch/certs.zip" when: - node_generate_certs - instances_file_exists - elasticsearch_xpack_security + - not xpack_certs_zip tags: xpack-security # - name: Importing certificates generated previously @@ -153,13 +162,6 @@ # - elasticsearch_xpack_security # tags: xpack-security -- name: Importing certificate generated previously - shell: "/usr/bin/rsync -avg -e 'ssh -o StrictHostKeyChecking=no' --rsync-path='sudo rsync' vagrant@172.16.0.161:/usr/share/elasticsearch/{{elasticsearch_node_name}}/ /home/es_certificates/" - when: - - not node_generate_certs - - elasticsearch_xpack_security - tags: xpack-security - - import_tasks: "RMRedHat.yml" when: ansible_os_family == "RedHat" From 3a5f06e0adb31e275306c733250b999f2f5ef460 Mon Sep 17 00:00:00 2001 From: Jose M Date: Fri, 28 Jun 2019 18:13:49 +0200 Subject: [PATCH 22/53] Rename node_generate_certs to node_certs_generator --- playbooks/wazuh-elastic_stack-distributed.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/playbooks/wazuh-elastic_stack-distributed.yml b/playbooks/wazuh-elastic_stack-distributed.yml index 494d55a9..4057096e 100644 --- a/playbooks/wazuh-elastic_stack-distributed.yml +++ b/playbooks/wazuh-elastic_stack-distributed.yml @@ -7,7 +7,7 @@ elasticsearch_bootstrap_node: true elasticsearch_cluster_nodes: - 172.16.0.161 - node_generate_certs: true + node_certs_generator: true node_name: node-1 elasticsearch_xpack_security: true vars: From 1d718f55d32cbd9956067c22245e14ec3ee03f64 Mon Sep 17 00:00:00 2001 From: Jose M Date: Fri, 28 Jun 2019 18:14:01 +0200 Subject: [PATCH 23/53] Add default variables for Xpack and Rsync --- .../ansible-elasticsearch/defaults/main.yml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml b/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml index 95dd2737..9578895a 100644 --- a/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml @@ -12,5 +12,20 @@ elasticsearch_cluster_nodes: - 127.0.0.1 elasticsearch_discovery_nodes: - 127.0.0.1 + +# X-Pack Security elasticsearch_xpack_security: false -node_generate_certs: false \ No newline at end of file +node_certs_generator: false +node_certs_generator_ip: 172.16.0.161 +node_certs_source: /usr/share/elasticsearch +node_certs_destination: /etc/elasticsearch/certs + +# Rsync +rsync_path: /usr/bin/rsync +rsync_user: vagrant +rsync_extra_parameters: -avg -e 'ssh -o StrictHostKeyChecking=no' --rsync-path='sudo rsync' + + + + + From 40b6979a29533af53c630f4d0ec4782b8dad7744 Mon Sep 17 00:00:00 2001 From: Jose M Date: Fri, 28 Jun 2019 18:14:36 +0200 Subject: [PATCH 24/53] Reorganized main.yml. Acded task to copy certs locally. --- .../ansible-elasticsearch/tasks/main.yml | 121 ++++++++++-------- 1 file changed, 68 insertions(+), 53 deletions(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml index 3d540fac..c0abc731 100644 --- a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml @@ -69,6 +69,70 @@ tags: configure # fix in new PR (ignore_errors) + +- name: Check that the instances.yml file exists + stat: + path: "{{node_certs_source}}/instances.yml" + register: instances_file_exists + when: + - node_certs_generator + - elasticsearch_xpack_security + +- name: Write the instances.yml file in the selected node + template: + src: instances.yml.j2 + dest: "{{node_certs_source}}/instances.yml" + tags: + - config + - xpack-security + when: + - node_certs_generator + - elasticsearch_xpack_security + +- name: Check that the certificates ZIP file exists + stat: + path: "{{node_certs_source}}/certs.zip" + register: xpack_certs_zip + when: + - node_certs_generator + - elasticsearch_xpack_security + +- name: Generating certificates for Elasticsearch security + shell: "/usr/share/elasticsearch/bin/elasticsearch-certutil cert ca --pem --in {{node_certs_source}}/instances.yml --out {{node_certs_source}}/certs.zip" + when: + - node_certs_generator + - instances_file_exists.stat.exists + - elasticsearch_xpack_security + - not xpack_certs_zip.stat.exists + tags: xpack-security + +- name: Unzip generated certs.zip + unarchive: + src: "{{node_certs_source}}/certs.zip" + dest: "{{node_certs_source}}" + remote_src: yes + when: + - node_certs_generator + - elasticsearch_xpack_security + tags: xpack-security + +- name: Copy local certificate for generator node + synchronize: + src: "{{node_certs_source}}/{{elasticsearch_node_name}}/" + dest: "{{node_certs_destination}}/" + delegate_to: "{{ node_certs_generator_ip }}" + when: + - node_certs_generator + - elasticsearch_xpack_security + tags: xpack-security + +- name: Importing certificate generated previously + shell: "{{rsync_path}} {{rsync_extra_parameters}} {{rsync_user}}@{{node_certs_generator_ip}}:{{node_certs_source}}/{{elasticsearch_node_name}}/ {{node_certs_destination}}/" + when: + - not node_certs_generator + - elasticsearch_xpack_security + tags: xpack-security + - name: Reload systemd systemd: daemon_reload=true ignore_errors: true @@ -112,58 +176,9 @@ - wazuh_alerts_template_exits.status != 200 tags: init -- name: Check that the instances.yml file exists - stat: - path: /usr/share/elasticsearch/instances.yml - register: instances_file_exists - when: - - node_generate_certs - - elasticsearch_xpack_security +# - import_tasks: "RMRedHat.yml" +# when: ansible_os_family == "RedHat" -- name: Write the instances.yml file in the selected node - template: - src: instances.yml.j2 - dest: "/usr/share/elasticsearch/instances.yml" - tags: - - config - - xpack-security - when: - - node_generate_certs - - elasticsearch_xpack_security -- name: Check that the certificates ZIP file exists - stat: - path: /usr/share/elasticsearch/certs.zip - register: xpack_certs_zip - when: - - node_generate_certs - - elasticsearch_xpack_security - -- name: Generating certificates for Elasticsearch security - shell: "/usr/share/elasticsearch/bin/elasticsearch-certutil cert ca --pem --in /usr/share/elasticsearch/instances.yml --out /usr/share/elasticsearch/certs.zip" - when: - - node_generate_certs - - instances_file_exists - - elasticsearch_xpack_security - - not xpack_certs_zip - tags: xpack-security - -# - name: Importing certificates generated previously -# synchronize: -# mode: push -# src: /usr/share/elasticsearch/certs.zip -# dest: /usr/share/elasticsearch/certs.zip -# rsync_opts: -# - "--rsync-path='sudo rsync'" -# - "-v" -# delegate_to: "{{groups['elk'][0]}}" -# when: -# - not node_generate_certs -# - elasticsearch_xpack_security -# tags: xpack-security - -- import_tasks: "RMRedHat.yml" - when: ansible_os_family == "RedHat" - -- import_tasks: "RMDebian.yml" - when: ansible_os_family == "Debian" +# - import_tasks: "RMDebian.yml" +# when: ansible_os_family == "Debian" From c27c3c16abaa29c8d4683acc2b1202c912c4f56e Mon Sep 17 00:00:00 2001 From: Jose M Date: Fri, 28 Jun 2019 18:14:48 +0200 Subject: [PATCH 25/53] Enabled xpack security fields --- .../templates/elasticsearch.yml.j2 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 b/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 index e4bd4b16..8f60c368 100644 --- a/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 +++ b/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 @@ -26,10 +26,10 @@ discovery.seed_hosts: # XPACK Security {% if elasticsearch_xpack_security %} -#xpack.security.enabled: false -#xpack.security.transport.ssl.enabled: true -#xpack.security.transport.ssl.verification_mode: certificate -#xpack.security.transport.ssl.key: /home/es_certificates/{{ elasticsearch_node_name }}.key -#xpack.security.transport.ssl.certificate: /home/es_certificates/{{ elasticsearch_node_name }}.crt -#xpack.security.transport.ssl.certificate_authorities: [ "/home/es/config/ca.crt" ] +xpack.security.enabled: false +xpack.security.transport.ssl.enabled: true +xpack.security.transport.ssl.verification_mode: certificate +xpack.security.transport.ssl.key: {{node_certs_destination}}/{{ elasticsearch_node_name }}.key +xpack.security.transport.ssl.certificate: {{node_certs_destination}}/{{ elasticsearch_node_name }}.crt +#xpack.security.transport.ssl.certificate_authorities: [ "{{node_certs_destination}}/ca.crt" ] {% endif %} \ No newline at end of file From a1e6dec7b4a445d90c7365bb78f644247aad57a9 Mon Sep 17 00:00:00 2001 From: Jose M Date: Fri, 28 Jun 2019 18:15:00 +0200 Subject: [PATCH 26/53] Rename node_generate_certs in instances template. --- .../ansible-elasticsearch/templates/instances.yml.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/templates/instances.yml.j2 b/roles/elastic-stack/ansible-elasticsearch/templates/instances.yml.j2 index 85cb2b14..6279c380 100644 --- a/roles/elastic-stack/ansible-elasticsearch/templates/instances.yml.j2 +++ b/roles/elastic-stack/ansible-elasticsearch/templates/instances.yml.j2 @@ -2,7 +2,7 @@ # {{ ansible_managed }} # TO-DO -{% if node_generate_certs %} +{% if node_certs_generator %} instances: {% for node in instances %} - name: "{{ node.name }}" From 2525dbd2af0db4831090e4c62eb161b55891f92b Mon Sep 17 00:00:00 2001 From: Jose M Date: Mon, 1 Jul 2019 11:52:25 +0200 Subject: [PATCH 27/53] Copy .key and .crt in generator node (locally) --- .../ansible-elasticsearch/tasks/main.yml | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml index c0abc731..82572055 100644 --- a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml @@ -109,14 +109,14 @@ - name: Unzip generated certs.zip unarchive: src: "{{node_certs_source}}/certs.zip" - dest: "{{node_certs_source}}" + dest: "{{node_certs_source}}/" remote_src: yes when: - node_certs_generator - elasticsearch_xpack_security tags: xpack-security -- name: Copy local certificate for generator node +- name: Copy .key & .crt files in generator node synchronize: src: "{{node_certs_source}}/{{elasticsearch_node_name}}/" dest: "{{node_certs_destination}}/" @@ -126,7 +126,17 @@ - elasticsearch_xpack_security tags: xpack-security -- name: Importing certificate generated previously +- name: Copy ca .crt file in generator node + synchronize: + src: "{{node_certs_source}}/ca/" + dest: "{{node_certs_destination}}/" + delegate_to: "{{ node_certs_generator_ip }}" + when: + - node_certs_generator + - elasticsearch_xpack_security + tags: xpack-security + +- name: Importing node .key & .crt files shell: "{{rsync_path}} {{rsync_extra_parameters}} {{rsync_user}}@{{node_certs_generator_ip}}:{{node_certs_source}}/{{elasticsearch_node_name}}/ {{node_certs_destination}}/" when: - not node_certs_generator @@ -176,9 +186,9 @@ - wazuh_alerts_template_exits.status != 200 tags: init -# - import_tasks: "RMRedHat.yml" -# when: ansible_os_family == "RedHat" +- import_tasks: "RMRedHat.yml" + when: ansible_os_family == "RedHat" -# - import_tasks: "RMDebian.yml" -# when: ansible_os_family == "Debian" +- import_tasks: "RMDebian.yml" + when: ansible_os_family == "Debian" From 5d8286f0deb525baa29673db1c0a7e9c95578bb3 Mon Sep 17 00:00:00 2001 From: Jose M Date: Mon, 1 Jul 2019 11:53:19 +0200 Subject: [PATCH 28/53] Import ca certificate in remote nodes. --- roles/elastic-stack/ansible-elasticsearch/tasks/main.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml index 82572055..d9925969 100644 --- a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml @@ -143,6 +143,14 @@ - elasticsearch_xpack_security tags: xpack-security +- name: Importing node ca .crt file + shell: "{{rsync_path}} {{rsync_extra_parameters}} {{rsync_user}}@{{node_certs_generator_ip}}:{{node_certs_source}}/ca/ {{node_certs_destination}}/" + when: + - not node_certs_generator + - elasticsearch_xpack_security + tags: xpack-security + + - name: Reload systemd systemd: daemon_reload=true ignore_errors: true From 54885a9e0d122bf4bc573540f83c656b77145a1c Mon Sep 17 00:00:00 2001 From: Jose M Date: Mon, 1 Jul 2019 11:57:15 +0200 Subject: [PATCH 29/53] Remove deprecated import of wazuh template. --- .../ansible-elasticsearch/tasks/main.yml | 22 ------------------- 1 file changed, 22 deletions(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml index d9925969..52e7babc 100644 --- a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml @@ -172,28 +172,6 @@ - configure - init -- name: Check for Wazuh Alerts template - uri: - url: "http://{{elasticsearch_network_host}}:{{elasticsearch_http_port}}/_template/wazuh" - method: GET - status_code: 200, 404 - when: not elasticsearch_bootstrap_node or single_node - poll: 30 - register: wazuh_alerts_template_exits - tags: init - -- name: Installing Wazuh Alerts template - uri: - url: "http://{{elasticsearch_network_host}}:{{elasticsearch_http_port}}/_template/wazuh" - method: PUT - status_code: 200 - body_format: json - body: "{{ lookup('template','wazuh-elastic7-template-alerts.json.j2') }}" - when: - - wazuh_alerts_template_exits.status is defined - - wazuh_alerts_template_exits.status != 200 - tags: init - - import_tasks: "RMRedHat.yml" when: ansible_os_family == "RedHat" From bd32839f27db43749bc3473a552db3b5828137fa Mon Sep 17 00:00:00 2001 From: Jose M Date: Mon, 1 Jul 2019 12:00:48 +0200 Subject: [PATCH 30/53] Add Xpack http security to elasticsearch template. --- .../templates/elasticsearch.yml.j2 | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 b/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 index 8f60c368..2d62f025 100644 --- a/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 +++ b/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 @@ -26,10 +26,16 @@ discovery.seed_hosts: # XPACK Security {% if elasticsearch_xpack_security %} -xpack.security.enabled: false +xpack.security.enabled: true xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.key: {{node_certs_destination}}/{{ elasticsearch_node_name }}.key xpack.security.transport.ssl.certificate: {{node_certs_destination}}/{{ elasticsearch_node_name }}.crt -#xpack.security.transport.ssl.certificate_authorities: [ "{{node_certs_destination}}/ca.crt" ] +xpack.security.transport.ssl.certificate_authorities: [ "{{ node_certs_destination }}/ca.crt" ] + +xpack.security.http.ssl.enabled: true +xpack.security.http.ssl.verification_mode: certificate +xpack.security.http.ssl.key: {{node_certs_destination}}/{{ elasticsearch_node_name }}.key +xpack.security.http.ssl.certificate: {{node_certs_destination}}/{{ elasticsearch_node_name }}.crt +xpack.security.http.ssl.certificate_authorities: [ "/etc/elasticsearch/certs/ca.crt" ] {% endif %} \ No newline at end of file From db6f69cfb8dfe990500f62de987b501413594b5c Mon Sep 17 00:00:00 2001 From: Jose M Date: Mon, 1 Jul 2019 12:31:03 +0200 Subject: [PATCH 31/53] Rename importing blocks --- roles/elastic-stack/ansible-elasticsearch/tasks/main.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml index 52e7babc..385b860c 100644 --- a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml @@ -116,7 +116,7 @@ - elasticsearch_xpack_security tags: xpack-security -- name: Copy .key & .crt files in generator node +- name: Copy key & certificate files in generator node (locally) synchronize: src: "{{node_certs_source}}/{{elasticsearch_node_name}}/" dest: "{{node_certs_destination}}/" @@ -126,7 +126,7 @@ - elasticsearch_xpack_security tags: xpack-security -- name: Copy ca .crt file in generator node +- name: Copy ca certificate file in generator node (locally) synchronize: src: "{{node_certs_source}}/ca/" dest: "{{node_certs_destination}}/" @@ -136,14 +136,14 @@ - elasticsearch_xpack_security tags: xpack-security -- name: Importing node .key & .crt files +- name: Importing key & certificate files from generator node shell: "{{rsync_path}} {{rsync_extra_parameters}} {{rsync_user}}@{{node_certs_generator_ip}}:{{node_certs_source}}/{{elasticsearch_node_name}}/ {{node_certs_destination}}/" when: - not node_certs_generator - elasticsearch_xpack_security tags: xpack-security -- name: Importing node ca .crt file +- name: Importing ca certificate file from generator node shell: "{{rsync_path}} {{rsync_extra_parameters}} {{rsync_user}}@{{node_certs_generator_ip}}:{{node_certs_source}}/ca/ {{node_certs_destination}}/" when: - not node_certs_generator From f6efcc017117290bc28974482acc2d332538085f Mon Sep 17 00:00:00 2001 From: Jose M Date: Mon, 1 Jul 2019 15:48:46 +0200 Subject: [PATCH 32/53] Make comment about nodes name clearer --- playbooks/wazuh-elastic_stack-distributed.yml | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/playbooks/wazuh-elastic_stack-distributed.yml b/playbooks/wazuh-elastic_stack-distributed.yml index 4057096e..9c0d667a 100644 --- a/playbooks/wazuh-elastic_stack-distributed.yml +++ b/playbooks/wazuh-elastic_stack-distributed.yml @@ -2,17 +2,18 @@ - hosts: 172.16.0.161 roles: - - role: ../roles/elastic-stack/ansible-elasticsearch - elasticsearch_network_host: 172.16.0.161 - elasticsearch_bootstrap_node: true - elasticsearch_cluster_nodes: - - 172.16.0.161 - node_certs_generator: true - node_name: node-1 - elasticsearch_xpack_security: true + - ../roles/elastic-stack/ansible-elasticsearch + elasticsearch_network_host: 172.16.0.161 + elasticsearch_bootstrap_node: true + elasticsearch_cluster_nodes: + - 172.16.0.161 + node_certs_generator: true + node_name: node-1 + elasticsearch_xpack_security: true + vars: instances: - - name: node-1 # Important: must be equal to node name. + - name: node-1 # Important: must be equal to elasticsearch_node_name. ip: 172.16.0.161 # When unzipping, node will search for his node name folder to get the cert. - name: node-2 From d78393115fd84c6f5893a13f294e89f3661dd027 Mon Sep 17 00:00:00 2001 From: Jose M Date: Mon, 1 Jul 2019 15:49:38 +0200 Subject: [PATCH 33/53] Add default ' elasticsearch_xpack_security_password' variable --- roles/elastic-stack/ansible-elasticsearch/defaults/main.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml b/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml index 9578895a..36b8aefb 100644 --- a/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml @@ -15,6 +15,8 @@ elasticsearch_discovery_nodes: # X-Pack Security elasticsearch_xpack_security: false +elasticsearch_xpack_security_password: elastic_pass + node_certs_generator: false node_certs_generator_ip: 172.16.0.161 node_certs_source: /usr/share/elasticsearch From fdb1113a193c34a1537175e6ed92924f7a9385d6 Mon Sep 17 00:00:00 2001 From: Jose M Date: Mon, 1 Jul 2019 15:50:06 +0200 Subject: [PATCH 34/53] Add task to configure ES bootstrap password. --- roles/elastic-stack/ansible-elasticsearch/tasks/main.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml index 385b860c..5689394c 100644 --- a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml @@ -150,6 +150,11 @@ - elasticsearch_xpack_security tags: xpack-security +- name: Set elasticsearch bootstrap password + shell: "echo '{{elasticsearch_xpack_security_password}}' | {{node_certs_source}}/bin/elasticsearch-keystore add -xf 'bootstrap.password'" + when: + - node_certs_generator + - elasticsearch_xpack_security - name: Reload systemd systemd: daemon_reload=true From 6cffed9218b78721edcb0e95bce1944b0227e09e Mon Sep 17 00:00:00 2001 From: Jose M Date: Mon, 1 Jul 2019 15:50:48 +0200 Subject: [PATCH 35/53] Add required default attributes XPack in Filebeat. --- roles/wazuh/ansible-filebeat/defaults/main.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/roles/wazuh/ansible-filebeat/defaults/main.yml b/roles/wazuh/ansible-filebeat/defaults/main.yml index a00cbbb4..b01dfad7 100644 --- a/roles/wazuh/ansible-filebeat/defaults/main.yml +++ b/roles/wazuh/ansible-filebeat/defaults/main.yml @@ -10,6 +10,8 @@ filebeat_prospectors: json.keys_under_root: true json.overwrite_keys: true +filebeat_node_name: node-1 + filebeat_output_elasticsearch_enabled: false filebeat_output_elasticsearch_hosts: - "localhost:9200" @@ -23,3 +25,10 @@ filebeat_ssl_dir: /etc/pki/filebeat filebeat_ssl_certificate_file: "" filebeat_ssl_key_file: "" filebeat_ssl_insecure: "false" + +# Xpack Security +filebeat_xpack_security: false + +elasticsearch_user: elastic +elasticsearch_password: elastic_pass +node_certs_destination: /etc/elasticsearch/certs From 3ff5a194df017f6153b3fa3c1f47f863f16a5432 Mon Sep 17 00:00:00 2001 From: Jose M Date: Mon, 1 Jul 2019 15:51:23 +0200 Subject: [PATCH 36/53] Update Filebeat for XPack Security --- roles/wazuh/ansible-filebeat/templates/filebeat.yml.j2 | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/roles/wazuh/ansible-filebeat/templates/filebeat.yml.j2 b/roles/wazuh/ansible-filebeat/templates/filebeat.yml.j2 index 8e6287ec..202af578 100644 --- a/roles/wazuh/ansible-filebeat/templates/filebeat.yml.j2 +++ b/roles/wazuh/ansible-filebeat/templates/filebeat.yml.j2 @@ -53,6 +53,15 @@ output.elasticsearch: #pipeline: geoip indices: - index: 'wazuh-alerts-3.x-%{+yyyy.MM.dd}' +{% if filebeat_xpack_security %} + username: {{ elasticsearch_user }} + password: {{ elasticsearch_password }} + protocol: https + ssl.certificate_authorities: + - {{node_certs_destination}}/ca.crt + ssl.certificate: "{{node_certs_destination}}/{{ filebeat_node_name }}.crt" + ssl.key: "{{node_certs_destination}}/{{ filebeat_node_name }}.key" +{% endif %} # Optional. Send events to Logstash instead of Elasticsearch #output.logstash.hosts: ["YOUR_LOGSTASH_SERVER_IP:5000"] \ No newline at end of file From ab8cdd13c63500a369f25139fe377b41f41a68a8 Mon Sep 17 00:00:00 2001 From: Jose M Date: Mon, 1 Jul 2019 16:07:10 +0200 Subject: [PATCH 37/53] Added task to remove certs file after propagation. --- roles/elastic-stack/ansible-elasticsearch/tasks/main.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml index 5689394c..dac73d85 100644 --- a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml @@ -136,6 +136,13 @@ - elasticsearch_xpack_security tags: xpack-security +- name: Remove generated certs file + shell: /bin/rm -f {{node_certs_source}}/certs.zip* + when: + - node_certs_generator + - elasticsearch_xpack_security + tags: xpack-security + - name: Importing key & certificate files from generator node shell: "{{rsync_path}} {{rsync_extra_parameters}} {{rsync_user}}@{{node_certs_generator_ip}}:{{node_certs_source}}/{{elasticsearch_node_name}}/ {{node_certs_destination}}/" when: @@ -153,7 +160,6 @@ - name: Set elasticsearch bootstrap password shell: "echo '{{elasticsearch_xpack_security_password}}' | {{node_certs_source}}/bin/elasticsearch-keystore add -xf 'bootstrap.password'" when: - - node_certs_generator - elasticsearch_xpack_security - name: Reload systemd From ddc01dcc238acf138de9839618e5434860e7e8e7 Mon Sep 17 00:00:00 2001 From: Jose M Date: Mon, 1 Jul 2019 18:04:03 +0200 Subject: [PATCH 38/53] Add 'elasticsearch_xpack_security_user' to elasticsearth defaults --- roles/elastic-stack/ansible-elasticsearch/defaults/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml b/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml index 36b8aefb..df1f9ad4 100644 --- a/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/defaults/main.yml @@ -15,6 +15,7 @@ elasticsearch_discovery_nodes: # X-Pack Security elasticsearch_xpack_security: false +elasticsearch_xpack_security_user: elastic elasticsearch_xpack_security_password: elastic_pass node_certs_generator: false From 2656d89933d398e577fa30d3a9675e59eb4aa333 Mon Sep 17 00:00:00 2001 From: Jose M Date: Mon, 1 Jul 2019 18:04:26 +0200 Subject: [PATCH 39/53] Add XPack default variables for Kibana --- roles/elastic-stack/ansible-kibana/defaults/main.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/roles/elastic-stack/ansible-kibana/defaults/main.yml b/roles/elastic-stack/ansible-kibana/defaults/main.yml index 298e6bd7..e0f00141 100644 --- a/roles/elastic-stack/ansible-kibana/defaults/main.yml +++ b/roles/elastic-stack/ansible-kibana/defaults/main.yml @@ -1,7 +1,16 @@ --- +kibana_node_name: node-1 + elasticsearch_http_port: "9200" elasticsearch_network_host: "127.0.0.1" kibana_server_host: "0.0.0.0" kibana_server_port: "5601" elastic_stack_version: 7.1.1 -wazuh_version: 3.9.2 \ No newline at end of file +wazuh_version: 3.9.2 + +# Xpack Security +kibana_xpack_security: false + +kibana_user: kibana +kibana_password: elastic_pass +node_certs_destination: /etc/kibana/certs \ No newline at end of file From 2b18745cd0f32d457aa3ed8d535e40ecfa922bd4 Mon Sep 17 00:00:00 2001 From: Jose M Date: Mon, 1 Jul 2019 18:04:40 +0200 Subject: [PATCH 40/53] Add XPack settings to Kibana template --- .../ansible-kibana/templates/kibana.yml.j2 | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/roles/elastic-stack/ansible-kibana/templates/kibana.yml.j2 b/roles/elastic-stack/ansible-kibana/templates/kibana.yml.j2 index edd1b4b4..bb630933 100644 --- a/roles/elastic-stack/ansible-kibana/templates/kibana.yml.j2 +++ b/roles/elastic-stack/ansible-kibana/templates/kibana.yml.j2 @@ -19,7 +19,11 @@ server.host: {{ kibana_server_host }} #server.name: "your-hostname" # The URL of the Elasticsearch instance to use for all your queries. +{% if kibana_xpack_security %} +elasticsearch.hosts: "https://{{ elasticsearch_network_host }}:{{ elasticsearch_http_port }}" +{% else %} elasticsearch.hosts: "http://{{ elasticsearch_network_host }}:{{ elasticsearch_http_port }}" +{% endif %} # When this setting's value is true Kibana uses the hostname specified in the server.host # setting. When the value of this setting is false, Kibana uses the hostname of the host @@ -98,3 +102,13 @@ elasticsearch.hosts: "http://{{ elasticsearch_network_host }}:{{ elasticsearch_h # Set the interval in milliseconds to sample system and process performance # metrics. Minimum is 100ms. Defaults to 5000. #ops.interval: 5000 + +# Xpack Security +{% if kibana_xpack_security %} +elasticsearch.username: "{{ kibana_user }}" +elasticsearch.password: "{{ kibana_password }}" +server.ssl.enabled: true +server.ssl.key: "{{node_certs_destination}}/{{ kibana_node_name }}.key" +server.ssl.certificate: "{{node_certs_destination}}/{{ kibana_node_name }}.crt" +elasticsearch.ssl.certificateAuthorities: ["{{ node_certs_destination }}/ca.crt"] +{% endif %} \ No newline at end of file From e3cd8731f35d07a0ecfbba82dd2ff3e53fddf0e7 Mon Sep 17 00:00:00 2001 From: Jose M Date: Tue, 2 Jul 2019 10:47:32 +0200 Subject: [PATCH 41/53] Fix instances and certs.zip checks and generation. --- .../ansible-elasticsearch/tasks/main.yml | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml index dac73d85..5a60e6d8 100644 --- a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml @@ -70,7 +70,19 @@ # fix in new PR (ignore_errors) -- name: Check that the instances.yml file exists +- name: Write the instances.yml file in the selected node (force = no) + template: + src: instances.yml.j2 + dest: "{{node_certs_source}}/instances.yml" + force: no + tags: + - config + - xpack-security + when: + - node_certs_generator + - elasticsearch_xpack_security + +- name: Update instances.yml status after generation stat: path: "{{node_certs_source}}/instances.yml" register: instances_file_exists @@ -78,18 +90,7 @@ - node_certs_generator - elasticsearch_xpack_security -- name: Write the instances.yml file in the selected node - template: - src: instances.yml.j2 - dest: "{{node_certs_source}}/instances.yml" - tags: - - config - - xpack-security - when: - - node_certs_generator - - elasticsearch_xpack_security - -- name: Check that the certificates ZIP file exists +- name: Check if the certificates ZIP file exists stat: path: "{{node_certs_source}}/certs.zip" register: xpack_certs_zip From 1ddcf3a60c7a1dfc3f6c6f77f3253bbe21a6ace9 Mon Sep 17 00:00:00 2001 From: Jose M Date: Tue, 2 Jul 2019 19:05:35 +0200 Subject: [PATCH 42/53] Update elastic distributed playbook --- playbooks/wazuh-elastic_stack-distributed.yml | 64 +++++++++++++++---- 1 file changed, 53 insertions(+), 11 deletions(-) diff --git a/playbooks/wazuh-elastic_stack-distributed.yml b/playbooks/wazuh-elastic_stack-distributed.yml index 9c0d667a..c0853a11 100644 --- a/playbooks/wazuh-elastic_stack-distributed.yml +++ b/playbooks/wazuh-elastic_stack-distributed.yml @@ -2,14 +2,20 @@ - hosts: 172.16.0.161 roles: - - ../roles/elastic-stack/ansible-elasticsearch - elasticsearch_network_host: 172.16.0.161 - elasticsearch_bootstrap_node: true - elasticsearch_cluster_nodes: - - 172.16.0.161 - node_certs_generator: true - node_name: node-1 - elasticsearch_xpack_security: true + - role: ../roles/elastic-stack/ansible-elasticsearch + elasticsearch_network_host: 172.16.0.161 + node_name: node-1 + elasticsearch_bootstrap_node: true + elasticsearch_cluster_nodes: + - 172.16.0.161 + - 172.16.0.162 + - 172.16.0.163 + elasticsearch_discovery_nodes: + - 172.16.0.161 + - 172.16.0.162 + - 172.16.0.163 + elasticsearch_xpack_security: true + node_certs_generator: true vars: instances: @@ -26,8 +32,9 @@ roles: - role: ../roles/elastic-stack/ansible-elasticsearch elasticsearch_network_host: 172.16.0.162 - elasticsearch_xpack_security: true elasticsearch_node_name: node-2 + elasticsearch_xpack_security: true + elasticsearch_master_candidate: true elasticsearch_discovery_nodes: - 172.16.0.161 - 172.16.0.162 @@ -37,9 +44,44 @@ roles: - role: ../roles/elastic-stack/ansible-elasticsearch elasticsearch_network_host: 172.16.0.163 - elasticsearch_xpack_security: true elasticsearch_node_name: node-3 + elasticsearch_xpack_security: true + elasticsearch_master_candidate: true elasticsearch_discovery_nodes: - 172.16.0.161 - 172.16.0.162 - - 172.16.0.163 \ No newline at end of file + - 172.16.0.163 + + +# - hosts: 172.16.0.162 +# roles: +# - role: ../roles/wazuh/ansible-wazuh-manager + +# - role: ../roles/wazuh/ansible-filebeat +# filebeat_output_elasticsearch_hosts: 172.16.0.161:9200 +# filebeat_xpack_security: true +# filebeat_node_name: node-2 +# node_certs_generator: false + +# - role: ../roles/elastic-stack/ansible-elasticsearch +# elasticsearch_network_host: 172.16.0.162 +# node_name: node-2 +# elasticsearch_bootstrap_node: false +# elasticsearch_master_candidate: true +# elasticsearch_discovery_nodes: +# - 172.16.0.161 +# - 172.16.0.162 +# elasticsearch_xpack_security: true +# node_certs_generator: false + + +# - hosts: 172.16.0.163 +# roles: +# - role: ../roles/elastic-stack/ansible-kibana +# kibana_xpack_security: true +# kibana_user: elastic +# kibana_password: elastic_pass +# kibana_node_name: node-3 +# elasticsearch_network_host: 172.16.0.161 +# node_certs_generator: false + From 5787b348fe5c57bc77e658a49824af590043a557 Mon Sep 17 00:00:00 2001 From: Jose M Date: Tue, 2 Jul 2019 19:07:37 +0200 Subject: [PATCH 43/53] Upgrade elasticsearch tasks. Fix permissions. --- .../ansible-elasticsearch/tasks/main.yml | 94 +++++++++++++++---- 1 file changed, 76 insertions(+), 18 deletions(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml index 5a60e6d8..8ed1c926 100644 --- a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml @@ -48,16 +48,6 @@ - ansible_service_mgr != "systemd" - ansible_os_family == "RedHat" -- name: Configure Elasticsearch. - template: - src: elasticsearch.yml.j2 - dest: /etc/elasticsearch/elasticsearch.yml - owner: root - group: elasticsearch - mode: 0660 - notify: restart elasticsearch - tags: configure - - name: Configure Elasticsearch JVM memmory. template: src: jvm.options.j2 @@ -70,17 +60,29 @@ # fix in new PR (ignore_errors) +- import_tasks: "RMRedHat.yml" + when: ansible_os_family == "RedHat" + +- name: Check if certificate exists locally + stat: + path: "{{node_certs_destination}}/{{ elasticsearch_node_name }}.crt" + register: certificate_file_exists + when: + - elasticsearch_xpack_security + - name: Write the instances.yml file in the selected node (force = no) template: src: instances.yml.j2 dest: "{{node_certs_source}}/instances.yml" force: no + register: instances_file_exists tags: - config - xpack-security when: - node_certs_generator - elasticsearch_xpack_security + - not certificate_file_exists.stat.exists - name: Update instances.yml status after generation stat: @@ -105,6 +107,8 @@ - instances_file_exists.stat.exists - elasticsearch_xpack_security - not xpack_certs_zip.stat.exists + - not certificate_file_exists.stat.exists + register: certs_file_generated tags: xpack-security - name: Unzip generated certs.zip @@ -115,6 +119,8 @@ when: - node_certs_generator - elasticsearch_xpack_security + - certs_file_generated is defined + - not certificate_file_exists.stat.exists tags: xpack-security - name: Copy key & certificate files in generator node (locally) @@ -132,13 +138,7 @@ src: "{{node_certs_source}}/ca/" dest: "{{node_certs_destination}}/" delegate_to: "{{ node_certs_generator_ip }}" - when: - - node_certs_generator - - elasticsearch_xpack_security - tags: xpack-security - -- name: Remove generated certs file - shell: /bin/rm -f {{node_certs_source}}/certs.zip* + register: check_certs_permissions when: - node_certs_generator - elasticsearch_xpack_security @@ -149,6 +149,7 @@ when: - not node_certs_generator - elasticsearch_xpack_security + - not certificate_file_exists.stat.exists tags: xpack-security - name: Importing ca certificate file from generator node @@ -156,13 +157,45 @@ when: - not node_certs_generator - elasticsearch_xpack_security + - not certificate_file_exists.stat.exists + register: check_certs_permissions tags: xpack-security +- name: Ensuring certificates folder owner + shell: "chown -R elasticsearch: {{node_certs_destination}}/" + when: + - check_certs_permissions is defined + tags: xpack-security + +- name: Ensuring certificates folder owner + shell: "chmod -R 770 {{node_certs_destination}}/" + when: + - check_certs_permissions is defined + tags: xpack-security + + +- name: Remove generated certs file + shell: /bin/rm -f {{node_certs_source}}/certs.zip* + when: + - node_certs_generator + - elasticsearch_xpack_security + tags: xpack-security + +- name: Configure Elasticsearch. + template: + src: elasticsearch.yml.j2 + dest: /etc/elasticsearch/elasticsearch.yml + owner: root + group: elasticsearch + mode: 0660 + notify: restart elasticsearch + tags: configure + - name: Set elasticsearch bootstrap password shell: "echo '{{elasticsearch_xpack_security_password}}' | {{node_certs_source}}/bin/elasticsearch-keystore add -xf 'bootstrap.password'" when: - elasticsearch_xpack_security - + - name: Reload systemd systemd: daemon_reload=true ignore_errors: true @@ -184,6 +217,31 @@ - configure - init +- name: Check for Wazuh Alerts template (http) + uri: + url: "http://{{elasticsearch_network_host}}:{{elasticsearch_http_port}}/_template/wazuh" + method: GET + status_code: 200, 404 + when: + - elasticsearch_bootstrap_node or single_node + - not elasticsearch_xpack_security + poll: 30 + register: wazuh_alerts_template_exits + tags: init + +- name: Installing Wazuh Alerts template (http) + uri: + url: "http://{{elasticsearch_network_host}}:{{elasticsearch_http_port}}/_template/wazuh" + method: PUT + status_code: 200 + body_format: json + body: "{{ lookup('template','wazuh-elastic7-template-alerts.json.j2') }}" + when: + - wazuh_alerts_template_exits.status is defined + - wazuh_alerts_template_exits.status != 200 + - not elasticsearch_xpack_security + tags: init + - import_tasks: "RMRedHat.yml" when: ansible_os_family == "RedHat" From 7998f034b8165fdb79172629588d76cfdcabd08b Mon Sep 17 00:00:00 2001 From: Jose M Date: Tue, 2 Jul 2019 19:08:09 +0200 Subject: [PATCH 44/53] Include discovery seed hosts on boostraper node. --- .../ansible-elasticsearch/templates/elasticsearch.yml.j2 | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 b/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 index 2d62f025..f851e900 100644 --- a/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 +++ b/roles/elastic-stack/ansible-elasticsearch/templates/elasticsearch.yml.j2 @@ -15,6 +15,10 @@ cluster.initial_master_nodes: {% for item in elasticsearch_cluster_nodes %} - {{ item }} {% endfor %} +discovery.seed_hosts: +{% for item in elasticsearch_discovery_nodes %} + - {{ item }} +{% endfor %} {% else %} node.master: {{ elasticsearch_master_candidate|lower }} discovery.seed_hosts: @@ -37,5 +41,5 @@ xpack.security.http.ssl.enabled: true xpack.security.http.ssl.verification_mode: certificate xpack.security.http.ssl.key: {{node_certs_destination}}/{{ elasticsearch_node_name }}.key xpack.security.http.ssl.certificate: {{node_certs_destination}}/{{ elasticsearch_node_name }}.crt -xpack.security.http.ssl.certificate_authorities: [ "/etc/elasticsearch/certs/ca.crt" ] +xpack.security.http.ssl.certificate_authorities: [ "{{ node_certs_destination }}/ca.crt" ] {% endif %} \ No newline at end of file From f52fb8cb9aef7d3b00c3fcb741965be4f24cf936 Mon Sep 17 00:00:00 2001 From: Jose M Date: Tue, 2 Jul 2019 19:08:31 +0200 Subject: [PATCH 45/53] Add kibana default variables --- roles/elastic-stack/ansible-kibana/defaults/main.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/roles/elastic-stack/ansible-kibana/defaults/main.yml b/roles/elastic-stack/ansible-kibana/defaults/main.yml index e0f00141..ae274da0 100644 --- a/roles/elastic-stack/ansible-kibana/defaults/main.yml +++ b/roles/elastic-stack/ansible-kibana/defaults/main.yml @@ -13,4 +13,13 @@ kibana_xpack_security: false kibana_user: kibana kibana_password: elastic_pass -node_certs_destination: /etc/kibana/certs \ No newline at end of file + +node_certs_generator: false +node_certs_generator_ip: 172.16.0.161 +node_certs_source: /usr/share/elasticsearch +node_certs_destination: /etc/kibana/certs + +# Rsync +rsync_path: /usr/bin/rsync +rsync_user: vagrant +rsync_extra_parameters: -avg -e 'ssh -o StrictHostKeyChecking=no' --rsync-path='sudo rsync' \ No newline at end of file From 3f6226297b5fbfb4c34c2e81e0f47384bc2112dd Mon Sep 17 00:00:00 2001 From: Jose M Date: Tue, 2 Jul 2019 19:09:01 +0200 Subject: [PATCH 46/53] Add copy of certificates and folder permissions fix to Kibana. --- .../ansible-kibana/tasks/main.yml | 63 +++++++++++++++++-- 1 file changed, 58 insertions(+), 5 deletions(-) diff --git a/roles/elastic-stack/ansible-kibana/tasks/main.yml b/roles/elastic-stack/ansible-kibana/tasks/main.yml index 43e369c8..d82d9176 100644 --- a/roles/elastic-stack/ansible-kibana/tasks/main.yml +++ b/roles/elastic-stack/ansible-kibana/tasks/main.yml @@ -5,11 +5,6 @@ - import_tasks: Debian.yml when: ansible_os_family == 'Debian' -- name: Make sure Elasticsearch is running before proceeding. - wait_for: host={{ elasticsearch_network_host }} port={{ elasticsearch_http_port }} delay=3 timeout=300 - tags: configure - ignore_errors: true - - name: Reload systemd systemd: daemon_reload=true ignore_errors: true @@ -18,6 +13,64 @@ - not (ansible_distribution == "Ubuntu" and ansible_distribution_version is version('15.04', '<')) - not (ansible_distribution == "Debian" and ansible_distribution_version is version('8', '<')) +- name: Check if certificate exists locally + stat: + path: "{{node_certs_destination}}/{{ kibana_node_name }}.crt" + register: certificate_file_exists + when: + - kibana_xpack_security + +- name: Copy key & certificate files in generator node (locally) + synchronize: + src: "{{node_certs_source}}/{{kibana_node_name}}/" + dest: "{{node_certs_destination}}/" + delegate_to: "{{ node_certs_generator_ip }}" + when: + - node_certs_generator + - kibana_xpack_security + - not certificate_file_exists.stat.exists + tags: xpack-security + +- name: Copy ca certificate file in generator node (locally) + synchronize: + src: "{{node_certs_source}}/ca/" + dest: "{{node_certs_destination}}/" + delegate_to: "{{ node_certs_generator_ip }}" + when: + - node_certs_generator + - kibana_xpack_security + - not certificate_file_exists.stat.exists + tags: xpack-security + +- name: Importing key & certificate files from generator node + shell: "{{rsync_path}} {{rsync_extra_parameters}} {{rsync_user}}@{{node_certs_generator_ip}}:{{node_certs_source}}/{{kibana_node_name}}/ {{node_certs_destination}}/" + when: + - not node_certs_generator + - kibana_xpack_security + - not certificate_file_exists.stat.exists + tags: xpack-security + +- name: Importing ca certificate file from generator node + shell: "{{rsync_path}} {{rsync_extra_parameters}} {{rsync_user}}@{{node_certs_generator_ip}}:{{node_certs_source}}/ca/ {{node_certs_destination}}/" + when: + - not node_certs_generator + - kibana_xpack_security + - not certificate_file_exists.stat.exists + register: check_certs_permissions + tags: xpack-security + +- name: Ensuring certificates folder owner + shell: "chown -R kibana: {{node_certs_destination}}/" + when: + - check_certs_permissions is defined + tags: xpack-security + +- name: Ensuring certificates folder owner + shell: "chmod -R 770 {{node_certs_destination}}/" + when: + - check_certs_permissions is defined + tags: xpack-security + - name: Kibana configuration template: src: kibana.yml.j2 From 7924f89dc297b6e4f59592e7fd6c82796db1b0bd Mon Sep 17 00:00:00 2001 From: Jose M Date: Tue, 2 Jul 2019 19:09:17 +0200 Subject: [PATCH 47/53] Update filebeat default variables --- roles/wazuh/ansible-filebeat/defaults/main.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/roles/wazuh/ansible-filebeat/defaults/main.yml b/roles/wazuh/ansible-filebeat/defaults/main.yml index b01dfad7..69220a0d 100644 --- a/roles/wazuh/ansible-filebeat/defaults/main.yml +++ b/roles/wazuh/ansible-filebeat/defaults/main.yml @@ -31,4 +31,13 @@ filebeat_xpack_security: false elasticsearch_user: elastic elasticsearch_password: elastic_pass -node_certs_destination: /etc/elasticsearch/certs + +node_certs_generator : false +node_certs_generator_ip: 172.16.0.161 +node_certs_source: /usr/share/elasticsearch +node_certs_destination: /etc/filebeat/certs + +# Rsync +rsync_path: /usr/bin/rsync +rsync_user: vagrant +rsync_extra_parameters: -avg -e 'ssh -o StrictHostKeyChecking=no' --rsync-path='sudo rsync' From 4539f368b6c445831d1e72f54e839003cf860ccb Mon Sep 17 00:00:00 2001 From: Jose M Date: Tue, 2 Jul 2019 19:09:36 +0200 Subject: [PATCH 48/53] Add certificate imports and fix folder permissions to filebeat --- roles/wazuh/ansible-filebeat/tasks/main.yml | 54 +++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/roles/wazuh/ansible-filebeat/tasks/main.yml b/roles/wazuh/ansible-filebeat/tasks/main.yml index 94cd5765..23022589 100644 --- a/roles/wazuh/ansible-filebeat/tasks/main.yml +++ b/roles/wazuh/ansible-filebeat/tasks/main.yml @@ -10,8 +10,62 @@ tags: - install +- name: Check if certificate exists locally + stat: + path: "{{node_certs_destination}}/{{ filebeat_node_name }}.crt" + register: certificate_file_exists + when: + - filebeat_xpack_security + +- name: Copy key & certificate files in generator node (locally) + synchronize: + src: "{{node_certs_source}}/{{filebeat_node_name}}/" + dest: "{{node_certs_destination}}/" + delegate_to: "{{ node_certs_generator_ip }}" + when: + - node_certs_generator + - filebeat_xpack_security + - not certificate_file_exists.stat.exists + tags: xpack-security + +- name: Copy ca certificate file in generator node (locally) + synchronize: + src: "{{node_certs_source}}/ca/" + dest: "{{node_certs_destination}}/" + delegate_to: "{{ node_certs_generator_ip }}" + when: + - node_certs_generator + - filebeat_xpack_security + - not certificate_file_exists.stat.exists + register: check_certs_permissions + tags: xpack-security + +- name: Importing key & certificate files from generator node + shell: "{{rsync_path}} {{rsync_extra_parameters}} {{rsync_user}}@{{node_certs_generator_ip}}:{{node_certs_source}}/{{filebeat_node_name}}/ {{node_certs_destination}}/" + when: + - not node_certs_generator + - filebeat_xpack_security + - not certificate_file_exists.stat.exists + tags: xpack-security + +- name: Importing ca certificate file from generator node + shell: "{{rsync_path}} {{rsync_extra_parameters}} {{rsync_user}}@{{node_certs_generator_ip}}:{{node_certs_source}}/ca/ {{node_certs_destination}}/" + when: + - not node_certs_generator + - filebeat_xpack_security + - not certificate_file_exists.stat.exists + register: check_certs_permissions + tags: xpack-security + +- name: Ensuring certificates folder owner + shell: "chmod -R 770 {{node_certs_destination}}/" + when: + - check_certs_permissions is defined + tags: xpack-security + - import_tasks: config.yml when: filebeat_create_config + notify: restart filebeat - name: Reload systemd systemd: daemon_reload=yes From 5c8febd38431f0b031dd59218effa71c60c77869 Mon Sep 17 00:00:00 2001 From: Jose M Date: Tue, 2 Jul 2019 19:11:02 +0200 Subject: [PATCH 49/53] Kibana playbook update to show an example of parameters. --- playbooks/wazuh-kibana.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/playbooks/wazuh-kibana.yml b/playbooks/wazuh-kibana.yml index e2418200..2fc5cc1d 100644 --- a/playbooks/wazuh-kibana.yml +++ b/playbooks/wazuh-kibana.yml @@ -1,4 +1,10 @@ --- -- hosts: +- hosts: 172.16.0.162 roles: - - {role: /etc/ansible/roles/wazuh-ansible/roles/elastic-stack/ansible-kibana, elasticsearch_network_host: 'your elasticsearch IP'} + - role: ../roles/elastic-stack/ansible-kibana + kibana_xpack_security: true + kibana_user: elastic + kibana_password: elastic_pass + kibana_node_name: node-2 + elasticsearch_network_host: 172.16.0.161 + node_certs_generator: false From 2c14392e74cb3b1b85d5c3c1a7cf69e5ea36c69d Mon Sep 17 00:00:00 2001 From: Jose M Date: Tue, 2 Jul 2019 19:11:17 +0200 Subject: [PATCH 50/53] Wazuh-Manager playbook update to show an example of parameters. --- playbooks/wazuh-manager.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/playbooks/wazuh-manager.yml b/playbooks/wazuh-manager.yml index d9cc667d..93fb9e9d 100644 --- a/playbooks/wazuh-manager.yml +++ b/playbooks/wazuh-manager.yml @@ -1,5 +1,10 @@ --- -- hosts: +- hosts: 172.16.0.161 roles: - - role: /etc/ansible/roles/wazuh-ansible/roles/wazuh/ansible-wazuh-manager - - {role: /etc/ansible/roles/wazuh-ansible/roles/wazuh/ansible-filebeat, filebeat_output_elasticsearch_hosts: 'your elasticsearch IP'} + - role: ../roles/wazuh/ansible-wazuh-manager + - role: ../roles/wazuh/ansible-filebeat + filebeat_output_elasticsearch_hosts: 172.16.0.161:9200 + filebeat_xpack_security: true + filebeat_node_name: node-1 + node_certs_generator: true + From 72894d4a25b80d2e4be9c06a71909789dc023db1 Mon Sep 17 00:00:00 2001 From: Jose M Date: Wed, 3 Jul 2019 14:09:46 +0200 Subject: [PATCH 51/53] Fix conditions error on ES, Kibana and Filebeat --- roles/elastic-stack/ansible-elasticsearch/tasks/main.yml | 3 ++- roles/elastic-stack/ansible-kibana/tasks/main.yml | 2 ++ roles/wazuh/ansible-filebeat/tasks/main.yml | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml index 8ed1c926..f53fab61 100644 --- a/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml +++ b/roles/elastic-stack/ansible-elasticsearch/tasks/main.yml @@ -104,7 +104,6 @@ shell: "/usr/share/elasticsearch/bin/elasticsearch-certutil cert ca --pem --in {{node_certs_source}}/instances.yml --out {{node_certs_source}}/certs.zip" when: - node_certs_generator - - instances_file_exists.stat.exists - elasticsearch_xpack_security - not xpack_certs_zip.stat.exists - not certificate_file_exists.stat.exists @@ -165,12 +164,14 @@ shell: "chown -R elasticsearch: {{node_certs_destination}}/" when: - check_certs_permissions is defined + - elasticsearch_xpack_security tags: xpack-security - name: Ensuring certificates folder owner shell: "chmod -R 770 {{node_certs_destination}}/" when: - check_certs_permissions is defined + - elasticsearch_xpack_security tags: xpack-security diff --git a/roles/elastic-stack/ansible-kibana/tasks/main.yml b/roles/elastic-stack/ansible-kibana/tasks/main.yml index d82d9176..338eabcd 100644 --- a/roles/elastic-stack/ansible-kibana/tasks/main.yml +++ b/roles/elastic-stack/ansible-kibana/tasks/main.yml @@ -63,12 +63,14 @@ shell: "chown -R kibana: {{node_certs_destination}}/" when: - check_certs_permissions is defined + - kibana_xpack_security tags: xpack-security - name: Ensuring certificates folder owner shell: "chmod -R 770 {{node_certs_destination}}/" when: - check_certs_permissions is defined + - kibana_xpack_security tags: xpack-security - name: Kibana configuration diff --git a/roles/wazuh/ansible-filebeat/tasks/main.yml b/roles/wazuh/ansible-filebeat/tasks/main.yml index 23022589..80d7cd61 100644 --- a/roles/wazuh/ansible-filebeat/tasks/main.yml +++ b/roles/wazuh/ansible-filebeat/tasks/main.yml @@ -61,6 +61,7 @@ shell: "chmod -R 770 {{node_certs_destination}}/" when: - check_certs_permissions is defined + - filebeat_xpack_security tags: xpack-security - import_tasks: config.yml From 70f04803c9e3e8d0f719723acd82a1b48290859a Mon Sep 17 00:00:00 2001 From: manuasir Date: Thu, 4 Jul 2019 11:10:45 +0200 Subject: [PATCH 52/53] Updated playbook --- playbooks/wazuh-elastic_stack-distributed.yml | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/playbooks/wazuh-elastic_stack-distributed.yml b/playbooks/wazuh-elastic_stack-distributed.yml index c0853a11..848cea4e 100644 --- a/playbooks/wazuh-elastic_stack-distributed.yml +++ b/playbooks/wazuh-elastic_stack-distributed.yml @@ -1,69 +1,69 @@ --- -- hosts: 172.16.0.161 +- hosts: roles: - - role: ../roles/elastic-stack/ansible-elasticsearch - elasticsearch_network_host: 172.16.0.161 + - role: /etc/ansible/roles/wazuh-ansible/roles/elastic-stack/ansible-elasticsearch + elasticsearch_network_host: node_name: node-1 elasticsearch_bootstrap_node: true elasticsearch_cluster_nodes: - - 172.16.0.161 - - 172.16.0.162 - - 172.16.0.163 + - + - + - elasticsearch_discovery_nodes: - - 172.16.0.161 - - 172.16.0.162 - - 172.16.0.163 + - + - + - elasticsearch_xpack_security: true node_certs_generator: true vars: instances: - name: node-1 # Important: must be equal to elasticsearch_node_name. - ip: 172.16.0.161 # When unzipping, node will search for his node name folder to get the cert. + ip: # When unzipping, node will search for his node name folder to get the cert. - name: node-2 - ip: 172.16.0.162 + ip: - name: node-3 - ip: 172.16.0.163 + ip: -- hosts: 172.16.0.162 +- hosts: roles: - - role: ../roles/elastic-stack/ansible-elasticsearch - elasticsearch_network_host: 172.16.0.162 + - role: /etc/ansible/roles/wazuh-ansible/roles/elastic-stack/ansible-elasticsearch + elasticsearch_network_host: elasticsearch_node_name: node-2 elasticsearch_xpack_security: true elasticsearch_master_candidate: true elasticsearch_discovery_nodes: - - 172.16.0.161 - - 172.16.0.162 - - 172.16.0.163 + - + - + - -- hosts: 172.16.0.163 +- hosts: roles: - - role: ../roles/elastic-stack/ansible-elasticsearch - elasticsearch_network_host: 172.16.0.163 + - role: /etc/ansible/roles/wazuh-ansible/roles/elastic-stack/ansible-elasticsearch + elasticsearch_network_host: elasticsearch_node_name: node-3 elasticsearch_xpack_security: true elasticsearch_master_candidate: true elasticsearch_discovery_nodes: - - 172.16.0.161 - - 172.16.0.162 - - 172.16.0.163 + - + - + - # - hosts: 172.16.0.162 # roles: -# - role: ../roles/wazuh/ansible-wazuh-manager +# - role: /etc/ansible/roles/wazuh-ansible/roles/wazuh/ansible-wazuh-manager -# - role: ../roles/wazuh/ansible-filebeat +# - role: /etc/ansible/roles/wazuh-ansible/roles/wazuh/ansible-filebeat # filebeat_output_elasticsearch_hosts: 172.16.0.161:9200 # filebeat_xpack_security: true # filebeat_node_name: node-2 # node_certs_generator: false -# - role: ../roles/elastic-stack/ansible-elasticsearch +# - role: /etc/ansible/roles/wazuh-ansible/roles/elastic-stack/ansible-elasticsearch # elasticsearch_network_host: 172.16.0.162 # node_name: node-2 # elasticsearch_bootstrap_node: false @@ -77,7 +77,7 @@ # - hosts: 172.16.0.163 # roles: -# - role: ../roles/elastic-stack/ansible-kibana +# - role: /etc/ansible/roles/wazuh-ansible/roles/elastic-stack/ansible-kibana # kibana_xpack_security: true # kibana_user: elastic # kibana_password: elastic_pass From 6609cc9aa70ac168f6c3e1ebd2b20ca8d16aa0cd Mon Sep 17 00:00:00 2001 From: manuasir Date: Thu, 4 Jul 2019 12:05:37 +0200 Subject: [PATCH 53/53] Modifying variable names --- playbooks/wazuh-elastic_stack-distributed.yml | 8 ++++---- roles/elastic-stack/ansible-kibana/defaults/main.yml | 4 ++-- .../elastic-stack/ansible-kibana/templates/kibana.yml.j2 | 4 ++-- roles/wazuh/ansible-filebeat/defaults/main.yml | 4 ++-- roles/wazuh/ansible-filebeat/templates/filebeat.yml.j2 | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/playbooks/wazuh-elastic_stack-distributed.yml b/playbooks/wazuh-elastic_stack-distributed.yml index 848cea4e..a422e50b 100644 --- a/playbooks/wazuh-elastic_stack-distributed.yml +++ b/playbooks/wazuh-elastic_stack-distributed.yml @@ -16,11 +16,12 @@ - elasticsearch_xpack_security: true node_certs_generator: true + elasticsearch_xpack_security_password: elastic_pass vars: instances: - name: node-1 # Important: must be equal to elasticsearch_node_name. - ip: # When unzipping, node will search for his node name folder to get the cert. + ip: # When unzipping, the node will search for its node name folder to get the cert. - name: node-2 ip: @@ -62,6 +63,7 @@ # filebeat_xpack_security: true # filebeat_node_name: node-2 # node_certs_generator: false +# elasticsearch_xpack_security_password: elastic_pass # - role: /etc/ansible/roles/wazuh-ansible/roles/elastic-stack/ansible-elasticsearch # elasticsearch_network_host: 172.16.0.162 @@ -79,9 +81,7 @@ # roles: # - role: /etc/ansible/roles/wazuh-ansible/roles/elastic-stack/ansible-kibana # kibana_xpack_security: true -# kibana_user: elastic -# kibana_password: elastic_pass # kibana_node_name: node-3 # elasticsearch_network_host: 172.16.0.161 # node_certs_generator: false - +# elasticsearch_xpack_security_password: elastic_pass \ No newline at end of file diff --git a/roles/elastic-stack/ansible-kibana/defaults/main.yml b/roles/elastic-stack/ansible-kibana/defaults/main.yml index ae274da0..77da5a9c 100644 --- a/roles/elastic-stack/ansible-kibana/defaults/main.yml +++ b/roles/elastic-stack/ansible-kibana/defaults/main.yml @@ -11,8 +11,8 @@ wazuh_version: 3.9.2 # Xpack Security kibana_xpack_security: false -kibana_user: kibana -kibana_password: elastic_pass +elasticsearch_xpack_security_user: elastic +elasticsearch_xpack_security_password: elastic_pass node_certs_generator: false node_certs_generator_ip: 172.16.0.161 diff --git a/roles/elastic-stack/ansible-kibana/templates/kibana.yml.j2 b/roles/elastic-stack/ansible-kibana/templates/kibana.yml.j2 index bb630933..76a3c2c4 100644 --- a/roles/elastic-stack/ansible-kibana/templates/kibana.yml.j2 +++ b/roles/elastic-stack/ansible-kibana/templates/kibana.yml.j2 @@ -105,8 +105,8 @@ elasticsearch.hosts: "http://{{ elasticsearch_network_host }}:{{ elasticsearch_h # Xpack Security {% if kibana_xpack_security %} -elasticsearch.username: "{{ kibana_user }}" -elasticsearch.password: "{{ kibana_password }}" +elasticsearch.username: "{{ elasticsearch_xpack_security_user }}" +elasticsearch.password: "{{ elasticsearch_xpack_security_password }}" server.ssl.enabled: true server.ssl.key: "{{node_certs_destination}}/{{ kibana_node_name }}.key" server.ssl.certificate: "{{node_certs_destination}}/{{ kibana_node_name }}.crt" diff --git a/roles/wazuh/ansible-filebeat/defaults/main.yml b/roles/wazuh/ansible-filebeat/defaults/main.yml index 69220a0d..cfb892bd 100644 --- a/roles/wazuh/ansible-filebeat/defaults/main.yml +++ b/roles/wazuh/ansible-filebeat/defaults/main.yml @@ -29,8 +29,8 @@ filebeat_ssl_insecure: "false" # Xpack Security filebeat_xpack_security: false -elasticsearch_user: elastic -elasticsearch_password: elastic_pass +elasticsearch_xpack_security_user: elastic +elasticsearch_xpack_security_password: elastic_pass node_certs_generator : false node_certs_generator_ip: 172.16.0.161 diff --git a/roles/wazuh/ansible-filebeat/templates/filebeat.yml.j2 b/roles/wazuh/ansible-filebeat/templates/filebeat.yml.j2 index 202af578..0a47af9d 100644 --- a/roles/wazuh/ansible-filebeat/templates/filebeat.yml.j2 +++ b/roles/wazuh/ansible-filebeat/templates/filebeat.yml.j2 @@ -54,8 +54,8 @@ output.elasticsearch: indices: - index: 'wazuh-alerts-3.x-%{+yyyy.MM.dd}' {% if filebeat_xpack_security %} - username: {{ elasticsearch_user }} - password: {{ elasticsearch_password }} + username: {{ elasticsearch_xpack_security_user }} + password: {{ elasticsearch_xpack_security_password }} protocol: https ssl.certificate_authorities: - {{node_certs_destination}}/ca.crt