Секреты являются фундаментальной, но сложной проблемой в развертывании программного обеспечения.
Такие решения, как KeepAssx просты в использовании, но довольно непрактично, когда дело доходит до автоматизации.
Более сложные варианты, такие как Hashicorp Vault чрезвычайно мощные, но труднее настроить и поддерживать.
Когда дело доходит до надежного хранения и обмена паролями в команде, трудно придумать более простое и эффективное решение, чем GIT и GNUPG вместе взятые.
Пасс это сценарий оболочки, который делает именно это. Внутри репозитория GIT пройти пароли в отдельных файлах, зашифрованных для всех частных ключей GNUPG в команде. Он имеет CLI для манипулирования паролями, добавлением новых записей или поиска через существующие пароли.
Тем не менее, Pass весьма ограничен в своих функциях, поэтому несколько лет спустя родился другой проект, чтобы обеспечить новую реализацию Go of Pass. Его название: просто Gopass Анкет
Установка
Gopass предоставляется как двоичные файлы, которые вы можете скачать со страницы релизов на GitHub Анкет
Функции
Вот некоторые из функций, которые делают Gopass отличным инструментом.
Несколько креплений
В то время как Пасс
Позволяет вам иметь один репозиторий GIT с вашими паролями, GoPass позволяет создавать несколько репозиториев, называемых «креплениями», что очень полезно, когда вы хотите поделиться разными секретами с разными людьми:
$ gopass mounts gopass (/home/raphink/.password-store) ├── c2c (/home/raphink/.password-store-c2c) ├── perso (/home/raphink/.password-store-perso) └── terraform (/home/raphink/.password-store-terraform)
Gopass использует префикс для доступа к секретам в креплениях, поэтому Terraform/Puppet/C2C
на самом деле относится к секрету, хранящемуся в /home/raphink/.password-store-terraform/puppet/c2c.gpg
Анкет
Несколько пользователей
Каждый репозиторий GIT может быть установлен для шифрования паролей для нескольких клавиш GNUPG.
.gpg-id
Файл в корне каждого репозитория содержит список общедоступных ключей для использования для шифрования и .public-keys/
Справочник хранит копию каждого ключа, что позволяет сотрудникам легко импортировать их в свой Keyring, прежде чем они смогут начать шифрующие пароли для команды.
Нечеткий поиск
Gopass помогает вам найти записи, когда ключ, который вы дали, не соответствует точному известному пути:
$ gopass jenkins [ 0] c2c/c2c_aws/jenkins-c2c [ 1] c2c/c2c_mgmtsrv/freeipa/c2c-jenkins-swarm [ 2] c2c/c2c_mgmtsrv/freeipa/jenkins-test-users [ 3] perso/Devel/jenkins-ci.org [ 4] terraform/aws/jenkins-c2c Found secrets - Please select an entry [0]:
Структурированные секреты
При расшифровке пароля GoPass анализирует контент в две разные части: пароль и документ YAML. Например, содержание секрета может выглядеть так:
foo -------- key1: value1 another_key: bar: baz
Пароль
Первая строка контента — это пароль
. Если это все, что вас интересует, вы можете использовать Gopass Show -Password
Чтобы получить это:
$ gopass show --password perso/test foo
Запрос ключей
Когда вторая часть контента (строки 2 и следующие) является действительным документом YAML, вы можете запросить эти значения, предоставив ключ, например:
$ gopass show perso/test key1 value1
Начиная с GOPASS 1.9.3, вы также можете запросить подказки, используя либо точку, либо нотацию.
$ gopass show perso/test another_key.bar baz $ gopass show perso/test /another_key/bar baz
Это делает его чрезвычайно мощным для хранения нескольких областей в том же секрете.
TOTP
GoPass позволяет хранить ключи TOTP вместе с паролями. Например, у вас может быть следующий секрет, хранящийся в Terraform/service.io/api
:
WPTmU`>bb
В дополнение к получению каждого поля с соответствующим ключом, вы также можете генерировать токены TOTP с GOPASS TOTP
:
$ gopass totp terraform/service.io/api 568000 lasts 18s |------------==================|
Интеграции
GOPASS может быть легко интегрирован в проекты для развертывания или задач CI/CD.
Вызов
Самый простой способ интегрировать Gopass, вероятно, — использовать Призыв Анкет
Призыв — это инструмент, который динамически раскрывает переменные среды со значениями, извлеченными из различных секретных магазинов. Gopass
является одним из возможных поставщиков.
Настраивать
Настройка его использования Gopass
довольно просто. Мы используем простую обертку под названием Summon-Gopass
, который должен быть на вашем пути:
#!/bin/sh gopass show $(echo "${@}"|tr : \ )
Вы также можете просто сделать Summon-Gopass
Символическая ссылка на ваш Гопас
Бинарные, но в этом случае не сработают.
использование
Призыв позволяет предоставить локальный Secrets.yml
Файл, который определяет, какие переменные среды вы хотите определить, и как найти значения.
Вот простой пример Secrets.yml
Файл с использованием секрета, который мы определили ранее:
SERVICE_URL: !var terraform/service.io/api url USER: !var terraform/service.io/api username SERVICE_PASSWORD: !var terraform/service.io/api password
Вы можете проверить эту настройку, выполнив следующую команду в каталоге, содержащем Secrets.yml
:
$ summon env
Выход должен содержать 3 переменных со значениями, хранящимися в GOPASS.
Разоблачение файлов
Хотя приведенный выше формат позволяет выявлять простые секреты в качестве переменных, он не очень практичен, когда вам нужны секреты, раскрытые в виде файлов.
Призыв покрывает эту потребность, однако, используя Файл
флаг. Например:
SSH_KEY: !var:file terraform/service.io/ssh private_key
Если Terraform/service.io/ssh
Секрет в Gopass, чьи private_key
Поле YAML содержит закрытый ключ SSH, затем вызовет извлечет этот секрет, поместите его во временный файл (в /dev/shm
по умолчанию) и установите Ssh_key
переменная с пути к файлу. После возвращения команды временный файл будет удален.
Затем вы можете использовать такой Secrets.yml
Файл с помощью:
summon sh -c 'ssh -i $SSH_KEY user@service'
Другим полезным примером является хранение конфигурации кластера Kubernetes в GOPASS, например:
-------- apiVersion: v1 clusters: - cluster: server: https://k8s.example.com name: k8s contexts: - context: cluster: k8s namespace: default user: default-cluster-admin name: default-admin current-context: default-admin kind: Config preferences: {} users: - name: default-cluster-admin user: token: averylongtoken
Со следующим Secrets.yml
файл:
KUBECONFIG: !var:file path/to/secret
Затем вы можете поработать над кластером Kubernetes с kubectl
с использованием:
$ summon kubectl
Терраформ интеграция
Простой способ передать переменные Terraform — объявить их и использовать Призыв
Чтобы пройти значения:
TF_VAR_var1: !var terraform/project1/secret1 field1
Затем вы можете запустить Призыв Terraform
динамически передать эти секреты терраформу.
Другая возможность — использовать Camptocamp’s Terraform Pass Provider который позволяет получить и устанавливать пароли в Gopass Nangy в Terraform:
provider "pass" { store_dir = "/srv/password-store" # defaults to $PASSWORD_STORE_DIR refresh_store = false # do not call `git pull` } # Store a value into the Gopass store resource "pass_password" "test" { path = "secret/foo" password = "0123456789" data = { zip = "zap" } } # Retrieve password at another_secret/bar to be used in Terraform code data "pass_password" "test" { path = "another_secret/bar" }
Поставщик раскрывает секрет следующим свойствам:
Путь
: Путь к секретупароль
: Секретный пароль (первая строка контента)данные
: Структура (карта) данных YAML в содержаниитело
: Содержание, найденное в строках 2 и следующих, если он не может быть проанализирован как yamlПолный
: Полный содержание (все строки) секрета
Интеграция Иера
Самый стандартный способ хранения секретов в Иере — использовать hiera-eyaml
, который сохраняет секретные значения, зашифрованные внутри файлов YAML, используя либо клавишу PKCS7 (по умолчанию), либо несколько клавиш GNUPG (при использовании hiera-eyaml-gpg
).
Если ваши пароли уже хранятся в Gopass, вы можете интегрировать это в Hiera.
Camptocamp/Hiera-Pass
модуль Предоставляет две бэкэнды Hiera для извлечения ключей либо в виде полных секретов GOPASS, либо в виде ключей внутри секретов.
Оригинал: «https://dev.to/camptocamp-ops/simple-secret-sharing-with-gopass-and-summon-40jk»