Работа с паролями в кластере
При изменении паролей от систем хранения и баз данных нужно поменять соответствующие секреты в Kubernetes (Kubernetes Secrets) — объекты, которые хранят конфиденциальную информацию, такую как пароли и токены. Может также потребоваться перезапуск соответствующих приложений, чтобы они смогли повторно прочитать актуальные данные.
В случае с ClickHouse регистрационные данные обновляются через NATS Key/Value — сервис, который хранит конфигурационные данные и позволяет централизованно управлять паролями и настройками.
Смена пароля пользователя ClickHouse
Чтобы обновить пароль пользователя ClickHouse:
-
Измените пароль ClickHouse, выполнив следующий запрос в консоли ClickHouse:
Пример 1. SQL-запросALTER USER <user> IDENTIFIED BY '<new_password>';
Здесь:
-
<user>
— имя пользователя. -
<new_password>
— новый пароль.
-
-
Если требуется изменить пароль пользователя writer, обновите пароль в блоке
<remote_servers>
в конфигурации кластера. -
Подключитесь к терминалу управляющего узла кластера.
-
Подключитесь к терминалу пода
nats-main-box
, выполнив следующую команду:kubectl exec -itn <namespace> deployment/nats-main-box -c nats-box -- sh
Здесь:
-
<namespace>
— имя пространства имен, в котором установлен кластер.
-
-
Получите пути к ключам, в которых хранятся пароли ClickHouse, выполнив следующую команду:
nats kv ls siem-clickhouse
Пример путей к ключам, в которых хранятся пароли ClickHouse
space-main/siem-clickhouse1/owner space-main/siem-clickhouse1/reader space-main/siem-clickhouse1/writer
-
Измените значение пароля по ключу, где он хранится, выполнив следующую команду:
nats kv put siem-clickhouse <path_to_key> <new_password>
Здесь:
-
<path_to_key>
— путь к ключу, где хранится пароль. -
<new_password>
— новый пароль.
-
-
Проверьте, что пароль изменился, выполнив следующую команду:
nats kv get siem-clickhouse <path_to_key> --raw
Здесь:
-
<path_to_key>
— путь к ключу, где хранится пароль.
-
Смена пароля PostgreSQL
Чтобы обновить пароль PostgreSQL:
-
Подключитесь к кластеру с помощью Lens.
-
Перейдите в раздел Workloads → Pods.
-
Выберите под PostgreSQL и нажмите на кнопку терминала.
Также вы можете подключиться к контейнеру PostgreSQL с помощью командной строки:
kubectl exec -it -n <namespace> <postgresql_container> -- sh
Здесь:
-
<namespace>
— имя пространства имен, в котором установлен кластер. -
<postgresql_container>
— имя контейнера PostgreSQL.
-
-
Подключитесь к базе данных.
psql -U postgres -d auth
-
Выполните запрос для обновления пароля.
Пример 2. SQL-запросALTER USER <postgres_user> WITH PASSWORD '<new_password>';
Здесь:
-
<postgres_user>
— имя пользователя. -
<new_password>
— новый пароль.
После смены пароля сервисы, использующие PostgreSQL, перестанут работать до обновления секретов в Kubernetes. -
-
Поменяйте секреты Kubernetes, содержащие пароль, выполнив следующие действия для каждого секрета:
-
Откройте секрет для редактирования:
kubectl -n <namespace> edit secret <secret_name>
Здесь:
-
<namespace>
— имя пространства имен, в котором установлен кластер. -
<secret_name>
— имя секрета:evo.core.global
иevo.siem.global
.
-
-
Закодируйте пароль в Base64, например, командой:
echo -n <new_password> | base64
Здесь:
-
<new_password>
— новый пароль.
-
-
Замените в секрете значение ключа
POSTGRES_PASSWORD
на пароль, закодированный на предыдущем шаге. -
Проверьте, что значение ключа было обновлено, командой:
kubectl -n <namespace> get secret <secret_name>
Здесь:
-
<namespace>
— имя пространства имен, в котором установлен кластер. -
<secret_name>
— имя секрета:evo.core.global
иevo.siem.global
.
-
-
-
Перейдите в Workloads → Deployments и перезапустите деплойменты кластера:
-
evo.core.access
; -
evo.core.mf-feed
; -
evo.siem.active-list-manager
; -
evo.siem.dashboard-manager
; -
evo.siem.driver-manager
; -
evo.siem.entity-relation-manager
; -
evo.siem.event-model-manager
; -
evo.siem.event-storage-manager
; -
evo.siem.expertise-manager
; -
evo.siem.integration-manager
; -
evo.siem.query-log-manager
; -
evo.siem.secret-manager
; -
evo.siem.settings-manager
; -
evo.siem.template-manager
.
Либо выполните в командной строке команду для каждого деплоймента:
kubectl -n <namespace> rollout restart deployment <deployment_name>
Здесь:
-
<namespace>
— имя пространства имен, в котором установлен кластер. -
<deployment_name>
— имя деплоймента.
-
-
Проверьте состояние подов:
kubectl -n <namespace> get pods
Здесь:
-
<namespace>
— имя пространства имен, в котором установлен кластер.
-