Я развернул свое приложение Django в Elastic Beanstalk с намерением использовать его интерфейс конфигурации переменных среды для хранения ключей API вместо их хранения в моем источнике (как описано здесь https://stackoverflow.com/a/17878600).
После этого я обнаружил, что то, что Beanstalk называет переменными среды, на самом деле не является переменными среды оболочки (как упоминалось здесь https://stackoverflow.com/a/24564832/378638) и хранятся в экземпляре в файле конфигурации (как описано здесь https://stackoverflow.com/a/24566283/378638).
Мне это кажется проблемой безопасности. Разве это не противоречит цели сохранения секретных ключей от источника? Я понимаю, что их больше нет в репо, но они все еще доступны в экземпляре.
Я неправильно понимаю риск? Я сисадмин по наследству, поэтому извините, пожалуйста, за мое незнание. Должен ли я просто загрузить переменные Beanstalk как переменные среды оболочки через файл конфигурации и двигаться дальше, поскольку файл доступен только через root, или моя проблема верна? Спасибо.
Смысл хранить секреты вне исходного кода в том, чтобы они не попадали в исходный код. контроль. Это особенно полезно в проектах с открытым исходным кодом.
При развертывании не имеет значения, находится ли секрет в файле или в envvar. Важно то, что только пользователь ОС, в котором запущена ваша программа, может ее прочитать. Это значение по умолчанию для envvars, что удобно.
Root всегда может все прочитать. Таким образом, Amazon может знать ваши секретные ценности, если они хотят, потому что они являются корневыми.
Oни поддерживать дорогие аппаратные модули безопасности (HSM), которые сделают ваши ключи нечитаемыми. Конечно, они еще могли использовать HSM для расшифровки ваших данных, просто никогда не получите фактический ключ.
Так что либо вам нужно доверять Amazon, либо размещать вещи самостоятельно, либо размещать их вместе.