Как установить учетные данные AWS для пользовательских www-данных для приложения Django с помощью NGINX - PullRequest
0 голосов
/ 24 января 2019

У меня есть приложение Django, работающее на сервере Linux под NGINX. «Пользователь» для приложения Django - www-data. В этом приложении я пытаюсь подключиться к AWS IOT, и для этого я считаю, что пакет AWS boto3 пытается найти учетные данные AWS здесь: ~/.aws/credentials. Проблема в том, что для пользователя www-data такого пути нет! Когда я подключаюсь к серверу (используя свое настоящее имя пользователя) и пытаюсь запустить скрипт, который подключается к AWS, он подключается просто отлично. Допустим, мое имя пользователя "Джо". Действительно, существует файл /home/joe/.aws/credentials, который содержит правильные учетные данные. Вот почему скрипт работает нормально, когда я запускаю от имени пользователя "joe". Но когда приложение Django запущено, оно не работает, потому что нет www-данных логина, то есть нет файла /home/www-data/.aws/credentials.

Я понимаю, что AWS boto3 позволяет нам установить переменную окружения, чтобы указать нестандартный путь к файлу учетных данных. Эта переменная env AWS_SHARED_CREDENTIALS_FILE, а также есть AWS_CONFIG_FILE.

Однако я не знаю, как задать переменную среды в Django для пользователя www-data, чтобы boto3 теперь мог использовать эту переменную среды для указания пути к учетным данным AWS.

Кто-нибудь знает, как это сделать? Обратите внимание, что это производственная среда, поэтому я не могу использовать какие-либо хитрости / хаки на локальном сервере.

Ответы [ 2 ]

0 голосов
/ 29 июня 2019

Если вы запускаете приложение Django из экземпляров EC2, рекомендуется связать роль IAM с экземпляром.

0 голосов
/ 26 июня 2019

У меня была точно такая же проблема, но в контейнере докера и с apache вместо NGINX.Для контейнера мы можем сделать следующее:

  • Редактировать / etc / apache2 / envvars, где живут параметры среды для apache:

    echo "export AWS_SHARED_CREDENTIALS_FILE=/root/.aws/credentials" >> /etc/apache2/envvars

  • изменить владельца родительского каталога файла учетных данных aws:

    chown -R www-data:www-data /root

  • перезапустить apache:

    service apache2 restart

Обратите внимание, что здесь изменилось право собственности на домашний каталог root.Это связано с тем, что для aws необходимы определенные права доступа к файлу и право владения файлом учетных данных (это означает, что с этого момента только логин может использовать этот логин). Возможно, это было бы лучше (особенно если вы работаете на фактическомкомпьютер, а не контейнер), чтобы скопировать файл учетных данных в новое место и выполнить те же действия:

mkdir -p /home/joe/workdir/.aws/
cp /home/joe/.aws/credentials /home/joe/foo/.aws/credentials
sudo chown -R www-data:www-data home/joe/foo/
sudo echo "export AWS_SHARED_CREDENTIALS_FILE=/home/joe/foo/.aws/credentials" >> /etc/apache2/envvars
sudo service apache2 restart

Я не знаю, насколько хорошо это подходит для конфигурации NGINX, но надеюсь, что это немного поможет.

...