Skip to content

Формирование и использование секретов

Во время работы с кластером, развернутым с помощью Hadoop (MWS Data Slon), понадобится множество различных параметров, которые нежелательно хранить в общем доступе в целях безопасности. К таким данным, например, относятся различные логины, пароли, Kerberos-keytabs, SSH-ключи и др.

Для хранения подобных сущностей (в дальнейшем будем именовать их секретами) рекомендуется использовать HashiCorp Vault.

Шаг пайплайна кластера get-secrets

Любой пайплайн Gitlab CI, который используется для разворачивания и настройки кластера Hadoop (MWS Data Slon), начинается с шага get-secrets. На этом шаге обеспечивается загрузка:

  • всех чувствительных данных из HashiCorp Vault с сохранением в файл secrets.yml, используемый в последующих стадиях CI/CD

  • ssh-ключа и имени пользователя ansible, от имени которого происходит работа ansible-процедур (настройка remote_user)

  • конфигурационного файла k8s.config для взаимодействия с кластером k8s

  • ssh-ключей пользователя hdfs

Для аутентификации в Vault используется метод approle с указанием параметров:

  • VAULT_ROLE_ID_ACCESS_ANSIBLEOPS - имя (или идентификатор) роли, используемой для аутентификации методом approle

  • VAULT_SECRET_ID_ACCESS_ANSIBLEOPS - идентификатор секрета, используемого для аутентификации методом approle

  • VAULT_ADDR - URL для HashiCorp Vault (задаётся на уровне GitLab CI/CD Variables)

Используемые переменные среды и файлы:

  • ANSIBLE_USER_VAULTPATH - путь в Vault до значений username и ssh_key_private, которые используются для установки переменных среды ANSIBLE_REMOTE_USER и ANSIBLE_PRIVATE_KEY_FILE соответственно (см. параметры private_key_file и remote_user для настройки ansible). Задаётся на уровне CI/CD кластера.

  • ANSIBLE_IMAGE - докер-образ, включающий ansible и прочие зависимости, используемый для шагов CI/CD

  • DOH_REPO_URI - URI проекта дистрибутива в GitLab

  • DOH_VERSION - используемая версия (ветка/тэг) дистрибутива (задаётся в конфигурации кластера)

Указание секретов на уровне кластера

В примере репозитория кластера показано, как можно использовать секреты без использования HashiCorp Vault. Для этого необходимо вручную создать файл secrets.yml, в котором указаны все необходимые параметры.

Если же Vault используется, то в файле .gitlab-ci.yml необходимо указать переменные:

  • DOH_VERSION - описано в разделе выше

  • DOH_CLUSTER_VAULTPATH - путь Vault до раздела с кластером

  • DOH_AD_USER_VAULTPATH - путь Vault до раздела с данными Active Directory (AD) пользователя

  • DOH_MON_USER_VAULTPATH - путь Vault до раздела с данными пользователя-мониторинга

  • ANSIBLE_USER_VAULTPATH - описано в разделе выше

  • K8S_CONFIG_VAULTPATH - путь Vault конфигурации Kubernetes