Работа с паролями в кластере

При изменении паролей от систем хранения и баз данных нужно поменять соответствующие секреты в Kubernetes (Kubernetes Secrets) — объекты, которые хранят конфиденциальную информацию, такую как пароли и токены. Может также потребоваться перезапуск соответствующих приложений, чтобы они смогли повторно прочитать актуальные данные.

В случае с ClickHouse регистрационные данные обновляются через Consul — сервис, который хранит конфигурационные данные и позволяет централизованно управлять паролями и настройками.

Смена пароля пользователя ClickHouse

Чтобы обновить пароль пользователя ClickHouse:

  1. Измените пароль ClickHouse, выполнив следующий запрос в консоли ClickHouse:

    Пример 1. SQL-запрос
    ALTER USER <user> IDENTIFIED BY '<new_password>';

    Здесь:

    • <user> — имя пользователя.

    • <new_password> — новый пароль.

  2. Если требуется изменить пароль пользователя writer, обновите пароль в блоке <remote_servers> в конфигурации кластера.

  3. Обновите ключ Consul:

    1. Проверьте список существующих ключей.

      consul kv get
    2. Запишите новое значение в ключ, где хранится пароль, и проверьте обновление.

      consul kv put <path_to_key> <new_password>
      consul kv get <path_to_key>

      Здесь:

      • <path_to_key> — путь к ключу, где хранится пароль.

      • <new_password> — новый пароль.

Смена пароля PostgreSQL

Чтобы обновить пароль PostgreSQL:

  1. Подключитесь к кластеру с помощью Lens.

  2. Перейдите в раздел Workloads → Pods.

  3. Выберите под PostgreSQL и нажмите на кнопку терминала.

    Также вы можете подключиться к контейнеру PostgreSQL с помощью командной строки:

    kubectl exec -it -n <namespace> <postgresql_container> -- sh

    Здесь:

    • <namespace> — имя пространства имен, в котором установлен кластер.

    • <postgresql_container> — имя контейнера PostgreSQL.

  4. Подключитесь к базе данных.

    psql -U postgres -d auth
  5. Выполните запрос для обновления пароля.

    Пример 2. SQL-запрос
    ALTER USER <postgres_user> WITH PASSWORD '<new_password>';

    Здесь:

    • <postgres_user> — имя пользователя.

    • <new_password> — новый пароль.

    После смены пароля сервисы, использующие PostgreSQL, перестанут работать до обновления секретов в Kubernetes.
  6. Поменяйте секреты Kubernetes, содержащие пароль, выполнив следующие действия для каждого секрета:

    1. Откройте секрет для редактирования:

      kubectl -n <namespace> edit secret <secret_name>

      Здесь:

      • <namespace> — имя пространства имен, в котором установлен кластер.

      • <secret_name> — имя секрета: evo.core.global и evo.siem.global.

    2. Закодируйте пароль в Base64, например, командой:

      echo -n <new_password> | base64

      Здесь:

      • <new_password> — новый пароль.

    3. Замените в секрете значение ключа POSTGRES_PASSWORD на пароль, закодированный на предыдущем шаге.

    4. Проверьте, что значение ключа было обновлено, командой:

      kubectl -n <namespace> get secret <secret_name>

      Здесь:

      • <namespace> — имя пространства имен, в котором установлен кластер.

      • <secret_name> — имя секрета: evo.core.global и evo.siem.global.

  7. Перейдите в 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> — имя деплоймента.

  8. Проверьте состояние подов:

    kubectl -n <namespace> get pods

    Здесь:

    • <namespace> — имя пространства имен, в котором установлен кластер.

Смена секретного ключа пользователя MinIO

Чтобы обновить ключи пользователя MinIO:

  1. Измените ключи MinIO:

    После смены ключей сервисы, использующие MinIO, перестанут работать до обновления секретов в Kubernetes.
    1. Откройте секрет, выполнив команду:

      kubectl -n <namespace> get secret evo.siem.global

      Здесь:

      • <namespace> — имя пространства имен, в котором установлен кластер.

    2. Сохраните значение ключей S3_ACCESS_KEY и S3_SECRET_KEY.

    3. Раскодируйте значения ключей, выполнив для каждого ключа команду:

      echo "<key_in_b64>" | base64 -d

      Здесь:

      • <key_in_b64> — закодированное в Base64 значение ключа, сохраненное на предыдущем шаге.

    4. Зайдите в контейнер MinIO и измените пароль командами:

      kubectl exec -it -n <namespace> <minio_container> -- sh
      mc admin accesskey edit myminio <access_key> --secret-key "<new_secret_key>"

      Здесь:

      • <namespace> — имя пространства имен, в котором установлен кластер.

      • <minio_container> — имя контейнера MinIO.

      • <access_key> — расшифрованное на предыдущем шаге значение ключа доступа S3_ACCESS_KEY.

      • <new_secret_key> — новое значение секретного ключа.

  2. Поменяйте секреты Kubernetes, содержащие пароль, выполнив следующие действия для каждого секрета:

    1. Откройте секрет для редактирования:

      kubectl -n <namespace> edit secret <secret_name>

      Здесь:

      • <namespace> — имя пространства имен, в котором установлен кластер.

      • <secret_name> — имя секрета: evo.core.global и evo.siem.global.

    2. Закодируйте секретный ключ в Base64, например, командой:

      echo -n <new_secret_key> | base64

      Здесь:

      • <new_secret_key> — новое значение секретного ключа.

    3. Замените в секрете значение ключа S3_SECRET_KEY на значение, закодированное на предыдущем шаге.

    4. Проверьте, что значение ключа было обновлено, командой:

      kubectl -n <namespace> get secret <secret_name>

      Здесь:

      • <namespace> — имя пространства имен, в котором установлен кластер.

      • <secret_name> — имя секрета: evo.core.global и evo.siem.global.

  3. Подключитесь к кластеру с помощью Lens, перейдите в Workloads → Pods, выберите под MinIO и перезапустите его.

    Либо выполните в командной строке следующую команду:

    kubectl -n <namespace> rollout restart statefulset minio

    Здесь:

    • <namespace> — имя пространства имен, в котором установлен кластер.

  4. Проверьте состояние подов:

    kubectl -n <namespace> get pods

    Здесь:

    • <namespace> — имя пространства имен, в котором установлен кластер.