Поиск по сайту:

Не оставляйте пароли в своем коде; Вместо этого используйте диспетчер секретов AWS


AWS Secrets Manager упрощает работу с ключами доступа (например, учетными данными базы данных), сохраняя их удаленно и контролируя доступ к ним с помощью разрешений IAM. Это позволяет вам плавно чередовать ключи доступа и получать самые последние из них, когда это необходимо.

Что делает менеджер секретов?

Вот пример. Допустим, вы создаете сценарий сборки для своих серверов, который автоматизирует процесс установки, обычно для использования автоматического масштабирования и автоматического развертывания. Вам необходимо подключить WordPress к внешнему серверу MySQL.

Самым простым решением было бы сохранить пароль MySQL в виде открытого текста как часть скрипта сборки. Очевидно, что это не лучшая практика безопасности, и она не масштабируется за пределы одного экземпляра, управляемого одним сотрудником. Кроме того, если вы разделяете среды разработки и производства, этот секрет необходимо обновлять для каждой среды, что доставляет неудобства.

Лучшее решение — Secrets Manager. Вместо того, чтобы хранить пароль MySQL в открытом виде, вы сохраняете его в диспетчере секретов, а когда вам нужно его использовать, вы выполняете вызов API к диспетчеру секретов, который возвращает секрет. Это позволяет вам защитить доступ к вашим секретам с помощью ролей и разрешений IAM, что является гораздо лучшей системой, и вы уже используете ее, если ваша компания использует AWS.

Кроме того, поскольку Secrets Manager действует как единое авторитетное хранилище данных, он значительно упрощает ротацию секретов, что является важной частью постоянной безопасности.

Просто для ясности: Secrets Manager автоматически не делает обработку важных секретов тривиальной задачей. В конце концов, вы по-прежнему запрашиваете конфиденциальную информацию, которая будет храниться на диске или в памяти вашего сервера. Любой, кто может получить доступ к серверу, по-прежнему сможет получить доступ к секрету, и вам потребуются хорошие политики разрешений IAM, чтобы заблокировать доступ. Однако без Secrets Manager вы вообще не сможете контролировать этот доступ с помощью IAM и, возможно, важные ключи будут храниться в других местах, например, в легкодоступных репозиториях Git.

Secrets Manager можно использовать для хранения любых ключей, включая JSON. Однако он обычно используется для хранения учетных данных базы данных и поэтому имеет встроенную интеграцию с RDS, которая может автоматически настраивать и менять учетные данные для вас.

Как использовать менеджер секретов

Перейдите в консоль Secrets Manager и нажмите «Сохранить новый секрет».

Если вы настраиваете секрет для хранения учетных данных для RDS или любой другой службы БД AWS, вы можете выбрать его в качестве типа, ввести имя пользователя и пароль и выбрать базу данных, которую вы хотите использовать с этим секретом.

Если вы храните что-то еще, вам нужно выбрать «Другой тип секрета». Если вы храните ряд пар ключ-значение, вы можете ввести их здесь, но если у вас более сложная схема JSON, вы можете ввести все это в виде открытого текста на вкладке «Обычный текст».

Нажмите «Далее», дайте ему имя и любые теги, которые вы, возможно, захотите добавить в организационных целях.

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

Нажмите «Далее» и нажмите «Сохранить», чтобы создать секрет.

Доступ к секрету довольно прост. Если у вас установлен и настроен интерфейс командной строки AWS с пользователем или ролью, у которых есть разрешение на получение секрета, вы можете получить к нему доступ с помощью secretsmanager get-secrete-value. Это возвращает вывод JSON, поэтому вы, вероятно, захотите передать его в jq для обработки.

aws secretsmanager get-secret-value --secret-id Confidential_Info | jq

Это возвращает некоторые метаданные о вашей строке, а также саму строку в параметре SecretString . Он закодирован в одной строке, но вы можете использовать директиву jq fromjson, чтобы вернуть фактическое значение строки JSON.

| jq '.SecretString | fromjson'

Если вы извлекаете секреты очень часто (во время выполнения), вам следует использовать кеш на стороне клиента, чтобы не отправлять тысячи запросов API каждую секунду. AWS предоставляет несколько клиентских библиотек для работы с Secrets Manager, но вы всегда можете реализовать их самостоятельно на выбранном вами языке.

Если вы хотите автоматизировать создание секретов, вы можете сделать это с помощью create-secret:

aws secretsmanager create-secret --name <value> --secret-string <value>

Настройка доступа к IAM

Вам нужно настроить пользовательские политики IAM, чтобы предоставить доступ для чтения к отдельным секретам на основе имени ресурса Amazon (ARN). В консоли управления IAM создайте новую роль (или отредактируйте существующую роль вашего экземпляра EC2) и добавьте доступ «Чтение» для диспетчера секретов.

Ниже вы захотите добавить ARN для ограничения доступа. Введите секретный идентификатор и нажмите «Добавить».

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