【发布时间】:2017-05-08 03:42:09
【问题描述】:
我正在编写一个脚本,该脚本应该从我的 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 和 logstash 的身份运行 Python 解释器,并逐个命令执行脚本命令,它以 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 上搜索了很多,但没有关于这个特殊的“用户切换”案例的主题。
【问题讨论】:
-
你关注了the steps以logstash登录了吗?
-
不,因为我不以 root 身份使用它们(我也不想这样做)。我使用硬编码凭据来实现可移植性(我知道这是不好的做法)...凭据在 boto3.client 参数中
-
很奇怪,它对我有用。
-
也许该异常具有误导性,并且您无权写入从其中启动 python 脚本的目录...
-
我太愚蠢了...
chown -R logstash: .解决了我的问题。我一定忘记了之前chown上的-R选项。无论如何,谢谢!
标签: python amazon-s3 boto aws-cli boto3