【发布时间】:2021-12-28 04:12:55
【问题描述】:
感谢伟大的包裹!
当我使用 S3 服务创建带有 localstack 的开发以创建 presignedurl 帖子时遇到问题。
我已经使用SERVICES=s3 DEBUG=1 S3_SKIP_SIGNATURE_VALIDATION=1 localstack start 运行 localstack
我有设置AWS_ACCESS_KEY_ID=testAWS_SECRET_ACCESS_KEY=testAWS_DEFAULT_REGION=us-east-1AWS_ENDPOINT_URL=http://localhost:4566S3_Bucket=my-bucket
我确定有桶
> awslocal s3api list-buckets
{
"Buckets": [
{
"Name": "my-bucket",
"CreationDate": "2021-11-16T08:43:23+00:00"
}
],
"Owner": {
"DisplayName": "webfile",
"ID": "bcaf1ffd86f41161ca5fb16fd081034f"
}
}
我尝试创建预签名的 url,并使用它在控制台中运行
s3_client_sync.create_presigned_post(bucket_name=settings.S3_Bucket, object_name="application/test.png", fields={"Content-Type": "image/png"}, conditions=[["Expires", 3600]])
并且有这样的回报
{'url': 'http://localhost:4566/kredivo-thailand',
'fields': {'Content-Type': 'image/png',
'key': 'application/test.png',
'AWSAccessKeyId': 'test',
'policy': 'eyJleHBpcmF0aW9uIjogIjIwMjEtMTEtMTZUMTE6Mzk6MjNaIiwgImNvbmRpdGlvbnMiOiBbWyJFeHBpcmVzIiwgMzYwMF0sIHsiYnVja2V0IjogImtyZWRpdm8tdGhhaWxhbmQifSwgeyJrZXkiOiAiYXBwbGljYXRpb24vdGVzdC5wbmcifV19',
'signature': 'LfFelidjG+aaTOMxHL3fRPCw/xM='}}
我用失眠症测试
我已经阅读了本地堆栈中的日志
2021-11-16T10:54:04:DEBUG:localstack.services.s3.s3_utils: Received presign S3 URL: http://localhost:4566/my-bucket/application/test.png?AWSAccessKeyId=test&Policy=eyJleHBpcmF0aW9uIjogIjIwMjEtMTEtMTZUMTE6Mzk6MjNaIiwgImNvbmRpdGlvbnMiOiBbWyJFeHBpcmVzIiwgMzYwMF0sIHsiYnVja2V0IjogImtyZWRpdm8tdGhhaWxhbmQifSwgeyJrZXkiOiAiYXBwbGljYXRpb24vdGVzdC5wbmcifV19&Signature=LfFelidjG%2BaaTOMxHL3fRPCw%2FxM%3D&Expires=3600
2021-11-16T10:54:04:WARNING:localstack.services.s3.s3_utils: Signatures do not match, but not raising an error, as S3_SKIP_SIGNATURE_VALIDATION=1
2021-11-16T10:54:04:INFO:localstack.services.s3.s3_utils: Presign signature calculation failed: <Response [403]>
我错过了什么,所以我无法创建 presignedurl 帖子?
【问题讨论】:
-
您是否尝试使用 Postman 使用此 url 上传文件?试一试,看看你得到了什么错误的响应。
-
响应总是拒绝访问。请求已过期。
-
那么主要是您的 aws 凭据有问题。检查他们是否对您尝试执行的操作和服务拥有足够的权限。
-
为了这个开发目的,我使用localstack来模拟使用AWS s3服务。我已经通过阅读文档确认凭据有效,并尝试使用另一个函数,如
create_presigned_url。使用这些函数,我可以使用 boto3 更新和获取对象,但是当使用create_presigned_post函数时,我什至无法正确生成 URL
标签: amazon-web-services amazon-s3 boto3