Рубрики
Uncategorized

Простой секретный обмен с Gopass и Summon

Хранение и разделение секретов не должно быть сложным. Tagged Security, DevOps, ShowDev, OpenSource.

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

Такие решения, как 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»