Формирование и использование секретов
Во время работы с кластером, развернутым с помощью 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