亚马逊AWS官方博客

Tag: Amazon CloudFront

使用Amazon CloudFront签名URL+S3实现私有内容发布

前言 Amazon CloudFront 是一个全球性内容分发网络 (CDN),可实现网站、API、视频内容或其他 Web 资产的快速分发。用户可以使用CloudFront来加速分发保存在Amazon S3存储桶上的各种内容,比如文档、图片、媒体文件和软件安装包等。很多AWS客户在使用CloudFront+S3通过互联网向自己的最终用户提供内容下载的时候,也希望能够限制到只允许合法的用户下载,比如那些已经通过了身份认证或已经付费的用户,避免开放下载可能造成的数据安全和流量成本等问题。进一步,这些AWS客户还希望能够限制其最终用户可以执行下载操作的日期时间段,发起下载请求的来源IP地址范围等等。使用CloudFront的签名URL功能就可以帮助AWS客户实现其私有内容的安全发布。 CloudFront签名URL功能简介 CloudFront的签名URL功能通过在普通的Http或Https请求中添加经过哈西和签名认证的策略内容,来保护私有内容不受非法访问。当收到来自客户端比如浏览器、移动App或桌面应用对特定资源的访问请求后,CloudFront会首先利用保存的密钥解密请求中包含的签名部分内容,检查是否完整和正确。然后CloudFront继续分析解密出的权限策略内容,并根据权限策略定义的限制条件来决定是否向客户端提供请求资源。 AWS客户可以开发Web服务或工具软件来向自己的最终用户提供签名URL,就可以让这些最终用户在受限的条件下安全地访问通过CloudFront发布的内容,比如存储在S3中的图片。 AWS客户除了可以在签名URL的权限策略定义中直接限制资源请求客户端可以访问的资源种类、请求发生时间、来源IP地址范围以外,结合CloudFront既有功能还可以进一步限制其发出请求的协议类型(Http或Https)、访问域名类型(CloudFront自动分配域名或客户自有域名)。 整体技术方案 需求 在正式开始创建CloudFront私有内容发布之前,我们首先要明确在创建过程中的一些主要的选项。对于这些选项的不同设置会影响最终所创建的私有内容发布的效果。好在通过CloudFront发布私有内容的主要步骤基本类似,通过了解一个典型的CloudFront私有内容发布的完整过程就可以快速理解和掌握其他方式的发布过程。下面的表格列出了几个主要可选项和我们本次演示所做的选择。   选项 值域 本次选择 源站类型 S3存储桶, 普通Web服务器 S3存储桶 客户端到CloudFront的协议类型 Http, Https Https CloudFront到源站的协议类型 Http, Https Https CloudFront发布点的类型 Web发布点, RTMP发布点 Web发布点 CloudFront发布点的域名类型 CloudFront自动分配的域名, 客户自有域名 客户自有域名 签名类型 签名URL, 签名Cookie 签名URL 权限策略类型 Canned Policy, Custom Policy Custom Policy 架构 一般地,一个完整的高性能私有内容发布平台主要包括四部分:内容源站,加速CDN,身份认证和权限管理,资源请求客户端。基于上面的需求分析,我们可以明确本次介绍中的四部分组成: 内容源站:S3存储桶 加速CDN:CloudFront 身份认证和权限管理:签名URL生成器 […]

Read More

Amazon CloudFront常见错误配置及解决方法

很多的用户在最初使用CloudFront做Web类内容分发的时候遇到无法调通的情况,本文总结了用户在配置过程中遇到的常见错误,内容涵盖了大部分用户遇到的情况。 错误一  源访问权限未放开 这种错误常见于用S3做源的情况, 引起这种错误的原因是s3的访问控制没有对CloudFront开放。从浏览器中返回的错误通常类似于下图: 更具体些,可分为以下两个场景: 场景1. CloudFront使用了Restrict Bucket Access 在创建distribution的时候选择了Restrict Bucket Access 为yes, 但 Grant Read Permissions on Bucket, 选择的是”No, I Will Update Permissions”, 而用户事后却没有在s3的桶里更新policy。如下图所示。 解决方法: 方法1, 在S3中增加桶的策略,使该桶允许该CloudFront访问,以下是policy示例,其中标黄部分需要替换成用户自己的信息。 {                 “Version”: “2008-10-17”,                 “Id”: “PolicyForCloudFrontPrivateContent”,                 “Statement”: [                                 {                                                 “Sid”: “1”,                                                 “Effect”: “Allow”,                                                 “Principal”: {                                                                 “AWS”: “arn:aws:iam::CloudFront:user/CloudFront Origin Access […]

Read More