====== Управление секретами в сети предприятия ======
* [[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...