====== Управление секретами в сети предприятия ====== * [[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 ===== Запись вебинара ===== * Ютуб: https://youtu.be/-bK7e7IodWI * Рутуб: https://rutube.ru/video/39004cb2231017de5a32e9ae74c7e7b9/ * Вк: https://vkvideo.ru/video-2190892_456239499 * Тэги: Ansible, Hashicorp, Vault, Git, Gitlab, CI/CD, transit, secrets, engine ===== Шаг 1. Что у нас есть, для начала ===== * [[DevOps1. Основные инструменты]]: DNS + Vagrant (nodeN), GitLab + Runner + Ansible * [[Сервис Ansible#Роль OpenVPN сервера]] * GitLab CI/CD [[Инструмент GitLab#Пример shell ansible]] ===== Шаг 2. ansible-vault ===== vagrant@node3:~$ sudo rm /etc/ssl/private/server.key ~/openvpn1# ansible-playbook openvpn1.yaml -i inventory.yaml -e "variable_host=test_nodes" vagrant@node3:~$ sudo less /etc/ssl/private/server.key * [[Сервис Ansible#ansible-vault]] vagrant@node1:~$ sudo rm /etc/ssl/private/server.key * GitLab [[Инструмент GitLab#Пример shell ansible]] vagrant@node1:~$ 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#Поиск чувствительных данных (паролей, ключей) в репозитории]] * [[Сервис Git#Удаление чувствительных данных (паролей, ключей) из репозитория]] * Обсудить [[Пакет OpenSSL#Создание сертификата сервиса, подписанного CA]] * Показать [[Технология Vagrant#Provision с использованием внешних скриптов]] ===== Вопросы? ===== ===== Подготовка к вебинару ===== * Восстановить снимок, или Удалить проект в 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...