【问题标题】:Presigned GET url returning a 403返回 403 的预签名 GET url
【发布时间】:2016-01-24 07:00:27
【问题描述】:

我正在尝试使用 aws-sdk 获取存储桶中文件的临时私有 URL,但生成的 URL 在浏览器中给了我一个 403。代码如下:

s3 = Aws::S3::Resource.new
bucket = s3.bucket('media.coolstuff.com')
obj = bucket.object('01.mp4')
obj.presigned_url(:get, expires_in: 3600, virtual_host: true)

返回:

=> "http://media.coolstuff.com:80/01.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJ75FYMC7AZWUI52A%2F20151024%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20151024T224953Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=3bb646db5a50848bdc227066c5ecc70ad249dd404b63b8b799363aa360f18ef6"

在浏览器中,这个 URL 会导致 403:

403 Forbidden
Code: AccessDenied
Message: Access Denied

使用的凭据属于具有AmazonS3FullAccess 权限的组中的用户。

如何为可在网络浏览器中访问的对象生成预签名 URL?

【问题讨论】:

  • 你发现了吗?我能够列出存储桶并下载图像,但是当我预先签署一个 URL 并尝试访问它时,我得到了 403。

标签: ruby amazon-s3 aws-sdk


【解决方案1】:

以下代码对我有用,请注意us-east-1

S3_URL_EXPIRY = 3600 * 24 * 2
S3_SIGNED_URL_REGION = 'us-east-1'.freeze
s3 = Aws::S3::Resource.new(region: S3_SIGNED_URL_REGION, access_key_id: *access_key_id*, secret_access_key: *secret_access_key*)
obj = s3.bucket('media.coolstuff.com').object('01.mp4')
obj.presigned_url(:get, expires_in: S3_URL_EXPIRY, virtual_host: true)

*access_key_id**secret_access_key* 分别是您的 access_key_id 和 secret_access_key。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 2015-05-12
    相关资源
    最近更新 更多