【问题标题】:S3 SignedURL failsS3 签名 URL 失败
【发布时间】:2018-08-11 21:03:13
【问题描述】:

我正在尝试为 S3 中的 GET 对象请求创建签名 URL。我让这段代码完美地工作在 S3 中,但我似乎无法让它为 GET 工作。我用这个代码在 URL 上签名

    //Create the signed url using the company id
func (user *User) signURLForUser(sess *session.Session) (*URLSign, error) {
    svc := s3.New(sess)
    svc.Config.Region = aws.String(os.Getenv("REGION"))
    req, _ := svc.GetObjectRequest(&s3.GetObjectInput{
        Bucket: aws.String("bucket"),
        Key:    aws.String(user.CompanyID + "/" + user.FileRequest),
    })
    var urlSign URLSign
    //urlSign.Size = *out.ContentLength
    str, err := req.Presign(time.Minute * 60 * 24 * 5) //Expire in 5 days
    if err != nil {
        log.Println("Error signing URL Request")
        return nil, err
    }
    urlSign.URL = str
    return &urlSign, nil
}

但是当我尝试使用它返回的 URL 时,我得到了这个错误:

 <Error>
<Code>AuthorizationQueryParametersError</Code>
<Message>X-Amz-Algorithm only supports "AWS4-HMAC-SHA256"</Message>
<RequestId>9D7CFB14B195A260</RequestId>
<HostId>
Dgh+SqrHbrdKcbkCYrAj3nObLMAwS7k5+VR1zwC/8ZMS3S4++IAAEXXh3zMZ3CpOAyxX1Kc7Opg=
</HostId>
</Error>

我检查了 IAM 权限,它们是为 GetObject 设置的。我想不出我还做错了什么。

编辑:这是 URL 的示例 当然: https://rsmachiner-user-code.s3.amazonaws.com//CFDMP_ServoGear.gcode?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAVEENPDKJRUDZKEVM%2F20180812%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-日期= 20180812T005443Z&X-AMZ-过期= 432000&X-AMZ-安全令牌= FQoGZXIvYXdzEBoaDIVdv9t408gWWi9vvSLjAaa0pZNA%2BXu83%2FFSyng4XvFdv5%2B7nRB%2FQydMLyi%2BBS84yXqwP6VYn7VlInw4ip1M0lkjHRXQf8OAvQLPrIl%2FQZoTe%2Fy3N6bqhLDOnFVJ3UZzYDQ4%2FbX%2Brc6mvVbkhRsQPiarKBuLYDiOD%2FNoSaItMwI9FsMDknw1qX0Pf%2BZ5La0GmanHrTt9YUI01cIUKJ40No5mKJIwcXw3%2F5QOpUc59rZ2zEzlWP9OXeEwWKp%2Bog5P0v7ABX1lRPsCx4HGEstKhw3ZWmJfQhAcAvhrjmXIMqGNKkaCI5L0ap23jf4GvPMGd4%2BcKIKKvtsF&X-AMZ-SignedHeaders =主机&X-Amz-Signature=82dfb9b392b5e1ef44c7140259ad884e696b48f8094bdd2d223b8650ebdf59f7

【问题讨论】:

  • 这与权限无关。 URL 的实际格式有问题。你能和我们分享其中一个吗?
  • 我使用其中一个 URL 添加了一个编辑。
  • 我知道问题出在哪里,& 被替换为 \u。我只是不知道为什么。
  • 这与go的字节到字符串转换有关。我将 json 对象解组为一个结构,现在记录它时一切看起来都是正确的。
  • 无关,但s3.amazonaws.com/&lt;--this--&gt;/CFDMP_ServoGear.gcode?X- 会在某些时候给您带来麻烦。 S3 对象键不应有前导斜杠,但出现在 URL 中的 // 表明您正在添加它们。这最终会导致意外/奇怪/令人困惑的行为或兼容性问题。正确的对象键是 cat.jpgpics/cat.jpgnot /cat.jpg/pics/cat.jpg... 但您需要在上传端和下载端修复此问题。最好现在修复它而不是以后修复它。

标签: go amazon-s3


【解决方案1】:

当您未正确指定算法时会出现此类问题。对我来说,我使用的是这个网址:https://s3_endpoint?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026 它返回给我同样的错误。我用 & 替换了 \u0026,效果很好。

【讨论】:

    猜你喜欢
    • 2020-11-27
    • 2020-09-25
    • 2018-05-26
    • 2018-07-08
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多