使用boto和SigV4的S3 - 缺少主机参数

11 投票
1 回答
13155 浏览
提问于 2025-05-01 15:53

在开发的时候,我使用了位于爱尔兰的S3存储桶,一切运行得很好。现在在生产环境中,我想使用新的“法兰克福”地区的S3,但显然这个新的法兰克福地区使用了“SigV4”认证,这导致我的Python脚本出现问题。

当我在~/.boto文件中添加以下内容时,出现了一个错误:

~/.boto:

[s3]
use-sigv4 = True

错误信息:

File "/usr/lib/python2.6/site-packages/boto/__init__.py", line 141, in connect_s3
return S3Connection(aws_access_key_id, aws_secret_access_key, **kwargs)
File "/usr/lib/python2.6/site-packages/boto/s3/connection.py", line 196, in __init__
"When using SigV4, you must specify a 'host' parameter."
boto.s3.connection.HostRequiredError: BotoClientError: When using SigV4, 
you must specify a 'host' parameter.

有没有人能告诉我怎么指定“host”参数?我在AWS/boto的文档中找不到这个参数。

暂无标签

1 个回答

13

这里有关于你遇到的错误的文档,还有这段具体的源代码,它是用来创建S3Connection的(也就是导致你错误的原因)。

在创建S3Connection(aws_access_key_id, aws_secret_access_key, **kwargs)的时候,你需要额外传入一个参数host=...,这个参数应该是一个简单的字符串,比如's3.amazonaws.com',或者根据你的设置来调整。

解决方法:

你可以把这个参数添加到你传入的kwargs中:

kwargs.update({'host': 's3.amazonaws.com'})

或者你也可以手动调用它,像这样:

S3Connection(aws_access_key_id, aws_secret_access_key, host='s3.amazonaws.com', **kwargs)

撰写回答