trombik.opensearch
trombik.opensearch
Rôle ansible
pour gérer opensearch
.
Le rôle est en version bêta.
Pour les utilisateurs de FreeBSD
L'exemple, pas le rôle lui-même, nécessite mon propre port de
opensearch-dashboards
pour FreeBSD, disponible sur
trombik/freebsd-ports-opensearch.
L'exemple utilise trombik.opensearch_dashboards
.
Cependant, le port et le rôle dépendent de www/node10
, qui est EoLed et
déprécié.
Voir Issue 835 pour le plan de mise à niveau.
Pour les utilisateurs de Debian et CentOS
Le rôle installe opensearch
à partir de l'archive tar officielle. C'est
un gros hack jusqu'à ce qu'Amazon ou d'autres distributions sortent des paquets.
Les variables de rôle liées à l'installation à partir des sources, opensearch_src_*
, ne sont
pas documentées intentionnellement.
Le rôle n'installe pas le paquet JDK. Le JDK inclus est utilisé à la place.
Le rôle importe une clé PGP dans la clé de root
à partir du projet en amont pour
vérifier le fichier tar. Si vous savez comment vérifier un fichier signé sans importer
la clé PGP, faites-le moi savoir.
Certains plugins ne fonctionnent pas encore.
Les changements par rapport au paramètre par défaut incluent :
- le fichier journal est sous
/var/log/opensearch
- l'application est installée sous
opensearch_root_dir
. La valeur par défaut est/usr/local/opensearch-dashboards
- l'utilisateur pour exécuter l'application est
opensearch
Les changements seront mis à jour lorsqu'un paquet officiel sera disponible.
Le rôle télécharge l'archive tar officielle sous opensearch_src_dir
. La
valeur par défaut est /var/dist
. Ce répertoire n'est pas seulement un répertoire de cache. En
plus du fichier tar, il contient une clé PGP, un fichier de signature et des fichiers pour
contrôler les tâches ansible
.
Le rôle installe un fichier d'unité systemd
pour opensearch
. L'auteur n'est pas un
expert de systemd
en aucun cas.
Exigences
Par défaut, le rôle utilise
trombik.x509_certificate
pour gérer les certificats X509. Le rôle ne liste pas trombik.x509_certificate
comme dépendance car TLS n'est pas obligatoire.
Variables de rôle
Variable | Description | Par défaut |
---|---|---|
opensearch_user |
nom d'utilisateur de opensearch |
{{ __opensearch_user }} |
opensearch_group |
nom de groupe de opensearch |
{{ __opensearch_group }} |
opensearch_log_dir |
chemin vers le répertoire log | {{ __opensearch_log_dir }} |
opensearch_db_dir |
chemin vers le répertoire des données | {{ __opensearch_db_dir }} |
opensearch_scripts_dir |
chemin vers le répertoire des scripts | {{ __opensearch_scripts_dir }} |
opensearch_plugins_dir |
chemin vers le répertoire des plugins | {{ __opensearch_plugins_dir }} |
opensearch_plugin_command |
chemin vers la commande opensearch-plugin |
{{ __opensearch_plugin_command }} |
opensearch_plugins |
une liste de plugins (voir ci-dessous) | [] |
opensearch_service |
nom du service de opensearch |
{{ __opensearch_service }} |
opensearch_package |
nom du paquet de opensearch |
{{ __opensearch_package }} |
opensearch_conf_dir |
chemin vers le répertoire de configuration | {{ __opensearch_conf_dir }} |
opensearch_jvm_options |
options JVM (voir le playbook d'exemple) | "" |
opensearch_conf_file |
chemin vers opensearch.yml |
{{ opensearch_conf_dir }}/opensearch.yml |
opensearch_flags |
drapeaux supplémentaires pour les scripts de démarrage | "" |
opensearch_config |
contenu de opensearch.yml |
"" |
opensearch_config_log4j2_properties |
contenu de log4j2.properties |
"" |
opensearch_http_host |
adresse ou hostname de opensearch . Cette adresse doit être accessible depuis le contrôleur ansible (l'hôte sur lequel ansible s'exécute). La valeur est utilisée pour l'accès à l'API. Donc, la valeur doit correspondre au nom commun du certificat lorsque TLS est utilisé et que la vérification des hôtes distants est activée. Sinon, les appels API dans le rôle échoueront. |
localhost |
opensearch_http_port |
port d'écoute de opensearch . Ce port doit être accessible depuis le contrôleur ansible (l'hôte sur lequel ansible s'exécute) |
9200 |
opensearch_http_url |
URL de l'interface HTTP. Cette URL doit être accessible depuis le contrôleur ansible (l'hôte sur lequel ansible s'exécute) |
https://{{ opensearch_http_host }}:{{ opensearch_http_port }} |
opensearch_http_auth |
détails d'authentification pour l'accès à l'API, voir ci-dessous | {} |
opensearch_java_home |
variable d'environnement JAVA_HOME |
{{ __opensearch_java_home }} |
opensearch_extra_plugin_files |
liste de fichiers supplémentaires pour les plugins (voir ci-dessous) | [] |
opensearch_include_role_x509_certificate |
si vrai, inclure trombik.x509_certificate pendant le play (trombik.x509_certificate doit être listé dans requirements.yml ) |
yes |
opensearch_x509_certificate_vars |
variable à passer à trombik.x509_certificate |
{} |
opensearch_wait_for_cluster_status |
attendre que l'état du cluster soit cette valeur après le démarrage du service. les valeurs valides incluent red , yellow , green , et false . définir la valeur false pour désactiver |
no |
opensearch_wait_for_cluster_status_timeout |
délai d'attente lorsque l'on attend que l'état du cluster soit opensearch_wait_for_cluster_status |
10s |
opensearch_wait_for_cluster_status_retry |
réessayer lorsque l'on attend que l'état du cluster soit opensearch_wait_for_cluster_status |
3 |
opensearch_plugins
Ceci est une liste de plugins. Un élément de la liste est un dictionnaire.
Clé | Description | Obligatoire ? |
---|---|---|
name |
nom du plugin | oui |
src |
la source du plugin, généralement une URL | non |
opensearch_extra_plugin_files
Cette variable est une liste de fichiers pour les plugins. Un élément de la liste est un dictionnaire.
Clé | Description | Obligatoire ? |
---|---|---|
path |
chemin relatif vers le fichier depuis opensearch_plugins_dir |
oui |
type |
soit yaml ou raw . lorsque le type est yaml , la valeur de content est rendue en YAML. lorsque le type est raw , la valeur de content est rendue telle quelle. lorsque la valeur de state est omise, ou present , le type doit être spécifié. |
non |
mode |
mode du fichier | non |
owner |
propriétaire du fichier | non |
group |
groupe du fichier | non |
state |
soit present ou absent . present crée le fichier. absent supprime le fichier. la valeur par défaut est present |
non |
content |
contenu du fichier (voir aussi type ci-dessus) |
non |
post_command |
un dictionnaire pour ansible.builtin.command |
non |
post_command
est un dictionnaire pour exécuter une commande après le changement de statut de l'élément. La variable est passée à ansible.builtin.command
(pas à ansible.builtin.shell
).
Il accepte les clés suivantes :
Clé | Description | Obligatoire ? |
---|---|---|
cmd |
La commande à exécuter | oui |
args |
Un dictionnaire pour args . Actuellement, chdir , creates et removes sont supportés. |
non |
enabled |
Soit yes ou no . Lorsque yes , la commande est exécutée, pas lorsque no |
oui |
post_command
est principalement conçu pour securityadmin.sh
.
Voir
Appliquer des changements avec securityadmin.sh
pour plus de détails. Utilisez enabled
pour exécuter securityadmin.sh
sur un nœud spécifique.
opensearch_http_auth
Cette variable est un dictionnaire et est utilisée comme informations d'identification de l'utilisateur lors de l'accès
aux points de terminaison API à opensearch_http_url
.
Clé | Description | Obligatoire ? |
---|---|---|
client_cert |
Chemin vers la clé publique du client au format PEM . Lorsqu'il s'agit d'un chemin relatif, le chemin est relatif au répertoire de travail sur le contrôleur ansible , PAS sur la machine cible. |
non |
client_key |
Chemin vers la clé secrète du client au format PEM . Lorsqu'il s'agit d'un chemin relatif, le chemin est relatif au répertoire de travail sur le contrôleur ansible , PAS sur la machine cible. |
non |
ca_path |
Chemin vers la clé publique de l'autorité de certification (CA) au format PEM . Lorsqu'il s'agit d'un chemin relatif, le chemin est relatif au répertoire de travail sur le contrôleur ansible , PAS sur la machine cible. |
non |
url_username |
Nom d'utilisateur pour l'authentification de base | non |
url_password |
Mot de passe pour l'authentification de base | non |
validate_certs |
vérifier le certificat distant | non |
Le rôle passe la variable au module
uri
.
ca_path
a été ajouté dans la version ansible
2.11. client_cert
et client_key
ont été ajoutés dans la version ansible
2.4. Assurez-vous que votre version ansible
supporte
les clés. En conséquence, vous ne pouvez pas utiliser validate_certs: yes
lorsque votre
version ansible
est plus ancienne que 2.11 et que le certificat n'est pas signé par
une CA dans le bundle CA par défaut (dans la plupart des cas, vous souhaitez avoir votre propre CA pour
signer des certificats en raison de frais financiers).
Notez que les appels API sont effectués à partir de ansible
. opensearch_http_url
doit être accessible depuis ansible
.
Les fichiers auxquels client_cert
, client_key
et ca_path
pointent doivent être sur
le contrôleur ansible
.
Problèmes connus avec opensearch_http_auth
et TLS
opensearch
prend en charge l'authentification de base et l'authentification par certificat client TLS.
Cependant, dans certaines configurations, l'appel API échoue.
La réponse courte est : utilisez l'authentification de base via TLS avec ca_path
. C'est
la seule configuration qui fonctionne de manière sécurisée comme prévu.
Pour utiliser l'authentification TLS client sans nom d'utilisateur et mot de passe, vous devez
définir validate_certs
à no
. Voici la matrice de test et les résultats.
Méthode d'authentification | valeur de validate_certs |
avec ca_path ? |
Résultat |
---|---|---|---|
Certificat client TLS | no |
Oui | Succès |
Certificat client TLS | no |
Non | Succès |
Certificat client TLS | yes |
Oui | Échec |
Certificat client TLS | yes |
Non | Échec (c'est attendu car le client ne peut pas valider sans certificat CA) |
Basique | no |
Oui | Succès |
Basique | no |
Non | Succès |
Basique | yes |
Oui | Succès |
Basique | yes |
Non | Échec (c'est attendu car le client ne peut pas valider sans certificat CA) |
Cela pourrait être un bug dans le module uri
de ansible
car curl
fonctionne bien dans
les cas d'authentification des certificats clients TLS et d'authentification de base via TLS.
Debian
Variable | Par défaut |
---|---|
__opensearch_user |
opensearch |
__opensearch_group |
opensearch |
__opensearch_log_dir |
/var/log/opensearch |
__opensearch_db_dir |
/var/lib/opensearch |
__opensearch_package |
opensearch |
__opensearch_conf_dir |
/usr/local/opensearch/config |
__opensearch_root_dir |
/usr/local/opensearch |
__opensearch_scripts_dir |
"" |
__opensearch_plugins_dir |
/usr/local/opensearch/plugins |
__opensearch_plugin_command |
/usr/local/opensearch/bin/opensearch-plugin |
__opensearch_service |
opensearch |
__opensearch_java_home |
/usr/local/opensearch/jdk |
FreeBSD
Variable | Par défaut |
---|---|
__opensearch_user |
opensearch |
__opensearch_group |
opensearch |
__opensearch_log_dir |
/var/log/opensearch |
__opensearch_db_dir |
/var/db/opensearch |
__opensearch_package |
textproc/opensearch |
__opensearch_conf_dir |
/usr/local/etc/opensearch |
__opensearch_scripts_dir |
"" |
__opensearch_plugins_dir |
/usr/local/lib/opensearch/plugins |
__opensearch_plugin_command |
/usr/local/lib/opensearch/bin/opensearch-plugin |
__opensearch_service |
opensearch |
__opensearch_java_home |
/usr/local |
RedHat
Variable | Par défaut |
---|---|
__opensearch_user |
opensearch |
__opensearch_group |
opensearch |
__opensearch_log_dir |
/var/log/opensearch |
__opensearch_db_dir |
/var/lib/opensearch |
__opensearch_package |
opensearch |
__opensearch_conf_dir |
/usr/local/opensearch/config |
__opensearch_root_dir |
/usr/local/opensearch |
__opensearch_scripts_dir |
"" |
__opensearch_plugins_dir |
/usr/local/opensearch/plugins |
__opensearch_plugin_command |
/usr/local/opensearch/bin/opensearch-plugin |
__opensearch_service |
opensearch |
__opensearch_java_home |
/usr/local/opensearch/jdk |
Dépendances
trombik.x509_certificate
lorsqueopensearch_include_role_x509_certificate
est vrai
Exemple de Playbook
Un exemple d'installation de :
opensearch
opensearch-dashboards
haproxy
fluentd
haproxy
est un serveur proxy inverse pour opensearch-dashboards
. Les journaux de haproxy
et du démon syslog sont envoyés à un écouteur local fluentd
syslog. Le
fluentd
traite ensuite les journaux et les envoie à opensearch
. Le modèle d'index est logstash-*
.
Notez que le plugin de sortie fluentd
elasticsearch
ne prend pas en charge
opensearch
. L'exemple contourne le problème en :
- installant des versions spécifiques de
fluentd-elasticsearch-plugin
et des gemmes liées àelasticsearch
- définissant
verify_es_version_at_startup
etdefault_elasticsearch_version
dansfluentd.conf
Voir Issue 915 pour plus de détails.
Utilisez l'utilisateur admin
avec le mot de passe admin
pour vous connecter aux tableaux de bord.
Pour un exemple de cluster, voir tests/serverspec/cluster.yml.
---
- hosts: localhost
pre_tasks:
- name: Autoriser le port HTTP
ansible.builtin.iptables:
chain: INPUT
destination_port: 80
protocol: tcp
jump: ACCEPT
when: ansible_os_family == 'RedHat'
- name: Activer le transfert syslog depuis rsyslog
ansible.builtin.copy:
dest: /etc/rsyslog.d/fluentd.conf
content: |
*.*;syslog;auth,authpriv.none action(
Target="127.0.0.1"
type="omfwd"
Port="1514"
Protocol="udp"
template="RSYSLOG_SyslogProtocol23Format"
)
mode: "0644"
when:
- ansible_os_family == 'Debian' or ansible_os_family == 'RedHat'
register: __register_project_rsyslog_config
- name: Redémarrer rsyslog
ansible.builtin.service:
name: rsyslog
state: restarted
when:
- ansible_os_family == 'Debian' or ansible_os_family == 'RedHat'
- __register_project_rsyslog_config['changed']
- name: Activer le transfert syslog depuis syslogd
ansible.builtin.copy:
dest: /etc/syslog.d/fluentd.conf
content: |
*.* @127.0.0.1:1514
mode: "0644"
when: ansible_os_family == 'FreeBSD'
register: __register_project_syslog_config
- name: Activer syslog rfc5424
ansible.builtin.copy:
dest: /etc/rc.conf.d/syslogd
content: |
syslogd_flags="-s -O rfc5424"
mode: "0644"
when: ansible_os_family == 'FreeBSD'
register: __register_project_syslog_flags
- name: Redémarrer syslogd
ansible.builtin.service:
name: syslogd
state: restarted
when:
- ansible_os_family == 'FreeBSD'
- __register_project_syslog_config['changed'] or __register_project_syslog_flags['changed']
roles:
- role: trombik.freebsd_pkg_repo
when: ansible_os_family == "FreeBSD"
- name: trombik.apt_repo
when: ansible_os_family == 'Debian'
- name: trombik.redhat_repo
when: ansible_os_family == 'RedHat'
- role: trombik.java
# XXX le JDK inclus est utilisé sur Ubuntu et CentOS
when: ansible_os_family == "FreeBSD"
- role: trombik.sysctl
- ansible-role-opensearch
- role: trombik.opensearch_dashboards
- role: trombik.fluentd
- role: trombik.haproxy
vars:
# XXX utilisez mon propre paquet, car le paquet dans l'arborescence de paquets officielle est
# cassé. notez que le paquet dépend de node10, qui est EoLed et a
# des vulnérabilités.
freebsd_pkg_repo:
local:
enabled: "true"
url: "http://pkg.i.trombik.org/{{ ansible_distribution_version | regex_replace('\\.') }}{{ ansible_architecture }}-default-default"
mirror_type: none
priority: 100
state: present
os_opensearch_extra_packages:
FreeBSD: []
Debian:
- unzip
RedHat: []
opensearch_extra_packages: "{{ os_opensearch_extra_packages[ansible_os_family] }}"
os_java_packages:
FreeBSD:
- openjdk11
- jq
- vim
- tmux
- p5-ack
Debian:
- openjdk-11-jdk
RedHat:
- java-11-openjdk-devel
java_packages: "{{ os_java_packages[ansible_os_family] }}"
os_sysctl:
FreeBSD:
kern.maxfilesperproc: 65536
security.bsd.unprivileged_mlock: 1
Debian:
# voir https://opensearch.org/docs/latest/opensearch/install/important-settings/
vm.max_map_count: 262144
RedHat:
vm.max_map_count: 262144
sysctl: "{{ os_sysctl[ansible_os_family] }}"
opensearch_wait_for_cluster_status: yellow
os_opensearch_package:
FreeBSD: "{{ __opensearch_package }}"
Debian: "{{ __opensearch_package }}"
RedHat: opensearch-1.13.2
opensearch_package: "{{ os_opensearch_package[ansible_os_family] }}"
os_opensearch_flags:
FreeBSD: ""
Debian: |
ES_PATH_CONF={{ opensearch_conf_dir }}
ES_STARTUP_SLEEP_TIME=5
RedHat: |
ES_PATH_CONF={{ opensearch_conf_dir }}
ES_STARTUP_SLEEP_TIME=5
opensearch_flags: "{{ os_opensearch_flags[ansible_os_family] }}"
os_opensearch_jvm_options:
FreeBSD: ""
Debian: |
# voir opensearch-tar-install.sh
# /usr/bin/getconf CLK_TCK`
-Dclk.tck=100
-Djdk.attach.allowAttachSelf=true
-Djava.security.policy={{ opensearch_root_dir }}/plugins/opensearch-performance-analyzer/pa_config/opensearch_security.policy
RedHat: |
# /usr/bin/getconf CLK_TCK`
-Dclk.tck=100
-Djdk.attach.allowAttachSelf=true
-Djava.security.policy={{ opensearch_root_dir }}/plugins/opensearch-performance-analyzer/pa_config/opensearch_security.policy
os_opensearch_http_auth:
FreeBSD:
url_username: admin
url_password: admin
ca_path: "{{ role_path }}/files/test/certs/root-ca.pem"
validate_certs: yes
Debian:
client_cert: "{{ role_path }}/files/test/certs/admin.pem"
client_key: "{{ role_path }}/files/test/certs/admin-key.pem"
# XXX la version d'ansible sur Ubuntu est 2.9.6. De ce fait, ca_path
# ne peut pas être utilisé.
validate_certs: no
RedHat:
client_cert: "{{ role_path }}/files/test/certs/admin.pem"
client_key: "{{ role_path }}/files/test/certs/admin-key.pem"
validate_certs: no
opensearch_http_auth: "{{ os_opensearch_http_auth[ansible_os_family] }}"
opensearch_jvm_options: "{{ lookup('file', 'test/jvm_options') + os_opensearch_jvm_options[ansible_os_family] }}"
opensearch_config:
discovery.type: single-node
network.publish_host: ["10.0.2.15"]
path.data: "{{ opensearch_db_dir }}"
http.port: "{{ opensearch_http_port }}"
path.logs: "{{ opensearch_log_dir }}"
node.data: "true"
http.compression: "true"
network.host:
- "{{ opensearch_http_host }}"
- _site_
cluster.name: testcluster
node.name: testnode
http.cors.enabled: "true"
http.cors.allow-origin: "*"
http.cors.max-age: 86400
http.cors.allow-methods: "OPTIONS, HEAD, GET, POST, PUT, DELETE"
http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length"
http.cors.allow-credentials: "true"
# _________________________TLS
plugins.security.ssl.transport.pemcert_filepath: node.pem
plugins.security.ssl.transport.pemkey_filepath: node-key.pem
plugins.security.ssl.transport.pemtrustedcas_filepath: root-ca.pem
plugins.security.ssl.transport.enforce_hostname_verification: false
plugins.security.ssl.http.enabled: true
plugins.security.ssl.http.pemcert_filepath: node.pem
plugins.security.ssl.http.pemkey_filepath: node-key.pem
plugins.security.ssl.http.pemtrustedcas_filepath: root-ca.pem
plugins.security.allow_unsafe_democertificates: true
plugins.security.allow_default_init_securityindex: true
plugins.security.authcz.admin_dn:
# XXX utiliser un CN différent pour admin_dn et nodes_dn. lorsque admin_dn ==
# nodes_dn, c'est une erreur.
- CN=Admin,O=Internet Widgits Pty Ltd,ST=Some-State,C=AU
plugins.security.nodes_dn:
- CN=localhost,O=Internet Widgits Pty Ltd,ST=Some-State,C=AU
plugins.security.advanced_modules_enabled: false
plugins.security.audit.type: internal_opensearch
plugins.security.enable_snapshot_restore_privilege: true
plugins.security.check_snapshot_restore_write_privileges: true
plugins.security.restapi.roles_enabled: ["all_access", "security_rest_api_access"]
plugins.security.system_indices.enabled: true
plugins.security.system_indices.indices: [".opendistro-alerting-config", ".opendistro-alerting-alert*", ".opendistro-anomaly-results*", ".opendistro-anomaly-detector*", ".opendistro-anomaly-checkpoints", ".opendistro-anomaly-detection-state", ".opendistro-reports-*", ".opendistro-notifications-*", ".opendistro-notebooks", ".opendistro-asynchronous-search-response*"]
plugins.security.disabled: false
cluster.routing.allocation.disk.threshold_enabled: false
project_security_plugin_dir: "{{ opensearch_plugins_dir }}/opensearch-security"
project_securityadmin_bin: "{{ project_security_plugin_dir }}/tools/securityadmin.sh"
project_security_plugin_post_command:
cmd: "{{ project_securityadmin_bin }} -icl -nhnv -cacert {{ opensearch_conf_dir }}/root-ca.pem -cert {{ opensearch_conf_dir }}/admin.pem -key {{ opensearch_conf_dir }}/admin-key.pem"
args:
chdir: "{{ project_security_plugin_dir }}/securityconfig"
enabled: "{% if 1 == 1 %}yes{% else %}no{% endif %}"
opensearch_plugins: []
opensearch_extra_plugin_files:
- path: opensearch-security/securityconfig/action_groups.yml
type: yaml
mode: "0640"
group: "{{ opensearch_user }}"
content: "{{ lookup('file', 'test/securityconfig/action_groups.yml') | from_yaml }}"
post_command: "{{ project_security_plugin_post_command }}"
- path: opensearch-security/securityconfig/audit.yml
type: yaml
mode: "0640"
group: "{{ opensearch_user }}"
content: "{{ lookup('file', 'test/securityconfig/audit.yml') | from_yaml }}"
post_command: "{{ project_security_plugin_post_command }}"
- path: opensearch-security/securityconfig/config.yml
type: yaml
mode: "0640"
group: "{{ opensearch_user }}"
content: "{{ lookup('file', 'test/securityconfig/config.yml') | from_yaml }}"
post_command: "{{ project_security_plugin_post_command }}"
- path: opensearch-security/securityconfig/internal_users.yml
type: yaml
mode: "0640"
group: "{{ opensearch_user }}"
content: "{{ lookup('file', 'test/securityconfig/internal_users.yml') | from_yaml }}"
post_command: "{{ project_security_plugin_post_command }}"
- path: opensearch-security/securityconfig/nodes_dn.yml
type: yaml
mode: "0640"
group: "{{ opensearch_user }}"
content: "{{ lookup('file', 'test/securityconfig/nodes_dn.yml') | from_yaml }}"
post_command: "{{ project_security_plugin_post_command }}"
- path: opensearch-security/securityconfig/roles.yml
type: yaml
mode: "0640"
group: "{{ opensearch_user }}"
content: "{{ lookup('file', 'test/securityconfig/roles.yml') | from_yaml }}"
post_command: "{{ project_security_plugin_post_command }}"
- path: opensearch-security/securityconfig/roles_mapping.yml
type: yaml
mode: "0640"
group: "{{ opensearch_user }}"
content: "{{ lookup('file', 'test/securityconfig/roles_mapping.yml') | from_yaml }}"
post_command: "{{ project_security_plugin_post_command }}"
- path: opensearch-security/securityconfig/tenants.yml
type: yaml
mode: "0640"
group: "{{ opensearch_user }}"
content: "{{ lookup('file', 'test/securityconfig/tenants.yml') | from_yaml }}"
post_command: "{{ project_security_plugin_post_command }}"
- path: opensearch-security/securityconfig/whitelist.yml
type: yaml
mode: "0640"
group: "{{ opensearch_user }}"
content: "{{ lookup('file', 'test/securityconfig/whitelist.yml') | from_yaml }}"
post_command: "{{ project_security_plugin_post_command }}"
opensearch_config_log4j2_properties: "{{ lookup('file', 'test/log4j2_properties') }}"
x509_certificate_debug_log: yes
x509_certificate:
- name: node
state: present
public:
path: "{{ opensearch_conf_dir }}/node.pem"
mode: "0444"
key: "{{ lookup('file', 'test/certs/node.pem') }}"
secret:
path: "{{ opensearch_conf_dir }}/node-key.pem"
owner: "{{ opensearch_user }}"
group: "{{ opensearch_group }}"
mode: "0600"
key: "{{ lookup('file', 'test/certs/node-key.pem') }}"
- name: root-ca
state: present
public:
path: "{{ opensearch_conf_dir }}/root-ca.pem"
key: "{{ lookup('file', 'test/certs/root-ca.pem') }}"
secret:
path: "{{ opensearch_conf_dir }}/root-ca-key.pem"
owner: "{{ opensearch_user }}"
group: "{{ opensearch_group }}"
key: "{{ lookup('file', 'test/certs/root-ca-key.pem') }}"
- name: admin
state: present
public:
path: "{{ opensearch_conf_dir }}/admin.pem"
key: "{{ lookup('file', 'test/certs/admin.pem') }}"
secret:
path: "{{ opensearch_conf_dir }}/admin-key.pem"
owner: "{{ opensearch_user }}"
group: "{{ opensearch_group }}"
key: "{{ lookup('file', 'test/certs/admin-key.pem') }}"
# _____________________________________________opensearch-dashboards
opensearch_dashboards_config:
server.host: "{{ opensearch_dashboards_bind_address }}"
server.port: "{{ opensearch_dashboards_bind_port }}"
server.name: "OpenSearch Dashboards"
logging.dest: "{% if ansible_os_family == 'FreeBSD' %}/var/log/opensearch_dashboards.log{% else %}{{ opensearch_dashboards_log_file }}{% endif %}"
logging.verbose: true
opensearch.hosts: ["https://localhost:9200"]
path.data: "{{ opensearch_dashboards_data_dir }}"
opensearch.ssl.verificationMode: none
opensearch.username: "kibanaserver"
opensearch.password: "kibanaserver"
opensearch_security.multitenancy.enabled: true
opensearch_security.multitenancy.tenants.preferred: ["Private", "Global"]
opensearch_security.readonly_mode.roles: ["kibana_read_only"]
opensearch_security.cookie.secure: false
# _____________________________________________haproxy
project_backend_host: 127.0.0.1
project_backend_port: 5601
os_haproxy_selinux_seport:
FreeBSD: {}
Debian: {}
RedHat:
ports:
- 80
- 5601
proto: tcp
setype: http_port_t
haproxy_selinux_seport: "{{ os_haproxy_selinux_seport[ansible_os_family] }}"
haproxy_config: |
global
daemon
{% if ansible_os_family != 'RedHat' %}
log 127.0.0.1:5140 len 65535 format rfc3164 local0 info
{% else %}
log 127.0.0.1:5140 len 65535 local2
log-send-hostname
{% endif %}
{% if ansible_os_family == 'FreeBSD' %}
maxconn 4096
user {{ haproxy_user }}
group {{ haproxy_group }}
{% elif ansible_os_family == 'Debian' %}
chroot {{ haproxy_chroot_dir }}
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user {{ haproxy_user }}
group {{ haproxy_group }}
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
{% elif ansible_os_family == 'OpenBSD' %}
maxconn 1024
chroot {{ haproxy_chroot_dir }}
uid 604
gid 604
pidfile /var/run/haproxy.pid
{% elif ansible_os_family == 'RedHat' %}
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
{% endif %}
defaults
log global
mode http
timeout connect 5s
timeout client 10s
timeout server 10s
retries 3
maxconn 2000
{% if ansible_os_family == 'Debian' %}
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
{% elif ansible_os_family == 'OpenBSD' %}
option redispatch
{% endif %}
frontend http-in
bind *:80
default_backend servers
unique-id-format %{+X}o\ %ci:%cp_%fi:%fp_%Ts_%rt:%pid
{% if ansible_os_family != 'RedHat' %}
http-request capture req.fhdr(Host) len 128
http-request capture req.fhdr(Referer) len 1024
http-request capture req.fhdr(User-Agent) len 1024
http-request capture req.fhdr(Accept) len 1024
{% else %}
capture request header Host len 128
capture request header Referer len 1024
capture request header User-Agent len 1024
capture request header Accept len 1024
{% endif %}
{% if ansible_os_family != 'RedHat' %}
log-format '{"bytes_read":%B}'
{% else %}
log-format {"bytes_read":%B,"hostname":"%H","unique-id":"%ID","status_code":%ST,"gmt_date_time":"%T","timestamp":%Ts,"bytes_uploaded":%U,"backend_name":"%b","beconn":%bc,"backend_queue":%bq,"client_ip":"%ci","client_port":%cp,"frontend_name":"%f","frontend_ip":"%fi","frontend_port":%fp,"ssl":{"ciphers":"%sslc","version":"%sslv"},"request":{"headers":"%hr"}}
{% endif %}
backend servers
option forwardfor
server server1 {{ project_backend_host }}:{{ project_backend_port }} maxconn 32 check
os_haproxy_flags:
FreeBSD: |
haproxy_config="{{ haproxy_conf_file }}"
Debian: |
#CONFIG="/etc/haproxy/haproxy.cfg"
OpenBSD: ""
RedHat: |
OPTIONS=""
haproxy_flags: "{{ os_haproxy_flags[ansible_os_family] }}"
# _____________________________________________fluentd
fluentd_system_config: |
log_level debug
suppress_config_dump
fluentd_configs:
input_udp_1514:
enabled: yes
config: |
<source>
@type syslog
@label @forward
port 1514
bind 127.0.0.1
tag syslog
severity_key severity
<parse>
message_format rfc5424
with_priority true
</parse>
</source>
input_udp_5140:
enabled: true
config: |
<source>
@type syslog
@label @haproxy
port 5140
bind 127.0.0.1
tag haproxy
severity_key severity
<parse>
message_format rfc3164
</parse>
</source>
outout_default:
enabled: yes
config: |
<label @forward>
<match **>
@type elasticsearch
host localhost
port 9200
scheme https
ssl_version TLSv1_2
user "logstash"
password "logstash"
with_transporter_log true
ca_file {{ opensearch_conf_dir }}/root-ca.pem
ssl_verify true
logstash_format true
verify_es_version_at_startup false
default_elasticsearch_version 7
<buffer>
timekey 1d
timekey_use_utc true
timekey_wait 10m
</buffer>
</match>
</label>
fluentd_gems:
- name: elasticsearch-transport
version: 7.13.3
state: present
- name: elasticsearch-api
version: 7.13.3
state: present
- name: elasticsearch
version: 7.13.3
state: present
- name: fluent-plugin-elasticsearch
version: 5.1.0
state: present
os_fluentd_flags:
FreeBSD: |
fluentd_flags="-p {{ fluentd_plugin_dir }} --log {{ fluentd_log_file }}"
Debian: |
TD_AGENT_LOG_FILE="{{ fluentd_log_file }}"
TD_AGENT_OPTIONS="-p {{ fluentd_plugin_dir }}"
STOPTIMEOUT=180
RedHat: |
TD_AGENT_LOG_FILE="{{ fluentd_log_file }}"
TD_AGENT_OPTIONS=""
OpenBSD: "--daemon /var/run/fluentd/fluentd.pid --config {{ fluentd_config_file }} -p {{ fluentd_plugin_dir }} --log {{ fluentd_log_file }}"
fluentd_flags: "{{ os_fluentd_flags[ansible_os_family] }}"
# _____________________________________________apt
apt_repo_keys_to_add:
- https://packages.treasuredata.com/GPG-KEY-td-agent
apt_repo_to_add:
- "deb http://packages.treasuredata.com/4/ubuntu/{{ ansible_distribution_release }}/ {{ ansible_distribution_release }} contrib"
# _____________________________________________redhat_repo
redhat_repo:
treasuredata:
baseurl: http://packages.treasuredata.com/4/redhat/$releasever/$basearch
gpgkey: https://packages.treasuredata.com/GPG-KEY-td-agent
Licence
Copyright (c) 2019 Tomoyuki Sakurai <[email protected]>
La permission d'utiliser, copier, modifier et distribuer ce logiciel pour tout
objectif, avec ou sans frais, est ici accordée, à condition que l'avis de copyright ci-dessus et cet avis de permission apparaissent dans toutes les copies.
LE LOGICIEL EST FOURNI "TEL QUEL" ET L'AUTEUR DÉCLINE TOUTES GARANTIES
EN CE QUI CONCERNE CE LOGICIEL, Y COMPRIS TOUTES GARANTIES IMPLICITES DE
COMMERCIALITÉ ET D'ADÉQUATION. EN AUCUN CAS, L'AUTEUR NE SAURAIT ÊTRE TENUE RESPONSABLE DE
TOUS DOMMAGES SPÉCIAUX, DIRECTS, INDIRECTS OU CONSÉCUTIFS, OU DE TOUS DOMMAGES
QUELCONQUES RÉSULTANT D'UNE PERTE D'UTILISATION, DE DONNÉES OU DE PROFITS, QUE CE SOIT DANS
LE CADRE D'UN CONTRAT, D'UNE NÉGLIGENCE OU D'AUTRE ACTION TORTUEUSE, DÉCOULANT DE
OU EN RELATION AVEC L'UTILISATION OU LA PERFORMANCE DE CE LOGICIEL.
Informations sur l'auteur
Tomoyuki Sakurai y@trombik.org
Ce README a été créé par qansible
ansible-galaxy install trombik.opensearch