====== Управление секретами в сети предприятия ====== * [[https://habr.com/ru/companies/nixys/articles/572102/|HashiCorp Vault перехвален, а Mozilla SOPS вместе с KMS и Git неоправданно недооценены]] * [[https://habr.com/ru/articles/785052/comments/|Одноразовые пароли для доступа по ssh через HashiCorp Vault]] * [[https://www.civo.com/learn/managing-ssh-access-with-hashicorp-vault|Managing SSH access with Hashicorp Vault]] * [[https://habr.com/ru/companies/magnit/articles/745814/|Как создавать Kubernetes секреты из Vault, используя external-secrets-operator]] * [[https://habr.com/ru/companies/nixys/articles/545188/|Инъекция секретов из Vault в поды используя сайдкары Kubernetes]] * [[https://habr.com/ru/articles/653927/|Используем Hashicorp Vault для хранения секретов]] ===== Реклама ===== * Что бы хранить что-то в секрете, или управлять доступом, нужно знать другой секрет. Но, как это сделать в автоматизированных системах предприятия? Вот откуда берутся пароли в файлах конфигурации/скриптах и не зашифрованные приватные ключи. Теперь все это окажется в прошлом, как решить дилемму "курицы и яйца", при использовании чувствительных данных в пайплайнах предприятия, Вы узнаете на нашем вебинаре ===== Техническое задание ===== * Развернуть HashiCorp Vault и Mozilla Sops для работы с секретами предприятия * Интегрировать их с пайплайнами Ansible, Gitlab и Kubernetes ===== Запись вебинара ===== * Тэги: ===== Шаг 1. Что у нас есть, для начала ===== * [[DevOps1. Основные инструменты]]: DNS + Vagrant (nodeN), GitLab + Runner + Ansible * [[Сервис Ansible#Роль OpenVPN сервера]] * GitLab CI/CD [[Инструмент GitLab#Пример shell ansible]] ===== Шаг 2. ansible-vault ===== * [[Сервис Ansible#ansible-vault]] * GitLab [[Инструмент GitLab#Пример shell ansible]] vagrant@nodeN:~$ sudo rm /etc/ssl/private/server.key vagrant@nodeN:~$ sudo less /etc/ssl/private/server.key Недостатки: - если сменится пароль на узлы, надо перешифровывать значения в inventory - ключ шифрования используется в "явном" виде и может быть "украден" * Подготовка к следующему шагу: ~/openvpn1# ansible-vault decrypt openvpn1/files/server.key ===== Шаг 3. Hashicorp Vault KV secrets engine ===== * [[Hashicorp Vault]] * [[Hashicorp Vault#KV secrets engine]] * [[Hashicorp Vault#Vault policy]] для /secret/data/ansible/openvpn1 * [[Hashicorp Vault#Vault token]] * [[Сервис Ansible#Ansible и Hashicorp Vault]] Недостатки: - логин/пароль "лежат" в Vault в "открытом" виде (и передается в нашей инсталляции тоже:) - зная токен, их можно "украсть" с любой системы, откуда доступен Vault ===== Шаг 4. Hashicorp Vault Vault auth token role ===== * [[Hashicorp Vault#Vault auth token role]] * Проводим curl тестирование из 3-го шага с server и gate * Удаляем "небезопасный" [[Hashicorp Vault#Vault token]] * Можно расширить bound_cidrs для auth/token/roles/ansible-openvpn1-role и убедиться, что это не повлияет на существующий токен * Используем этот токнен в inventory решения [[Сервис Ansible#Ansible и Hashicorp Vault]] Недостатки: - файл с приватным ключом остался в открытом виде ===== Шаг 5. Hashicorp Vault Transit secrets engine ===== * [[Hashicorp Vault#Transit secrets engine]] * [[Mozilla Sops]] и знакомство с UI Hashicorp Vault для редактирования [[Hashicorp Vault#Vault policy]] * [[Сервис Ansible#Ansible и SOPS]] * GitLab [[Инструмент GitLab#Пример shell ansible]] ===== Шаг 6. Удаление чувствительных данных (паролей, ключей) из репозитория ===== * [[Сервис Git#Удаление чувствительных данных (паролей, ключей) из репозитория]] ===== Подготовка к вебинару ===== * Восстановить снимок, или Удалить проект в GitLab и все остальное docker stop my-vault docker rm my-vault rm -rf /tmp/openvpn1/ rm /usr/local/bin/sops apt purge jq python3-hvac git-filter-repo ===== Черновик ===== ==== kubeN вместо nodeN ==== server:~/openvpn1# cat openvpn1/tasks/main.yml - name: Ping ping: - name: Copy file server.key copy: src: server.key dest: /etc/ssl/private/server.key mode: '0600' server:~/openvpn1# cat inventory.yaml ... ansible_ssh_user: student ansible_ssh_pass: password ansible_sudo_pass: password ... server:~/openvpn1# cat openvpn1.yaml ... #when: node_nets...