我正在编写一个脚本,该脚本应该从我的s3存储桶下载文件,然后对其进行一些更改。 问题是我的脚本在以root身份执行时运行良好,但在使用专用用户时执行则不会。
以下是我们感兴趣的代码:
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')
当我以root用户身份运行脚本时没问题,文件被下载并且脚本继续运行,但是我的专用用户执行了该脚本:
logstash:x:501:501::/home/logstash:/sbin/nologin
,它不起作用。
我尝试以root身份运行Python解释器并使用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
我在谷歌搜索了很多但没有关于这个特殊的“用户切换”案例的话题。
答案 0 :(得分:0)
我先:)
用户logstash
的权限是否已正确设置为您要下载的目录?
你有没有错过-R
中的chown -R logstash
?
答案 1 :(得分:0)
以防万一有人出于与我相同的原因而遇到此错误: 对我来说,解决方法是在初始化s3-client时提供一个 region ,例如:
s3 = boto3.client("s3", region_name="eu-central-1")
其中“ eu-central-1”需要替换为存储桶实际所在的区域。 看来这是一个错误:https://github.com/boto/botocore/issues/1413,尽管听起来应该予以修复。 仅供参考,由于未设置此区域,我遇到的两个错误是
botocore.exceptions.ClientError: An error occurred (InvalidClientTokenId) when calling the GetCallerIdentity operation: The security token included in the request is invalid
问题中已经提到的一个:
botocore.exceptions.ClientError: An error occurred (400) when calling the HeadObject operation: Bad Request
有趣的是,有些呼叫确实没有在“ eu-central-1”中工作,而在中国,对“ cn-north-1”的相同请求也失败了。
答案 2 :(得分:0)
有相同的错误。问题出在文件的错误路径中