无法仅在巴林 AWS 区域预签名 s3 url

Mic*_*edy 4 python amazon-s3 amazon-web-services

我有一些对 AWS S3 URL 进行预签名的 Python 代码,这些代码已经运行了多年。我们刚刚在巴林 AWS 数据中心添加了一个新存储桶。该位置已被禁用,需要明确启用该数据中心。

一切看起来都很好。然而,生成的 URL 总是给我一个IllegalLocationConstraintException,我相信boto3在 URL 中生成了错误的域名。

该错误表明请求已发送至us-east-1。我知道您必须指定区域,我们正在使用 8-10 个区域,在这之前它们很好。

生成的 URLboto3.client('s3', ...).generate_presigned_url()似乎给出了美国东部 S3 的 URL。鉴于这样的事情:

region: me-south-1
bucket: bucket-name
key: full/path/to/file.txt
Run Code Online (Sandbox Code Playgroud)

您会期望签名 URL 是这样的:

https://bucket-name.s3.me-south-1.amazonaws.com/full/path/to/file.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AZIAJ4252S33LNN3Y14Q/20100504/me-south-1/s3/aws4_request&X-Amz-Date=20200504TA22522Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=1717275aff4af5fcff2f44f74615fadb5ba448eb83219c88f59d0792d4e44b8f
Run Code Online (Sandbox Code Playgroud)

注意域名:bucket-name.s3.me-south-1.amazonaws.com

然而,我们从中得到的boto3.client('s3', ...).generate_presigned_url()是:

https://bucket-name.s3.amazonaws.com/full/path/to/file.txt?X-Amz-Algorithm=...
Run Code Online (Sandbox Code Playgroud)

请注意,生成的域是:s3.amazonaws.com

有人对新的 s3 位置遇到过这样的问题吗?

如果有帮助,我们返回的完整错误消息是:

region: me-south-1
bucket: bucket-name
key: full/path/to/file.txt
Run Code Online (Sandbox Code Playgroud)

jel*_*csc 6

尝试endpoint_url在 S3 客户端中指定:

\n\n
boto3.client('s3', endpoint_url='https://s3.me-south-1.amazonaws.com', region_name='me-south-1')\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果出现以下错误

\n\n
The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.\n
Run Code Online (Sandbox Code Playgroud)\n\n

也指定signature_version

\n\n
from botocore.client import Config\nboto3.client('s3', config=Config(signature_version='s3v4'), endpoint_url='https://s3.me-south-1.amazonaws.com', region_name='me-south-1')\n
Run Code Online (Sandbox Code Playgroud)\n\n

我已经尝试过了,它对我有用 \xe2\x97\xa1\xcc\x88

\n