2016-12-22 16 views
2

Я работаю над скриптом, который должен загрузить файл из моего ведра s3, а затем внести в него некоторые изменения. Проблема заключается в том, что мой скрипт работает хорошо, когда выполняется с правами root, но не выполняется при использовании выделенного пользователя.HTTP-код 400, получающий объект из AWS S3 с Boto3 в python

Вот кусок кода, мы заинтересованы в:

s3 = boto3.client('s3', aws_access_key_id='xxx', aws_secret_access_key='xxx') 

s3.download_file('my-bucket', 'my_file.csv', '/my/path/to/file.csv') 

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

logstash:x:501:501::/home/logstash:/sbin/nologin, не работает.

Я попытался использовать интерпретатор Python как root и как logstash и выполнил команду сценария по команде, он работает как root, но не как logstash. Вот ошибка:

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "/usr/local/lib/python2.7/site-packages/boto3/s3/inject.py", line 126, in download_file 
extra_args=ExtraArgs, callback=Callback) 
File "/usr/local/lib/python2.7/site-packages/boto3/s3/transfer.py", line 299, in download_file 
future.result() 
File "/usr/local/lib/python2.7/site-packages/s3transfer/futures.py", line 73, in result 
return self._coordinator.result() 
File "/usr/local/lib/python2.7/site-packages/s3transfer/futures.py", line 233, in result 
raise self._exception 
botocore.exceptions.ClientError: An error occurred (400) when calling the HeadObject operation: Bad Request 

Я много искал в google, но нет темы об этом специальном случае «пользовательский коммутатор».

+0

Вы следовали [шагам] (https://boto3.readthedocs.io/en/latest/guide/quickstart.html#configuration), зарегистрированным как logstash? – rocksteady

+0

Нет, потому что я не использую их как root (и я не хочу). Я использую жестко настроенные учетные данные для переносимости (я знаю, что это плохая практика) ... Учетные данные находятся в аргументах boto3.client – Kuaaaly

+0

Очень странно, это работает на меня. – rocksteady

ответ

0

Я первый :)

права доступа для пользователя logstash установлен правильно для каталога, который вы загружаете в?

Вы были случайно зарегистрированы в -R в chown -R logstash?

+0

К сожалению, это не решение. Потому что, когда я делал 'chown -R', у меня уже был файл' file.csv' в каталоге загрузок (ранее он был загружен с правами root). Поэтому я тоже изменил его, но сценарий, выполненный как logstash, не смог загрузить файл сам по себе и использовать предыдущий файл (как root & changed owner), чтобы продолжить процесс ... – Kuaaaly

+0

Попробовали ли вы: chown -R logstash: logstash' для пользователя и группы? – rocksteady

+0

Да, это то, что я написал в комментарии в вашем предыдущем ответе 'chown -R logstash:', который делает то же самое, что я думаю. – Kuaaaly