Pull to refresh

Comments 28

Спасибо за пост. Не нашел причины замены ansible-vault на новую консольную утилиту.

Посмотрел бы как вы из такого конфиг-файла будете значения выгребать. Я решение нашёл.

password: !vault |
$ANSIBLE_VAULT;1.1;AES256
61373536353963313739366536643661313861663266373130373730666634343337356536333664
3365393033623439356364663537353365386464623836640a356464633264626330383232353362
63613135373638393665663962303530323061376432333931306161303966633338303565666337
6465393837636665300a633732313730626265636538363339383237306264633830653665343639
30353863633137313866393566643661323536633666343837623130363966613363373962343630
34386234633236363363326436666630643937313630346230386538613735366431363934316364
37346337323833333165386534353432386663343465333836643131643237313262386634396534
38316630356530626430316238383364376561393637363262613666373836346262666536613164
66316638343162626631623535323666643863303231396432666365626536393062386531623165
63613934323836303536613532623864303839313038336232616134626433353166383837643165
643439363835643731316238316439633039
Это немного другое: тут представлена `encrypted string`, которая получается примерно таким образом:
ansible-vault encrypt_string "SuperSecretPassword" --name "password" --vault-password-file=~/.vault_password

В статье же речь идет о том, как обрабатывается типичный `secrets.yaml` с которым работа происходит напрямую — шифруется весь файл, а не отдельные значения.

Я из "дано" не понял юзкейса. Можете развернуть мысль, как и когда именно применяется данная утилита в вашем пайплайне? Т.е. описать пайплайн

Кому-то просто не хочется в какой-то джобе ставить питон с анисблом ради банального decrypt.

А паскаль хочется? Ну и если уже ключевые куски алгоритма в Ansible найдены, то весь Ansible уже и не нужен? Т.е., выдираем нужные куски, делаем из них свой маленький питоновский пакет с консольной точкой входа, и получается тоже вроде как консольная утилита (типа pip.exe, mypy.exe) размером 100 килобайт, кстати. Ну, да, питон нужен...

Так паскаль не ставится — билд процесс отдельно. Замечание с запаковкой python в самораспаковывающийся исполняемый файл — да, возможно, но все равно зачем ?

Я говорил не про самораспаковывающийся выполняемый файл, а про модуль (который ставится pip'ом) с так называемой консольной точкой входа. Питон, при этом, да, конечно нужен, но где его сейчас нет?

но где его сейчас нет?

Там, где он не нужен?

Ну, я предлагал лишь способ избавления от Ansible… Нет, так нет.

Паскаль вам в пайплайн ставить не нужно, а нужно только бинарь.


Однако… Этот бинарь кто-то должен собирать, мейнтенить, тестировать и выкладывать в хранилище артефактов. Минимум ещё один git-репозиторий, ещё один pipeline/workflow/job, плюс нестандартная зависимость.


Короче, не убеждает.

Целевое место применения утилиты — сборочные агенты. Соответственно, предлагаемый вариант использования — в составе образов, которые оптимизируются на минимальный размер. То есть если нужен доступ к секретам, закрытым ansible-vault, но не нужен Ansible.
К сожалению, в моём случае конкретика вся под NDA, но в целом история очень простая: все внедряемые системы обязаны иметь поддержку RBAC для целей контроля доступа и аудита. Соответственно, сборочному конвейеру требуются креды для хранилища артефактов, анализатора качества кода, статического анализатора, ишью-трекера, вики, бота для мессенджера, почты… В общем, всего этого слишком много для того, чтобы в открытом виде складывать в переменные гитлаба, в которых до сих пор не завезли толковый RBAC — вот и решил посмотреть, что можно сделать в варианте «прочесть секрет без питона и ансибла».

Побуду адвокатом дьявола — а в чем практическая польза (кроме «я сделал, потому что могу»)?
Как ускорились пайплайны с учетом уменьшения размера образов?

Если коллеги-безопасники одобрят затаскивание этой истории в периметр — сможем померить ;-) а пока польза предполагаемая.

Ну, насчёт всего ansible понятно. А python-то на агентах есть?

А зачем? Может быть, а может и не быть ) например, деплоим в кубернетес — в образе будет helm, kubectl, kustomize. Зачем там ещё питон (хотя он там может быть, конечно)

Не обязательно. Образы обычно оптимизируются по размеру.

Образы обычно оптимизируются по размеру

ну, ради справедливости — тот же UBI наверняка на 500МБ со всеми свителками-перделками. А 200МБ или 300МБ — особо ускорения не дает. Зато вот гемор с поддержкой того же alpine очень даже неиллюзорен

Очень странный метод.


Хинт: gitlab поддерживает file variables. Делаете одну переменную вида


export FOO=foo
export BAR=bar
export FOOBAR=foobar

и потом его source.


таким образом можно десятки килобайт прокачивать и не взрываться мозгом.

Это немасштабируемо. Когда нужен один секрет или два — менеджить это можно, когда их сотня-другая? Тогда и возникает желание их подставить в гит.
Дополнительно — переменные гитлаба и их изменение никак не отслеживается. Возможно, где-то есть логи аудита самого гитлаба, но обычным смертным они недоступны. А если хранить переменные в самом гите — вот тебе и аудит, и история изменения. Только шифрование надежное нужно

Это масштабируемо в разумных пределах. Если же вы хотите человеческий аудит доступа к секретам, то берите hashicorp'овый vault, он для этого и сделан.

Все равно не решается проблема попадания секретов в vault.
Vault — это хранилка. А не менеджилка секретов.


Если же вы хотите человеческий аудит доступа к секретам

Ещё раз — не аудит доступа, а аудит изменения. Как бы почти одно и тоже, но по факту — очень разные вещи

Да, я в курсе, что ты этим хочешь доказать? Что не нужно какое-то промежуточное решение между gitlab переменными/ansible vault и hashicorp vault?
Hashicorp Vault — неплохое решение, с этим никто не спорит. И на определенном уровне зрелости команд и процессов он становится необходим. Но до этого момента вполне можно пользоваться sops / ansible-vault :/


Соб-но, настоящая статья и является примером того, как несложно напилить полезный инструментарий для этого.

Не большая экзотика, чем Pascal в 2021. Насчет "не умеет в Windows" — странная претензия от создателя "пользователи Windows должны страдать". :) Умеет (или не умеет — вопрос точки зрения) это решение точно также, как и Ansible, собственно.


Мой пойнт был лишь в том, что странно начинать пилить свой собственный велосипед почти с нуля при наличии уже готовых и неплохо ездящих моделей, которые решают ту же задачу.

Sign up to leave a comment.

Articles