Могу ли я предоставить учетные данные AWS через смонтированный каталог в локальный контейнер Docker, созданный sbt-native-packager

У нас есть несколько образов докеров, которые мы создаем с помощью sbt-native-packager, которые должны взаимодействовать с сервисами AWS. При их запуске вне AWS нам необходимо явно указать учетные данные.

Я знаю, что мы можем явно передавать переменные среды, содержащие учетные данные AWS. Это усложняет сохранение наших учетных данных в секрете. Один из вариантов - предоставить их через командную строку, обычно сохраняя их в нашей истории оболочки (да, я знаю, что этого можно избежать, добавив пробел в начало команды, но это легко забыть) и подвергнуть их более высокому риску случайного обмена копией / вставкой. Как вариант, мы можем предоставить их через env-файл. Но это подвергает нас возможной проверке их в системе контроля версий или непреднамеренной отправке на другой сервер.

Мы обнаружили, что идеальной практикой является монтирование нашего локального каталога ~/.aws/ в домашний каталог запущенного пользователя для контейнера докеров. Однако наши попытки заставить это работать с образами sbt-native-packager не увенчались успехом.

Одна уникальная деталь для образов sbt-native-packager (по сравнению с другими нашими) заключается в том, что они создаются с использованием docker ENTRYPOINT вместо CMD для запуска приложения. Я не знаю, имеет ли это отношение к проблеме.

Итак, вопрос: можно ли предоставить учетные данные AWS для контейнера докеров, созданного sbt-native-packager, путем монтирования папки учетных данных AWS с помощью параметров командной строки при запуске?


person James Matlik    schedule 11.10.2018    source источник


Ответы (2)


Проблема, с которой я столкнулся, была связана с разрешениями. Доступ к .aws файлам на моей машине очень ограничен, а пользователем по умолчанию в образе sbt-native-packager является daemon. У этого пользователя нет доступа для чтения моих файлов при установке в контейнер.

Я могу добиться желаемого поведения, добавив следующие флаги к моей команде запуска докера: -v ~/.aws/:/root/.aws/ --user=root

Я смог обнаружить это, используя флаг --entrypoint=ash при запуске, чтобы посмотреть на переменную среды HOME (место для монтирования папки /.aws/) и попытаться cat содержимое смонтированной папки.

Теперь мне просто нужно понять, к каким уязвимостям безопасности я открываюсь, запуская контейнеры докеров таким образом.

person James Matlik    schedule 11.10.2018

Я не совсем уверен, почему установка ~/.aws может быть проблемой - обычно это может быть связано с разрешениями на чтение в этом каталоге и разными UID между хост-системой и контейнером.

Тем не менее, я могу предложить несколько обходных путей:

  1. Используйте файл переменных среды вместо того, чтобы явно указывать их в командной строке. В docuer run это можно сделать, указав --env-file. На мой взгляд, это самый простой подход.

  2. Подключите другой файл учетных данных и укажите переменную среды AWS_CONFIG_FILE, чтобы указать его местоположение.

person shevron    schedule 11.10.2018
comment
Спасибо за напоминание об AWS_CONFIG_FILE. Когда я попытался использовать это, но все еще не сработало, я обнаружил, как попасть в работающий контейнер, чтобы посмотреть, что происходит. К сожалению, сообщения не регистрировались, когда SDK не мог получить доступ к этим файлам. - person James Matlik; 11.10.2018