gpt4 book ai didi

python - HTTP代码400在python中使用Boto3从AWS S3存储桶获取对象

转载 作者:行者123 更新时间:2023-12-05 06:41:06 24 4
gpt4 key购买 nike

我正在编写一个脚本,该脚本应该从我的 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

我在谷歌上搜索了很多,但没有关于这个特殊的“用户切换”案例的话题。

最佳答案

以防其他人出于与我相同的原因遇到此错误:对我来说,解决方法是在初始化 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:调用 GetCallerIdentity 操作时发生错误 (InvalidClientTokenId):请求中包含的安全 token 无效

问题中已经说明的那个:

botocore.exceptions.ClientError:调用 HeadObject 操作时发生错误 (400):错误请求

有趣的是,有些调用在“eu-central-1”中确实有效,而在中国“cn-north-1”中同样的请求失败了。

关于python - HTTP代码400在python中使用Boto3从AWS S3存储桶获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41284416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com