mirror of
https://github.com/Security-Onion-Solutions/securityonion.git
synced 2026-05-09 12:52:38 +02:00
614f32c5e0
The old flow had two writers for each per-minion Telegraf password
(so-minion wrote the minion pillar; postgres.auth regenerated any
missing aggregate entries). They drifted on first-boot and there was
no trigger to create DB roles when a new minion joined.
Split responsibilities:
- pillar/postgres/auth.sls (manager-scoped) keeps only the so_postgres
admin cred.
- pillar/telegraf/creds.sls (grid-wide) holds a {minion_id: {user,
pass}} map, shadowed per-install by the local-pillar copy.
- salt/manager/tools/sbin/so-telegraf-cred is the single writer:
flock, atomic YAML write, PyYAML safe_dump so passwords never
round-trip through so-yaml.py's type coercion. Idempotent add, quiet
remove.
- so-minion's add/remove hooks now shell out to so-telegraf-cred
instead of editing pillar files directly.
- postgres.telegraf_users iterates the new pillar key and CREATE/ALTERs
roles from it; telegraf.conf reads its own entry via grains.id.
- orch.deploy_newnode runs postgres.telegraf_users on the manager and
refreshes the new minion's pillar before the new node highstates,
so the DB role is in place the first time telegraf tries to connect.
- soup's post_to_3.1.0 backfills the creds pillar from accepted salt
keys (idempotent) and runs postgres.telegraf_users once to reconcile
the DB.
340 lines
8.7 KiB
Plaintext
340 lines
8.7 KiB
Plaintext
base:
|
|
'*':
|
|
- ca
|
|
- global.soc_global
|
|
- global.adv_global
|
|
- docker.soc_docker
|
|
- docker.adv_docker
|
|
- influxdb.token
|
|
- logrotate.soc_logrotate
|
|
- logrotate.adv_logrotate
|
|
- ntp.soc_ntp
|
|
- ntp.adv_ntp
|
|
- patch.needs_restarting
|
|
- patch.soc_patch
|
|
- patch.adv_patch
|
|
- sensoroni.soc_sensoroni
|
|
- sensoroni.adv_sensoroni
|
|
- telegraf.soc_telegraf
|
|
- telegraf.adv_telegraf
|
|
- telegraf.creds
|
|
- versionlock.soc_versionlock
|
|
- versionlock.adv_versionlock
|
|
- soc.license
|
|
|
|
'* and not *_desktop':
|
|
- firewall.soc_firewall
|
|
- firewall.adv_firewall
|
|
- nginx.soc_nginx
|
|
- nginx.adv_nginx
|
|
|
|
'salt-cloud:driver:libvirt':
|
|
- match: grain
|
|
- vm.soc_vm
|
|
- vm.adv_vm
|
|
|
|
'*_manager or *_managersearch or *_managerhype':
|
|
- match: compound
|
|
- node_data.ips
|
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/elasticsearch/auth.sls') %}
|
|
- elasticsearch.auth
|
|
{% endif %}
|
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/postgres/auth.sls') %}
|
|
- postgres.auth
|
|
{% endif %}
|
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/kibana/secrets.sls') %}
|
|
- kibana.secrets
|
|
{% endif %}
|
|
- secrets
|
|
- manager.soc_manager
|
|
- manager.adv_manager
|
|
- logstash.nodes
|
|
- logstash.soc_logstash
|
|
- logstash.adv_logstash
|
|
- soc.soc_soc
|
|
- soc.adv_soc
|
|
- kibana.soc_kibana
|
|
- kibana.adv_kibana
|
|
- kratos.soc_kratos
|
|
- kratos.adv_kratos
|
|
- hydra.soc_hydra
|
|
- hydra.adv_hydra
|
|
- redis.nodes
|
|
- redis.soc_redis
|
|
- redis.adv_redis
|
|
- influxdb.soc_influxdb
|
|
- influxdb.adv_influxdb
|
|
- postgres.soc_postgres
|
|
- postgres.adv_postgres
|
|
- elasticsearch.nodes
|
|
- elasticsearch.soc_elasticsearch
|
|
- elasticsearch.adv_elasticsearch
|
|
- elasticfleet.soc_elasticfleet
|
|
- elasticfleet.adv_elasticfleet
|
|
- elastalert.soc_elastalert
|
|
- elastalert.adv_elastalert
|
|
- backup.soc_backup
|
|
- backup.adv_backup
|
|
- minions.{{ grains.id }}
|
|
- minions.adv_{{ grains.id }}
|
|
- kafka.nodes
|
|
- kafka.soc_kafka
|
|
- kafka.adv_kafka
|
|
- hypervisor.nodes
|
|
- hypervisor.soc_hypervisor
|
|
- hypervisor.adv_hypervisor
|
|
- stig.soc_stig
|
|
|
|
'*_sensor':
|
|
- healthcheck.sensor
|
|
- strelka.soc_strelka
|
|
- strelka.adv_strelka
|
|
- zeek.soc_zeek
|
|
- zeek.adv_zeek
|
|
- bpf.soc_bpf
|
|
- bpf.adv_bpf
|
|
- suricata.soc_suricata
|
|
- suricata.adv_suricata
|
|
- minions.{{ grains.id }}
|
|
- minions.adv_{{ grains.id }}
|
|
- stig.soc_stig
|
|
|
|
'*_eval':
|
|
- node_data.ips
|
|
- secrets
|
|
- healthcheck.eval
|
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/elasticsearch/auth.sls') %}
|
|
- elasticsearch.auth
|
|
{% endif %}
|
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/postgres/auth.sls') %}
|
|
- postgres.auth
|
|
{% endif %}
|
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/kibana/secrets.sls') %}
|
|
- kibana.secrets
|
|
{% endif %}
|
|
- kratos.soc_kratos
|
|
- kratos.adv_kratos
|
|
- elasticsearch.soc_elasticsearch
|
|
- elasticsearch.adv_elasticsearch
|
|
- elasticfleet.soc_elasticfleet
|
|
- elasticfleet.adv_elasticfleet
|
|
- elastalert.soc_elastalert
|
|
- elastalert.adv_elastalert
|
|
- manager.soc_manager
|
|
- manager.adv_manager
|
|
- soc.soc_soc
|
|
- soc.adv_soc
|
|
- kibana.soc_kibana
|
|
- kibana.adv_kibana
|
|
- strelka.soc_strelka
|
|
- strelka.adv_strelka
|
|
- hydra.soc_hydra
|
|
- hydra.adv_hydra
|
|
- redis.soc_redis
|
|
- redis.adv_redis
|
|
- influxdb.soc_influxdb
|
|
- influxdb.adv_influxdb
|
|
- postgres.soc_postgres
|
|
- postgres.adv_postgres
|
|
- backup.soc_backup
|
|
- backup.adv_backup
|
|
- zeek.soc_zeek
|
|
- zeek.adv_zeek
|
|
- bpf.soc_bpf
|
|
- bpf.adv_bpf
|
|
- suricata.soc_suricata
|
|
- suricata.adv_suricata
|
|
- minions.{{ grains.id }}
|
|
- minions.adv_{{ grains.id }}
|
|
|
|
'*_standalone':
|
|
- node_data.ips
|
|
- logstash.nodes
|
|
- logstash.soc_logstash
|
|
- logstash.adv_logstash
|
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/elasticsearch/auth.sls') %}
|
|
- elasticsearch.auth
|
|
{% endif %}
|
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/postgres/auth.sls') %}
|
|
- postgres.auth
|
|
{% endif %}
|
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/kibana/secrets.sls') %}
|
|
- kibana.secrets
|
|
{% endif %}
|
|
- secrets
|
|
- healthcheck.standalone
|
|
- kratos.soc_kratos
|
|
- kratos.adv_kratos
|
|
- hydra.soc_hydra
|
|
- hydra.adv_hydra
|
|
- redis.nodes
|
|
- redis.soc_redis
|
|
- redis.adv_redis
|
|
- influxdb.soc_influxdb
|
|
- influxdb.adv_influxdb
|
|
- postgres.soc_postgres
|
|
- postgres.adv_postgres
|
|
- elasticsearch.nodes
|
|
- elasticsearch.soc_elasticsearch
|
|
- elasticsearch.adv_elasticsearch
|
|
- elasticfleet.soc_elasticfleet
|
|
- elasticfleet.adv_elasticfleet
|
|
- elastalert.soc_elastalert
|
|
- elastalert.adv_elastalert
|
|
- manager.soc_manager
|
|
- manager.adv_manager
|
|
- soc.soc_soc
|
|
- soc.adv_soc
|
|
- kibana.soc_kibana
|
|
- kibana.adv_kibana
|
|
- strelka.soc_strelka
|
|
- strelka.adv_strelka
|
|
- backup.soc_backup
|
|
- backup.adv_backup
|
|
- zeek.soc_zeek
|
|
- zeek.adv_zeek
|
|
- bpf.soc_bpf
|
|
- bpf.adv_bpf
|
|
- suricata.soc_suricata
|
|
- suricata.adv_suricata
|
|
- minions.{{ grains.id }}
|
|
- minions.adv_{{ grains.id }}
|
|
- stig.soc_stig
|
|
- kafka.nodes
|
|
- kafka.soc_kafka
|
|
- kafka.adv_kafka
|
|
|
|
'*_heavynode':
|
|
- elasticsearch.auth
|
|
- logstash.nodes
|
|
- logstash.soc_logstash
|
|
- logstash.adv_logstash
|
|
- elasticsearch.soc_elasticsearch
|
|
- elasticsearch.adv_elasticsearch
|
|
- redis.soc_redis
|
|
- redis.adv_redis
|
|
- zeek.soc_zeek
|
|
- zeek.adv_zeek
|
|
- bpf.soc_bpf
|
|
- bpf.adv_bpf
|
|
- suricata.soc_suricata
|
|
- suricata.adv_suricata
|
|
- strelka.soc_strelka
|
|
- strelka.adv_strelka
|
|
- minions.{{ grains.id }}
|
|
- minions.adv_{{ grains.id }}
|
|
|
|
'*_idh':
|
|
- idh.soc_idh
|
|
- idh.adv_idh
|
|
- minions.{{ grains.id }}
|
|
- minions.adv_{{ grains.id }}
|
|
|
|
'*_searchnode':
|
|
- logstash.nodes
|
|
- logstash.soc_logstash
|
|
- logstash.adv_logstash
|
|
- elasticsearch.nodes
|
|
- elasticsearch.soc_elasticsearch
|
|
- elasticsearch.adv_elasticsearch
|
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/elasticsearch/auth.sls') %}
|
|
- elasticsearch.auth
|
|
{% endif %}
|
|
- redis.nodes
|
|
- redis.soc_redis
|
|
- redis.adv_redis
|
|
- minions.{{ grains.id }}
|
|
- minions.adv_{{ grains.id }}
|
|
- stig.soc_stig
|
|
- kafka.nodes
|
|
- kafka.soc_kafka
|
|
- kafka.adv_kafka
|
|
|
|
'*_receiver':
|
|
- logstash.nodes
|
|
- logstash.soc_logstash
|
|
- logstash.adv_logstash
|
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/elasticsearch/auth.sls') %}
|
|
- elasticsearch.auth
|
|
{% endif %}
|
|
- redis.soc_redis
|
|
- redis.adv_redis
|
|
- minions.{{ grains.id }}
|
|
- minions.adv_{{ grains.id }}
|
|
- kafka.nodes
|
|
- kafka.soc_kafka
|
|
- stig.soc_stig
|
|
- elasticfleet.soc_elasticfleet
|
|
- elasticfleet.adv_elasticfleet
|
|
|
|
'*_import':
|
|
- node_data.ips
|
|
- secrets
|
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/elasticsearch/auth.sls') %}
|
|
- elasticsearch.auth
|
|
{% endif %}
|
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/postgres/auth.sls') %}
|
|
- postgres.auth
|
|
{% endif %}
|
|
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/kibana/secrets.sls') %}
|
|
- kibana.secrets
|
|
{% endif %}
|
|
- kratos.soc_kratos
|
|
- kratos.adv_kratos
|
|
- elasticsearch.soc_elasticsearch
|
|
- elasticsearch.adv_elasticsearch
|
|
- elasticfleet.soc_elasticfleet
|
|
- elasticfleet.adv_elasticfleet
|
|
- elastalert.soc_elastalert
|
|
- elastalert.adv_elastalert
|
|
- manager.soc_manager
|
|
- manager.adv_manager
|
|
- soc.soc_soc
|
|
- soc.adv_soc
|
|
- kibana.soc_kibana
|
|
- kibana.adv_kibana
|
|
- backup.soc_backup
|
|
- backup.adv_backup
|
|
- hydra.soc_hydra
|
|
- hydra.adv_hydra
|
|
- redis.soc_redis
|
|
- redis.adv_redis
|
|
- influxdb.soc_influxdb
|
|
- influxdb.adv_influxdb
|
|
- postgres.soc_postgres
|
|
- postgres.adv_postgres
|
|
- zeek.soc_zeek
|
|
- zeek.adv_zeek
|
|
- bpf.soc_bpf
|
|
- bpf.adv_bpf
|
|
- suricata.soc_suricata
|
|
- suricata.adv_suricata
|
|
- strelka.soc_strelka
|
|
- strelka.adv_strelka
|
|
- minions.{{ grains.id }}
|
|
- minions.adv_{{ grains.id }}
|
|
|
|
'*_fleet':
|
|
- node_data.ips
|
|
- backup.soc_backup
|
|
- backup.adv_backup
|
|
- logstash.nodes
|
|
- logstash.soc_logstash
|
|
- logstash.adv_logstash
|
|
- elasticfleet.soc_elasticfleet
|
|
- elasticfleet.adv_elasticfleet
|
|
- minions.{{ grains.id }}
|
|
- minions.adv_{{ grains.id }}
|
|
- stig.soc_stig
|
|
|
|
'*_hypervisor':
|
|
- minions.{{ grains.id }}
|
|
- minions.adv_{{ grains.id }}
|
|
- stig.soc_stig
|
|
|
|
'*_desktop':
|
|
- minions.{{ grains.id }}
|
|
- minions.adv_{{ grains.id }}
|
|
- stig.soc_stig
|
|
|