亚马逊AWS - 按URL共享文件

时间:2016-04-13 14:16:45

标签: c# amazon-web-services amazon-s3

我使用AWS服务来保存和检索文件。

我试图生成一个访问和读取文件/存储桶的URL。

我是这样做的:

GetPreSignedUrlRequest request = new GetPreSignedUrlRequest()
{
    BucketName = fileDetails.BucketName,
    Key = fileDetails.FileKey,
    Expires = expires
};

result = client.GetPreSignedURL(request);

网址生成成功,但是当我尝试通过此网址访问该文件时,出现以下错误:

Access Denied error message

我想我应该授予此文件的公共权限。 有人知道我应该怎么做才能通过网址与公众许可共享文件?

AWS documentation中没有任何关于公开许可的提及。

2 个答案:

答案 0 :(得分:1)

无论您正在设置expires的值,都无法正常工作。

该链接已过期。

此错误消息应按面值解释。

文档未提及此事实(据我所知),但在身份验证或授权检查完成之前,验证了预签名URL的到期时间。对于因为过期而无效的链接的进一步验证没有意义。

检查查询字符串中的Expires=X-Amz-Expires=值。

Expires是相对于unix时期的到期时间,或X-Amz-Expires是时间(以X-Amz-Date为单位),直到链接到期为止。其中只有一个存在(Signature V2与V4差异)。

另请注意,一旦发现问题,您不能简单地修改URL中表示的过期时间以使值不同然后使用它 - 对签名URL的任何篡改都将使签名无效(通过设计)。

答案 1 :(得分:-1)

确保您在客户端上使用的凭据与附加了AmazonS3FullAccess策略的用户(或其所属的组)绑定。