Я искал в Интернете повсюду, пытаясь найти лучший ответ на этот вопрос. Где лучше всего хранить учетные данные веб-сайта и ключи API?

Есть много вариантов, но ни один из них не дал мне того уровня удовлетворения, которого я ищу. Я мог бы хранить учетные данные, такие как имена пользователей и пароли, в файле web.config, но тогда мне пришлось бы учитывать, как я буду хранить их в системе управления версиями, а также риски, связанные с сохранением их в виде простого текста.

Конечно, я мог бы зашифровать этот web.config перед развертыванием, но у меня все еще есть проблема с контролем версий. Это просто не сработает.

Я мог бы сохранить учетные данные и ключи API в базе данных. Это немного улучшенное решение, но опять же… как мне сохранить строку подключения к базе данных и учетные данные для этой базы данных за пределами базы данных, чтобы разрешить подключение к ней?

Я мог бы использовать проверку подлинности Windows, но что, если мой стек изменится или не поддерживает проверку подлинности Windows? Мне также все еще нужно подумать о шифровании моей базы данных и учетных данных или ключей API, чтобы они не хранились в виде простого текста. И затем что, если я захочу проверить одно из этих значений, мне также придется его расшифровать…. омг, что за боль в заднице…

Настоящая правда заключается в том, что не существует простого или лучшего способа хранения учетных данных веб-сайта и ключей API… пока не появился AWS Secrets Manager.

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

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

new AmazonSecretsManagerClient(RegionEndpoint.GetBySystemName(region));

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

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

К счастью, AWS предлагает решение для кэширования, которое позволяет вам один раз извлечь секреты, а затем кэшировать их на стороне сервера. Это позволяет избежать необходимости опрашивать AWS секрет каждый раз, когда это необходимо, и значительно снижает затраты. Спасибо АВС! О, и это также очень легко реализовать:

new SecretsManagerCache(client);

И когда вы будете готовы получить секрет от AWS:

var secret = await cache.GetSecretString(secretId);

AWS Secrets Manager также предлагает несколько других приятных преимуществ. Вы можете автоматизировать смену паролей для сервисов AWS, таких как RDS, Redshift и DocumentDB, и, конечно же, вы получаете безопасность, которую обеспечивает использование AWS. Есть также некоторые фантастические функции аудита, моя любимая из которых заключается в том, что когда пароль удаляется, он хранится в течение 7 дополнительных дней, и управляющие стороны уведомляются об удалении.Никаких аварий!

Универсальный AWS Secrets Manager — это фантастическое решение проблемы «Как я могу управлять своими учетными данными для своих приложений». Стоимость очень минимальна при использовании в сочетании с функцией кэширования, а общая сложность реализации решения минимальна. Если вы ищете решение нового поколения для управления конфиденциальными данными приложений, я настоятельно рекомендую AWS Secrets Manager.

Первоначально опубликовано на http://thehardestwork.com 19 ноября 2020 г.