Не храните секреты в коде и логах

Использование AWS Security для разработчиков

Rahul Singh

Technical Product Manager

Не всё конфиденциальное — секрет

Три типа строк

  • Секрет: посторонний может выдать себя за вас
  • Конфиденциальные данные: раскрывается информация о человеке
  • Конфигурация: взять нечего

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

Использование AWS Security для разработчиков

Не всё конфиденциальное — секрет

Три типа строк

  • Секрет: посторонний может выдать себя за вас
  • Конфиденциальные данные: раскрывается информация о человеке
  • Конфигурация: взять нечего

Два термина для персональных данных

  • PII: персональные идентификационные данные
  • PHI: защищённая медицинская информация

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

Использование AWS Security для разработчиков

Четыре пути утечки секрета

Секрет в работающей системе может попасть вовне четырьмя путями: метка 1 — в исходный код и его историю, метка 2 — в переменные окружения, метка 3 — в логи приложения, метка 4 — в вывод ошибок и трассировки. Все четыре пути сходятся в блоке с подписью «кто-то может это прочитать».

  1. Исходный код и его история
  2. Переменные окружения
Использование AWS Security для разработчиков

Четыре пути утечки секрета

Секрет в работающей системе может попасть вовне четырьмя путями: метка 1 — в исходный код и его историю, метка 2 — в переменные окружения, метка 3 — в логи приложения, метка 4 — в вывод ошибок и трассировки. Все четыре пути сходятся в блоке с подписью «кто-то может это прочитать».

  1. Исходный код и его история
  2. Переменные окружения
  3. Логи приложения
  4. Вывод ошибок и трассировки
Использование AWS Security для разработчиков

Зашифровано — не значит скрыто

Выбор, который кажется безопасным

  • Шифрование в состоянии покоя — всегда
  • Ключ AWS KMS, по умолчанию управляется AWS

Переменная окружения функции Lambda проходит по двум путям. На диске она зашифрована ключом AWS KMS — путь показан зелёным. Через API вызов GetFunctionConfiguration возвращает значение в открытом виде — путь показан красным. Оба пути сходятся в примечании: защищён только один из них.

Использование AWS Security для разработчиков

Зашифровано — не значит скрыто

Выбор, который кажется безопасным

  • Шифрование в состоянии покоя — всегда
  • Ключ AWS KMS, по умолчанию управляется AWS

Что возвращает GetFunctionConfiguration

  • Значение в открытом виде

Ответ про хранение — не про доступ

Переменная окружения функции Lambda проходит по двум путям. На диске она зашифрована ключом AWS KMS — путь показан зелёным. Через API вызов GetFunctionConfiguration возвращает значение в открытом виде — путь показан красным. Оба пути сходятся в примечании: защищён только один из них.

Использование AWS Security для разработчиков

Какое хранилище выбрать и почему

Два сервиса, у каждого своя задача

  • Secrets Manager: создан для секретов
  • Parameter Store: создан для конфигурации, параметр SecureString шифруется ключом KMS

Диаграмма-спектр. Слева — Secrets Manager, справа — Systems Manager Parameter Store, между ними четыре горизонтальные шкалы. На каждой — своя метка: метка 1 крайняя слева, метка 2 левее центра, метка 3 по центру, метка 4 крайняя справа; на концах четвёртой шкалы — значения стоимости, рядом примечание: решающий фактор — ротация.

Использование AWS Security для разработчиков

Какое хранилище выбрать и почему

Два сервиса, у каждого своя задача

  • Secrets Manager: создан для секретов
  • Parameter Store: создан для конфигурации, параметр SecureString шифруется ключом KMS

Четыре фактора выбора

  1. Управляемая ротация
  2. Доступ между аккаунтами
  3. Версионирование
  4. Стоимость

Диаграмма-спектр. Слева — Secrets Manager, справа — Systems Manager Parameter Store, между ними четыре горизонтальные шкалы. На каждой — своя метка: метка 1 крайняя слева, метка 2 левее центра, метка 3 по центру, метка 4 крайняя справа; на концах четвёртой шкалы — значения стоимости, рядом примечание: решающий фактор — ротация.

Использование AWS Security для разработчиков

Читайте заново, кешируйте ненадолго

Работающий процесс вызывает GetSecretValue в хранилище секретов (метка 1), используя ограниченную роль (метка 2) — доступ только к одному ARN секрета плюс kms:Decrypt, — и хранит полученное значение в кеше в памяти (метка 3) перед обращением к базе данных или API партнёра.

  1. Вызов GetSecretValue при запуске
  2. Роль, ограниченная одним ARN секрета плюс kms:Decrypt
Использование AWS Security для разработчиков

Читайте заново, кешируйте ненадолго

