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