Рубрики
Uncategorized

Несколько извлеченных извлеченных извлеченных секретов хранения параметров AWS Parameter

Распределение нескольких уроков, изученных управлением несколькими тысячами секретов в магазине параметров AWS. Помечено с AWS, SSM, DEVOPS, Безопасность.

Распределение нескольких уроков, изученных управлением несколькими тысячами секретов в магазине параметров AWS.

В моем нынешнем концерте у нас есть 50+ услуг, ~ 6 + среды, а также грубое количество параметров 3.5K в нашей среде. Мы использовали для использования Chef:: EncryptedDatabags, когда мы использовали шеф-сервер. Несколько лет спустя мы мигрировали на использование хранилища. А потом через год мы наконец урегулированы на использование магазина параметра. Со временем мы выращивались к тонкостям управляющих секретов и доступа к секретам.

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

UI не так приятно использовать.

Один действительно раздражающий бит состоит в том, что я не могу легко найти параметры во всем магазине параметра. Например, я не могу искать все параметры, начиная с «DB_» I.E. * db_ *

Полезный обходной путь — сделать быстрый поиск * магазина параметра. Это требует получения всех параметров — но позволяет применять простое регулярное выражение на доступных путях, которые вы не можете сделать в UI. * Это немного медленно, но может получить быстрое предварительное просмотр секретов, которые у вас есть доступны

> aws ssm describe-parameters \
  --output text \
  | egrep '^PARAMETERS' \
  | awk '{print $5}' \
  | egrep $REGEX

/dev/myApp/foo
/dev/myApp/bar
...

Кто-нибудь знает лучшего способа сделать это?

Держите параметры подключения DB вместе как уникальные объекты.

Используйте конвенцию, как /$ env/базы данных/$ appdb/{хост, пользователь, пароль, порт, dbname} который должен включать все поля, необходимые для создания строки подключения ODBC

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

вот пример того, как вы можете сделать это в Bash

dbInfo=$(aws ssm get-parameters \
  --names "/dev/dbs/$dbName/database" \
  "/dev/dbs/$dbName/host" \
  "/dev/dbs/$dbName/password" \
  "/dev/dbs/$dbName/port" \
  "/dev/dbs/$dbName/user" \
  "/dev/dbs/$dbName/scheme" \
  --region $REGION \
  --with-decryption \
  --query Parameters[*].Value \
  --output text | tr "\t" " ")

function set_parameters {
  database="$1"
  database_host="$2"
  database_pass="$3"
  database_port="$4"
  database_scheme="$5"
  database_user="$6"
}

set_parameters $dbInfo

if [ "$database_scheme" = "mysql" ];
then
  MYSQL_PWD=$database_pass mysql -h $database_host -P $listen_port -u $database_user $database_database
else
  PGPASSWORD=$database_pass psql -h $database_host -p $listen_port -U $database_user -d $database_database
fi

придерживаться соглашения на именование

Это Конвенция, которую мы использовали для наших параметров, которые масштабировали ОК. У нас есть 10-20 баз данных, ~ 50 услуг, охватывающих 6+ среды, организованные с этой структурой.

/$environment_name/databases/$database_name/{host,port,pass,user}
                            /databags/$service_name/{all,my,server,creds}
                            /other_sensitive_info/{foo,bar,baz}

Мы одолжили Базы данных С наших дней с помощью Chef Cookbooks и зашифрованные базы данных. Он в основном просто означает, что есть куча параметров под ключами, принадлежащими к сервису.

Это позволяет нам охватывать доступ в несколько разных измерений через политику IAM. Можно сказать, что разработчик должен иметь доступ к секретам базы данных в среде Dev, но только секрет обслуживания в продуктах.

{
    "Effect": "Allow",
    "Action": [
        "ssm:GetParameters"
    ],
    "Resource": [
        "arn:aws:ssm:us-east-2:123456123:parameter/dev/databases/*",
        "arn:aws:ssm:us-east-2:123456123:parameter/prod/databags/myService/*"
    ]
}

Вы не можете набивать большие предметы в параметры

Мы использовали для использования Cookbook сертификата для установки сертификатов на наших хозяевах, которые требовали от нас, чтобы сохранить наши сертификаты, хранящиеся в этом формате

{
  "id": "mail",
  "cert": "-----BEGIN CERTIFICATE-----\nMail Certificate Here...",
  "key": "-----BEGIN PRIVATE KEY\nMail Private Key Here...",
  "chain": "-----BEGIN CERTIFICATE-----\nCA Root Chain Here..."
}

Но вы не можете начать это как JSON в параметр из-за Ограничения размера 4096 символов

Используйте этикетки/указатели, чтобы помочь вам повернуть пароли

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

Вы могли бы сделать что-то вроде

/dev/databags/my-service/current     = 2 (index of actual secret)
                        /1           = 'secret 2018'
                        /2           = 'secret 2019'

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

К счастью, Вы можете сделать это народно сейчас на AWS с этикетками по параметрам. Вращающиеся пароли также могут быть сделаны Использование менеджера Lambda и Secrets — проверить этот прохождение здесь

Паральный магазин сохраняет версии ваших параметров, но не если вы удалите их

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

Некоторые связанные инструменты, которые поддерживают параметр-магазин

тайно для экспорта секретов в вашу среду, написанные в Python — https://github.com/energyhub/secretly Параметр-магазин-EXEC — похож на тайно, написано в Go — https://github.com/cultureamp/parameter-store-exec COUND для внесения в конфигурация файлов — https://github.com/kelseyhightower/Confd. Как часть консула-шаблона — https://github.com/hellofresh/consul-template-plugin-ssm Палата для управления секретами, включая магазин параметра — https://github.com/segmentio/chamber

Надеюсь, что эти советы помогают, также заинтересованы в том, чтобы услышать, как другие люди работали в результате неприятностей Param-Store и/или видели с ним прохладной интеграции.

Было трудно выяснить, какие лучшие практики, когда дело доходит до DevOps на AWS. Я хотел бы помочь вам тоже понять это. Подписаться на мой список Чтобы получить эти обновления в вашем почтовом ящике.

Оригинал: «https://dev.to/intricatecloud/a-few-lessons-learned-using-aws-parameter-store-378c»