我创建了一个S3 bucket,上传了一个视频,在CloudFront中创建了一个流媒体分发。用一个静态的HTML播放器测试了它,它工作了。我已经通过帐户设置创建了一个密钥对。我现在桌面上有私钥文件。我就在那里。
我的目标是让我的Django/Python站点创建安全的url,人们不能访问这些视频,除非它们来自我的某个页面。问题是我对亚马逊的布局方式过敏,我只是越来越困惑。
我知道这不是StackOverflow上最好的问题,但我肯定我不是这里唯一一个不能确定如何设置安全CloudFront/S3环境的傻瓜。我真的很感谢你的帮助,我愿意(两天之后)给一个500磅的奖金给最好的答案。
我有几个问题,一经回答,应该可以用一个解释来解释如何完成我所追求的目标:
在文档中(下一点有一个例子),有很多XML在告诉我需要把东西放到不同的地方。是否有一个在线控制台来执行此操作?或者我真的要通过卷曲来强迫它(等等)?
如何为CloudFront创建源访问标识并将其绑定到我的发行版?我读过this document但是,第一点,我不知道该怎么办。我的钥匙对怎么配这个?
完成后,如何限制S3 bucket只允许人们通过该身份下载内容?如果这是另一个XML jobby,而不是单击web UI,请告诉我应该在哪里以及如何将它放入我的帐户。
在Python中,为文件生成过期URL的最简单方法是什么。我已经安装了boto
,但是我不知道如何从流媒体分发中获取文件。
有没有任何应用程序或脚本可以采取的困难,设置这个装束?我用的是Ubuntu(Linux),但如果只是Windows的话,我在VM中有XP。我已经看过CloudBerry S3 Explorer Pro了,但是它和在线UI一样有意义。
可以为资源生成过期的签名URL。Boto3文档有一个nice example solution用于:
你说得对,要建立这个系统需要大量的API工作。我希望他们很快就能在AWS控制台上找到它!
更新:我已将此代码提交给boto—从boto v2.1(2011-10-27发布)开始,这变得容易多了。对于boto<;2.1,请使用此处的说明。对于boto 2.1或更高版本,请在我的博客上获取更新说明:http://www.secretmike.com/2011/10/aws-cloudfront-secure-streaming.html一旦boto 2.1被更多发行版打包,我将在此处更新答案。
为了实现您的目标,您需要执行以下步骤,我将在下面详细介绍:
1-创建Bucket并上载对象
最简单的方法是通过AWS控制台,但为了完整起见,我将展示如何使用boto。Boto代码如下所示:
2-创建Cloudfront“源访问标识”
目前,此步骤只能使用API执行。僵尸代码在这里:
3-修改对象上的ACL
现在我们有了特殊的S3用户帐户(上面创建的S3CanonicalUserId),我们需要让它访问我们的S3对象。我们可以通过打开对象(而不是bucket)的AWS控制台轻松地做到这一点“权限”选项卡,单击“添加更多权限”按钮,然后将上面得到的非常长的S3CanonicalUserId粘贴到新的“被授予者”字段中。确保您授予新的“打开/下载”权限。
您还可以使用以下boto脚本在代码中执行此操作:
4-创建cloudfront分发版
请注意,直到2.0版(在编写本文时尚未正式发布)之后,boto才完全支持自定义源代码和私有发行版。下面的代码从boto 2.0分支中提取一些代码,并将其组合在一起以使其正常运行,但它并不漂亮。2.0分支更优雅地处理这个问题-如果可能的话,一定要使用它!
5-测试是否可以从cloudfront下载对象,但不能从s3下载对象
现在您应该能够验证:
这些测试必须进行调整才能与流播放器一起使用,但基本思想是只有基本的cloudfront url才可以工作。
6-为CloudFront创建密钥对
我认为唯一的办法就是通过亚马逊的网站。进入你的AWS“账户”页面,点击“安全凭证”链接。单击“密钥对”选项卡,然后单击“创建新密钥对”。这将为您生成新的密钥对并自动下载私钥文件(pk-xxxxxxxxx.pem)。保持密钥文件的安全性和私密性。还要记下亚马逊的“密钥对ID”,因为我们下一步需要它。
7-用Python生成一些url
从boto版本2.0开始,似乎不支持生成签名的CloudFront url。Python没有在标准库中包含RSA加密例程,因此我们将不得不使用一个附加库。我在这个例子中使用了M2Crypto。
对于非流媒体分发,您必须使用完整的cloudfront URL作为资源,但是对于流媒体,我们仅使用视频文件的对象名称。有关生成仅持续5分钟的URL的完整示例,请参见下面的代码。
此代码松散地基于Amazon在CloudFront文档中提供的PHP示例代码。
8-尝试URL
希望你现在应该有一个这样的工作网址:
把它放到js中,您应该会得到这样的东西(来自Amazon的CloudFront文档中的PHP示例):
摘要
如你所见,不太容易!boto v2将有助于设置发行版。我会找出是否有可能得到一些网址生成代码,以及改善这个伟大的图书馆!
相关问题 更多 >
编程相关推荐