【问题标题】:I wan't to create presigned url post, but always failed我不想创建预签名的 url 帖子,但总是失败
【发布时间】: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


【解决方案1】:

问题在于您的 AWS 配置 -

AWS_ACCESS_KEY_ID=test         // Should be an Actual access Key for the IAM user
AWS_SECRET_ACCESS_KEY=test           // Should be an Actual Secret Key for the IAM user
AWS_DEFAULT_REGION=us-east-1 
AWS_ENDPOINT_URL=http://localhost:4566 // Endpoint seems wrong
S3_Bucket=my-bucket              // Actual Bucket Name in AWS S3 console

有关更多信息,请尝试阅读此处并使用正确的 AWS 凭证设置您的环境 - Setup AWS Credentials

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    相关资源
    最近更新 更多