【问题标题】:Acess Denied - Streaming a video via signed URL on Amazon S3拒绝访问 - 通过 Amazon S3 上的签名 URL 流式传输视频
【发布时间】:2011-09-09 15:50:06
【问题描述】:

我使用 S3 服务作为我在本地运行的软件 (C#) 的视频提供程序

对于安全问题,我为文件生成一个签名 URL(临时 URL),然后传递给视频播放器,但是如果我将“=”(等于)字符替换为“_”(下划线),玩家只能阅读链接,正如在此线程上所写的:https://forums.aws.amazon.com/thread.jspa?messageID=245291 在亚马逊员工的帖子中。

这里开始了我的问题,当我在不更改此字符的情况下发送视频 URL 时它不起作用

如果我不更改字符但文件权限是“仅限经过身份验证的用户”,我可以访问该文件,但由于字符问题,视频播放器不能。

如果我更改字符并将 URL 发送给播放器,则它仅在文件访问权限为“每个人都可以读取/更改”时才有效,这使得我的“安全解决方案”成为不安全的选择,因为如果有人获得了他会得到的 URL有权访问该文件。


这是来自亚马逊的错误吗?某人 有解决办法吗?



这里有一个 Singed URL 示例:

http://bucket-name.s3.amazonaws.com/video.flv?AWSAccessKeyId=AKIAILVSCA2AWHA7KM6Q&Expires=1307378448&Signature=FzWAI4dd8BfnzfCtbtAumQyiNvk%3D

这里有一个更改字符 Singed URL 示例:

http://bucket-name.s3.amazonaws.com/video.flv?AWSAccessKeyId_AKIAILVSCA2AWHA7KM6Q&Expires_1307378448&Signature=FzWAI4dd8BfnzfCtbtAumQyiNvk%3D

【问题讨论】:

    标签: amazon-s3 video-streaming


    【解决方案1】:

    这里发生了很多事情。

    首先,您提供的链接是关于 Cloudfront 网址的。我认为不可能像讨论的那样替换 S3 url 中的字符。

    其次,您不应该在AWSAccessKeyIdExpiresSignature 之后直接更改= 标志。问题字符仅是出现在签名字符串中的字符。在您的示例中,末尾的 %3D= 编码自 url,这就是您需要更改的内容。

    但问题是,如果您更改该字符,签名将不再有效,这就是无法再访问私有内容的原因。由于亚马逊忽略了 URL 的身份验证部分,因此可以访问公共内容。

    如果 url 中有 + (%2b) 字符,我在基于 Silverlight 的视频播放器中遇到了类似的问题。我通过在循环中生成一个新的 url 来解决这个问题,直到我有一个没有无效字符的 URL。关键是稍微改变过期时间以改变生成的签名。

    以下是使用 AWS 开发工具包的示例。 (从 vb.net 转换,所以我希望语法正确)

    using (AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(AWSKey, AWSSecretKey)) {
    
        string url = null;
    
        int secs = 0;
        do {
            var req = new Model.GetPreSignedUrlRequest {
                BucketName = bucket,
                Key = key,
                Protocol = Model.Protocol.HTTP,
                Verb = Model.HttpVerb.GET,
                Expires = DateTime.Now.AddDays(ExpiryInDays).AddSeconds(secs)
            };
    
            url = client.GetPreSignedURL(req);
    
            secs += 1;
        } while (url.ToLower().Contains("%2b"));
    
        return url;
    
    }
    

    根据我的经验,性能损失可以忽略不计,因为通常只需要几次迭代即可确保“干净”的 url。

    【讨论】:

      猜你喜欢
      • 2015-05-21
      • 1970-01-01
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 2023-04-05
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多