Ідея полягає в тому, щоб розмістити всі наші чутливі дані [...]
Значення "всіх" у цьому реченні слід дуже ретельно проаналізувати перед реалізацією плану, який ви плануєте.
Сейф з відповіддю - дуже корисний інструмент, але його слід використовувати лише для зберігання таємниць, які є:
- Спеціально необхідні для розгортання
- Легко робиться марним для власників, які повинні не знати про них, але можуть незаконно "запам'ятати" їх (як правило, поза бортом)
Другий момент є критичним.
Багато людей, а можливо, і вся команда DevOps, матимуть доступ до пароля безвідмовних сховищ, а отже, і до всіх секретів.
Тому для всіх секретів, що зберігаються у сховищі, має бути умова, згідно з якою людина чи машина з несанкціонованим доступом до них не може використовувати жодних можливостей використовувати їх, якщо цього потрібно.
Конкретно кажучи, якщо ви використовуєте ansible для розгортання бази даних та її користувачів, ви можете зберігати паролі у сховищі, але вам доведеться бути дуже обережними (і, швидше за все, розглянути інше рішення), якщо ця послуга буде доступна в Інтернеті і без необхідності будь-якої автентифікації VPN!
Користувачі (DevOps), які піддаються дії секрету, повинні бути нездатні використовувати "запам'ятовані" паролі, якщо на них накладено один бар'єр безпеки (наприклад, скасовано доступ до VPN). Крім цього, слід також скасувати доступ до сховища вихідного коду (де зберігається сховище) перед зміною паролів.
За цих умов ангібійний склепіння є дуже корисним інструментом.
Намагання зберегти секрет, який може використовувати будь-яка людина чи машина в Інтернеті у сховищі, буде натомість помилкою (наприклад, облікові дані VPN користувачів).
Чи є якісь інші варіанти, який є найкращим (і безпечним) способом зберігання пароля "ansible-treult"
За умов попереднього пункту, я вважаю, що хорошою практикою буде:
- Зберігайте пароль сховища у зовнішньому захищеному сховищі (щось на зразок Vault від HashiCorp або будь-якого SaaS для управління обліковими даними)
- Дозволити доступ до зовнішнього елемента сховища DevOps (їм знадобиться пароль для тестування) та системі CI / CD або контролеру ansible
Дотримуйтесь умову використовувати секрети ! Ви не зможете переглянути зміни в секретах, і ви не зможете проглядати відповідні змінні у файлах секретів! Тож будьте ретельними від початку. Хороша умова - називати всі змінні, що зберігаються в ангібл-склепінні, з secret_
префіксом. Коли ви побачите щось на кшталт:
postgres.yml:
postgres_password: "{{ secret_postgres_password }}"
ви будете знати, що значення зберігається в ангібі.