Давайте узнаем, как связать секреты с ролями в IAM с помощью Chamber!
Устали управлять переменными среды в вашей команде / машинах / что угодно? Хотите, чтобы они были распределены и привязаны к ролям IAM? Попробуем сделать это с камерой.
Настройка камеры
Примечание: эти инструкции по установке применимы к macOS. установка камеры должна быть такой же в Linux, хотя хранилище AWS будет отличаться в зависимости от вашей системы. См. Инструкции в файлах readmes.
Прежде чем мы начнем с камеры, вам необходимо создать ключ KMS с псевдонимом parameter_store_key
, который будет использоваться камерой.
Если вы используете Terraform, вы можете просто использовать эти блоки ресурсов:
Загрузочная камера (есть много проблем с использованием go
для установки, как описано в файле readme).
$: curl -LOs https://github.com/segmentio/chamber/releases/download/v2.3.2/chamber-v2.3.2-darwin-amd64
Переименуйте двоичный файл с помощью mv:
$: mv chamber-v2.3.2-darwin-amd64 chamber
А затем сделайте его исполняемым:
$: chmod 755 chamber
Вам может потребоваться sudo для копирования файла, и вам может потребоваться
chown -R ${whoami}:admin /usr/local/bin
заранее, в зависимости от вашей версии macOS или версии, изначально установленной на вашем компьютере. Мне приходилось делать это на моей рабочей машине, но не на моем личном ноутбуке. К сожалению, я не помню, какие версии начинались.
Скопируйте файл в папку bin:
$: cp chamber /usr/local/bin
Возможно, вам потребуется перезагрузить терминал сейчас, и тогда which chamber
должен вернуть /usr/local/bin/chamber
.
Теперь нам нужно установить aws-vault, который передает правильный профиль в камеру (среди некоторых других интересных функций, которые вы должны проверить).
$: brew cask install aws-vault
Добавьте свой профиль по умолчанию в aws-vault или любой другой профиль, который вы используете в качестве «корневого» профиля. Вы также можете изменить default
на любое значение для вызова этого профиля в aws-vault:
$: aws-vault add default
Вставьте свои ключи доступа к AWS и секретные ключи доступа в запросы, и пора проверить этого плохого парня! Я использую другой профиль AWS с предполагаемой ролью, хотя вы также можете просто использовать здесь свой профиль по умолчанию.
$: aws-vault exec otherProfile —- aws s3 ls
Должны быть указаны сегменты в otherProfile
. Если у вас нет сегментов S3, вы можете попробовать что-нибудь вроде aws iam list-roles
Не стесняйтесь заменять otherProfile
любым другим role_arn
подобным профилем, который у вас есть в вашем файле учетных данных, он будет работать.
А теперь можно написать секрет:
$: aws-vault exec otherProfile —- chamber write $SERVICE $KEY $VALUE
Где $SERVICE
- произвольный идентификатор (IE dw
для хранилища данных или web
для вещей, связанных с веб-сайтом), $KEY
- это то, что вы хотите, чтобы секрет был вызван и на что ссылались (подробнее об этом позже), а $VALUE
- фактическое значение секрета.
Пример:
$: aws-vault exec otherProfile —- chamber write dw TF_VAR_DATABASE_USERNAME myUsername
Итак, теперь я могу прочитать это значение:
$: aws-vault exec otherProfile —- chamber read dw TF_VAR_DATABASE_USERNAME Key Value Version LastModified User tf_var_database_username myUsername 1 04–18 14:29:47 arn:aws:sts::12345….
Из сказанного следует отметить одно: секретное имя (ключ) будет храниться в нижнем регистре. Когда вы его вытащите, он будет преобразован в верхний регистр. Не используйте секретные ключи с учетом регистра!
Фактическое использование вещи
Первоначально я нашел камеру, когда искал хороший способ обработки переменных Terraform в команде, и он очень хорошо решил эту проблему. Некоторые из них немного специфичны для Terraform (ну, Terragrunt), но они показывают, как вы на самом деле используете камеру, так что не пропускайте это!
В приведенном выше примере вы заметите TF_VAR
. Это связано с тем, что Terraform считывает переменные из среды, если они доступны, и обозначает их префиксом TF_VAR_
.
Итак, если у вас есть это в variables.tf
:
variable “DATABASE_USERNAME” {}
Terraform попытается прочитать переменную среды TF_VAR_DATABASE_USERNAME
при выполнении плана или применении.
В этом нам помогает камера в том, что для этого нам не нужно устанавливать переменные среды в нашем локальном окружении. камера временно загрузит их, если мы запустим через нее нашу команду:
$: aws-vault exec otherProfile —- chamber exec dw —- terragrunt plan
Это передает наш профиль otherProfile
в камеру, которая загружает переменные камеры (из хранилища параметров AWS в другой учетной записи профиля) во время выполнения terragrunt plan
. И что очень важно: их не существует на хост-машине после. Это означает, что ваш .zshrc
не обязательно должен состоять из 200 строк разных ключей API для того приложения React, которое вы пытались отладить в прошлом году, как и ваш товарищ по команде. И когда этот ключ API обновляется, происходит одно централизованное обновление для всей команды. И доступ ограничен. И данные зашифрованы. Намного лучше, чем отправлять сообщения через Slack!
Вам также, вероятно, следует установить несколько псевдонимов для своих профилей, чтобы вам не приходилось каждый раз вводить эту большую длинную команду.
$: alias chmbrop='aws-vault exec otherProfile —- chamber'
Тогда вы просто сделаете chmbrop exec dw —- terragrunt plan
. Или, может быть, вы называете все это псевдонимом 🤷♀
Дополнительный контент:
- Отраслевой прогноз на 2019 год
- Лучшие практики для бессерверной разработки
- Бессерверный CI / CD
- Бессерверные веб-приложения - AWS v GCP
- Бессерверное влияние, скорость разработчика
- Путеводитель, Первый бессерверный проект
Что делает Serverless Guru?
Serverless Guru помогает компаниям создавать масштабируемые и экономичные приложения в облаке. Мы помогаем обучать компании тому, как использовать IAC, бессерверные и облачные сервисы. Мы помогаем перенести существующие приложения в облако и оптимизировать существующие приложения в облаке, чтобы сделать их более рентабельными. Мы являемся партнером по бессерверной разработке и партнером-консультантом AWS.
Что мы упустили?
Когда вы оставляете свой ответ, обязательно оставьте комментарий ниже или напишите свой ответ @serverlessgurux в Twitter.
Даллас Слотер
Старший облачный архитектор - Serverless Guru
Увидимся в следующий раз! 😃
Если вы хотите узнать больше о Serverless Guru, подпишитесь на нас в Medium, Twitter, Instagram, Facebook или LinkedIn!