Секреты являются фундаментальной, но сложной проблемой в развертывании программного обеспечения.
Такие решения, как 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»