【问题标题】:s3 browser upload, canonical or policy bucket?s3浏览器上传,规范或策略桶?
【发布时间】:2017-03-05 05:36:36
【问题描述】:

最新 sigv4 s3 浏览器上传帖子的文档 - http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html - 表明我需要使用x-amz-signature、x-amz-credential 和policy。

如果我尝试这样做,我会收到一条错误消息,指出我缺少 AWSAccessKeyId,这在文档中没有提到,并且 x-amz-signature 需要是 signature。

要签名的字符串:

我应该执行上面的 base64 存储桶策略文档,还是应该执行规范方法,例如 python 发布到 dynamoDB - http://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html#sig-v4-examples-post。

签名:

规范使用 hmac hexdigest hmac.new(signing_key, (string_to_sign).encode('utf-8'), hashlib.sha256).hexdigest()

上面的上传文档使用带有 base64 的 hmac:Base64.encode64(OpenSSL::HMAC.digest('sha256', signaturekey, @policy))。

在hood of the ruby sdk 下,看起来他们正在使用非hmac hexdigest:OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), key, value)。

上传到s3需要什么方法?

FWIW,我正在使用带有 Rails 作为 API 的 SPA,所以很遗憾我无法访问任何 Rails 视图助手。

我发布了一个关于我的代码 yesterday 的问题,不幸的是,我看到了一个使用 rails view helpers 的链接

编辑:

政策发送的内容:

{"expiration":"2017-03-06T20:13:51Z",
 "conditions":[
     {"bucket":"example-development"},
     {"x-amz-credential":"AKIAIVVIZJHOBCBAB5CA/20170305/us-west-2/s3/aws4_request"},
     {"x-amz-algorithm":"AWS4-HMAC-SHA256"},
     {"x-amz-date":"20170305T000000Z"}
    ]
 }

表单发送的内容:

Policy:"eyJleHBpcmF0aW9uIjoiMjAxNy0wMy0wNlQyMDoxOTowN1oiLCJjb25kaXRpb25zIjpbeyJidWNrZXQiOiJ3YXlkb3BlLWRldmVsb3BtZW50In0seyJ4LWFtei1jcmVkZW50aWFsIjoiQUtJQUlWVklaSkhPQkNCQUI1Q0EvMjAxNzAzMDUvdXMtd2VzdC0yL3MzL2F3czRfcmVxdWVzdCJ9LHsieC1hbXotYWxnb3JpdGhtIjoiQVdTNC1ITUFDLVNIQTI1NiJ9LHsieC1hbXotZGF0ZSI6IjIwMTcwMzA1VDAwMDAwMFoifV19"
X-Amz-Signature:"Cqjvo9aYCrb8PYHD+mUDjlOwKUzTpsI4d5/oycFAUBA="
key:"uploads/photo/photo/126/photo.jpg"
x-amz-algorithm:"AWS4-HMAC-SHA256"
x-amz-credential:"AKIAIVVIZJHOBCBAB5CA/20170305/us-west-2/s3/aws4_request"
x-amz-date:"20170305T000000Z"

存储桶策略和 CORS 包含零条件。

【问题讨论】:

  • 您的表单和策略中需要X-Amz-Algorithm,其值为AWS4-HMAC-SHA256。您没有提到这一点,如果它不存在,则可能会触发有关 AWSAccessKeyId 的消息(您通常不应该使用它)。你应该使用政策文件。
  • 更新了正在发送的数据

标签: ruby-on-rails amazon-web-services amazon-s3


【解决方案1】:

使用 s3 浏览器上传,要签名的字符串应该是存储桶配置:http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-UsingHTTPPOST.html

点击页面底部的链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 2019-02-26
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多