Являются ли переменные окружения Elastic Beanstalk подходящим местом для хранения секретных значений?

15

Я развернул свое приложение Django в Elastic Beanstalk с намерением использовать его интерфейс конфигурации переменных среды для хранения моих ключей API вместо их хранения в моем источнике (как описано здесь /programming//a/17878600 ).

После этого я обнаружил, что то, что Beanstalk называет переменными среды, на самом деле не является переменными среды оболочки (как упомянуто здесь /programming//a/24564832/378638 ) и хранится на экземпляре в файле конфигурации (как описано здесь /programming//a/24566283/378638 ).

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

Я неправильно понимаю риск? Я сисадмин по наследству, поэтому прошу прощения за мое невежество здесь. Стоит ли просто загружать переменные Beanstalk как переменные среды оболочки через файл конфигурации и двигаться дальше, поскольку файл доступен только через root, или моя проблема актуальна? Спасибо.

М. Келлер
источник

Ответы:

12

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

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

Root всегда может прочитать все. Таким образом, Amazon может знать ваши секретные значения, если они хотят, потому что они root.

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

Так что либо вам нужно доверять Amazon, либо самим размещать вещи, либо общаться.

Нил Макгиган
источник