Работающий процесс вызывает GetSecretValue в хранилище секретов (метка 1), используя ограниченную роль (метка 2) — доступ только к одному ARN секрета плюс kms:Decrypt, — и хранит полученное значение в кеше в памяти (метка 3) перед обращением к базе данных или API партнёра.

  1. Вызов GetSecretValue при запуске
  2. Роль, ограниченная одним ARN секрета плюс kms:Decrypt
  3. Кеширование значения в памяти

Бесконечный кеш — и ротация всё ломает

Использование AWS Security для разработчиков

Ротация меняет значение без вашего ведома

Почему четыре шага, а не одна замена

  • Новое значение проверяется до того, как им начнут пользоваться
  • Одна замена сразу сломала бы всех клиентов

Три колонки сверху вниз: шаги ротации, метка и ваш кеш. Secrets Manager выполняет createSecret, setSecret и testSecret, затем пунктирная линия отмечает момент, когда finishSecret переносит метку. Выше этой линии метка AWSCURRENT равна старому значению, и кеш верен; ниже — метка AWSCURRENT равна новому значению, а тот же кеш заштрихован красным. Диаграмму завершают два решения: короткое время жизни кеша и обновление при ошибке аутентификации.

Использование AWS Security для разработчиков

Ротация меняет значение без вашего ведома

Почему четыре шага, а не одна замена

  • Новое значение проверяется до того, как им начнут пользоваться
  • Одна замена сразу сломала бы всех клиентов

Четыре шага, одна передача

  • AWSPENDING, AWSCURRENT, AWSPREVIOUS

Три колонки сверху вниз: шаги ротации, метка и ваш кеш. Secrets Manager выполняет createSecret, setSecret и testSecret, затем пунктирная линия отмечает момент, когда finishSecret переносит метку. Выше этой линии метка AWSCURRENT равна старому значению, и кеш верен; ниже — метка AWSCURRENT равна новому значению, а тот же кеш заштрихован красным. Диаграмму завершают два решения: короткое время жизни кеша и обновление при ошибке аутентификации.

Использование AWS Security для разработчиков

Ротация меняет значение без вашего ведома

Почему четыре шага, а не одна замена

  • Новое значение проверяется до того, как им начнут пользоваться
  • Одна замена сразу сломала бы всех клиентов

Четыре шага, одна передача

  • AWSPENDING, AWSCURRENT, AWSPREVIOUS

Кеш ничего не узнаёт сам

  • Время жизни — минуты, затем повторное чтение
  • Обновление при ошибке аутентификации

Три колонки сверху вниз: шаги ротации, метка и ваш кеш. Secrets Manager выполняет createSecret, setSecret и testSecret, затем пунктирная линия отмечает момент, когда finishSecret переносит метку. Выше этой линии метка AWSCURRENT равна старому значению, и кеш верен; ниже — метка AWSCURRENT равна новому значению, а тот же кеш заштрихован красным. Диаграмму завершают два решения: короткое время жизни кеша и обновление при ошибке аутентификации.

Использование AWS Security для разработчиков

Маскируйте и скрывайте, но сохраняйте отладку

Одна необработанная строка лога с ID запроса, полным номером карты и токеном, обведена красным. Ниже — те же три поля после обработки: ID запроса не тронут, номер карты замаскирован до последних четырёх цифр, токен заменён меткой об удалении, а под ними примечание: данных достаточно для отладки.

Очищайте данные перед записью

  • Маскирование: форма сохранена, значение скрыто
Использование AWS Security для разработчиков

Маскируйте и скрывайте, но сохраняйте отладку

Одна необработанная строка лога с ID запроса, полным номером карты и токеном, обведена красным. Ниже — те же три поля после обработки: ID запроса не тронут, номер карты замаскирован до последних четырёх цифр, токен заменён меткой об удалении, а под ними примечание: данных достаточно для отладки.

Очищайте данные перед записью

  • Маскирование: форма сохранена, значение скрыто
  • Редактирование: значение удалено, оставлена метка
Использование AWS Security для разработчиков

Маскируйте и скрывайте, но сохраняйте отладку

Одна необработанная строка лога с ID запроса, полным номером карты и токеном, обведена красным. Ниже — те же три поля после обработки: ID запроса не тронут, номер карты замаскирован до последних четырёх цифр, токен заменён меткой об удалении, а под ними примечание: данных достаточно для отладки.

Очищайте данные перед записью

  • Маскирование: форма сохранена, значение скрыто
  • Редактирование: значение удалено, оставлена метка

Дежурному нужна конфигурация, постороннему — всё остальное

Использование AWS Security для разработчиков

Давайте потренируемся!

Использование AWS Security для разработчиков

Preparing Video For Download...