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)
尝试endpoint_url在 S3 客户端中指定:
boto3.client('s3', endpoint_url='https://s3.me-south-1.amazonaws.com', region_name='me-south-1')\nRun Code Online (Sandbox Code Playgroud)\n\n如果出现以下错误
\n\nThe authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.\nRun Code Online (Sandbox Code Playgroud)\n\n也指定signature_version:
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')\nRun Code Online (Sandbox Code Playgroud)\n\n我已经尝试过了,它对我有用 \xe2\x97\xa1\xcc\x88
\n| 归档时间: |
|
| 查看次数: |
641 次 |
| 最近记录: |