首页 文章

AWS预先签署了url acl public读取无效签名

提问于
浏览
1

我有一个私有存储桶,我想创建一个预先签名的URL,允许用户在时间限制内上传文件,并将ACL设置为public read only .

当像下面这样创建一个PutObjectRequest它工作正常我可以把文件PUT没问题 . 当我添加ACL:aws.String(“public-read”)时,我得到错误'签名不匹配'而PUT失败,这里是GO sdk生成的url示例 .

https://<MY-BUCKET>.s3.eu-west-2.amazonaws.com/<MY-KEY>?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=<AWS_ACCESS_KEY>/20170505/eu-west-2/s3/aws4_request&X-Amz-Date=20170505T793528Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host;x-amz-acl&X-Amz-Signature=2584062aaa76545665bfed7204fcf0dfe233a45016f698e7e8a11c34a5a7921e

我尝试过root aws用户和普通用户 . 我已尝试使用存储桶策略,并且没有,并且使用存储桶策略和FAM S3访问的IAM策略 . 基本上所有组合 . 每次添加ACL字段时都会出现签名错误 .

我不确定它是否与GO SDK或AWS服务有关 . 有人可以建议我做什么吗?

svc := s3.New(session.New(&aws.Config{Region: aws.String("eu-west-2")}))
    req, _ := svc.PutObjectRequest(&s3.PutObjectInput{
        ACL: aws.String("public-read"),
        Bucket: aws.String("MY BUCKET NAME"),
        Key:    aws.String("MY KEY"),
    })
    str, err := req.Presign(15 * time.Minute)

1 回答

  • 0

    这是aws服务端的错误,网址没有被签名 .

相关问题