Я работаю над скриптом, который должен загрузить файл из моего ведра 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, но нет темы об этом специальном случае «пользовательский коммутатор».
Вы следовали [шагам] (https://boto3.readthedocs.io/en/latest/guide/quickstart.html#configuration), зарегистрированным как logstash? – rocksteady
Нет, потому что я не использую их как root (и я не хочу). Я использую жестко настроенные учетные данные для переносимости (я знаю, что это плохая практика) ... Учетные данные находятся в аргументах boto3.client – Kuaaaly
Очень странно, это работает на меня. – rocksteady