Amazon CloudFront
开发人员指南 (API 版本 2016-09-29)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用签名 URL

签名 URL 包括额外的信息,例如,过期日期和时间,为您提供内容访问方面的更多控制权。该额外信息出现在策略声明中,且是基于固定策略或自定义策略。固定策略和自定义策略之间的差别将在接下来的两节中予以说明。

注意

针对相同分配,您可以使用固定策略创建一些签名 URL 以及使用自定义策略创建一些签名 URL。

为签名 URL 选择标准策略或自定义策略

创建签名 URL 时,需要编写 JSON 格式的策略声明,以指定对签名 URL 的限制,例如,URL 的有效期。可以使用标准策略或自定义策略。以下是标准策略和自定义策略的比较:

描述 标准策略 自定义策略

可对多个文件重复使用策略声明。要重复使用策略声明,您必须在 Resource 对象中使用通配符。有关更多信息,请参阅 在使用自定义策略的签名 URL 的策略声明中指定的值。)

可指定用户开始访问内容的日期和时间。

是(可选)

可指定用户无法再访问内容的日期和时间。

可指定能够访问内容的用户的 IP 地址或 IP 地址范围。

是(可选)

签名 URL 包括策略的 Base64 编码版本,这会导致更长的 URL。

有关使用标准 策略创建签名 URL 的信息,请参阅使用固定政策创建签名 URL

有关使用自定义 策略创建签名 URL 的信息,请参阅使用自定义政策创建签名 URL

签名 URL 的工作方式

下面概述了如何为签名 URL 配置 CloudFront 和 Amazon S3,以及在用户使用签名 URL 请求文件时 CloudFront 如何响应。

  1. 在您的 CloudFront 分配中,指定一个或多个您希望有权限创建签名 URL 的 AWS 账户的可信签署人。

    有关更多信息,请参阅 指定可创建签名 URL 和签名 Cookie 的 AWS 账户 (可信签署人)

  2. 您开发应用程序,以确定用户是否应拥有对您的内容的访问权,以及为您希望限制访问的文件或应用程序的某些部分创建签名 URL。有关更多信息,请参阅以下主题:

  3. 用户请求您要求对其使用签名 URL 的文件。

  4. 应用程序验证用户是否有权访问文件:他们已登录、已付费访问内容或已满足一些其他访问要求。

  5. 您的应用程序创建并返回签名 URL 给用户。

  6. 签名 URL 允许用户下载或流式传输内容。

    此步骤是自动的;用户通常不必做任何额外的事情以访问内容。例如,如果用户是在 Web 浏览器中访问您的内容,那么您的应用程序会将签名 URL 发回浏览器。浏览器立即在无用户干预的情况下使用签名 URL 访问 CloudFront 边缘缓存中的文件。

  7. CloudFront 使用公有密钥验证签名并确认该 URL 没有被篡改。如果签名无效,则请求将被拒绝。

    如果签名有效,CloudFront 将查看 URL 中的策略声明 (如果使用标准策略,则构造一个),以确认该请求仍然有效。例如,如果您为该 URL 指定了开始和结束日期及时间,CloudFront 会确认用户是否是在您希望允许访问的时间段尝试访问您的内容。

    如果请求满足策略声明中的要求,CloudFront 将执行标准操作:确定文件是否已位于边缘缓存中,必要时将请求转发到源,然后向用户返回文件。

注意

签名 CloudFront URL 不能包含额外的查询字符串参数。如果在创建查询字符串后将其添加到签名 URL 中,该 URL 将返回 HTTP 403 状态。

选择签名 URL 的有效时间

您可以使用仅在很短时间内有效(可能只有几分钟)的签名 URL 分配私有内容。—有效时间如此短的签名 URL 适用于出于有限的目的即时向用户分发内容,如按需向客户分发租赁的电影或下载的音乐。如果您的签名 URL 有效期较短,您将可能希望使用您开发的应用程序自动生成它们。当用户开始下载文件或开始播放媒体文件时,CloudFront 将比较 URL 中的过期时间和当前时间,以确定 URL 是否仍然有效。

您也可使用有效时间较长 (可能数年) 的签名 URL 来分配私有内容。有效时间较长的签名 URL 适用于向已知用户分发私有内容,如向投资者分发业务计划或向员工分发培训材料等。您可开发应用程序,以为您产生长期的签名 URL,或您可以使用配置私有内容的工具和代码示例中所列的第三方 GUI工具之一。

CloudFront 何时检查签名 URL 中的过期日期和时间?

CloudFront 何时检查签名 URL 中的过期日期和时间来确定该 URL 是否仍有效,取决于该 URL 是用于 Web 分配还是用于 RTMP 分配:

  • Web 分配 – 在发出 HTTP 请求时,CloudFront 检查签名 URL 中的过期日期和时间。如果客户端刚好在过期时间之前开始下载大型文件,即使在下载过程中到了过期时间,该下载也应该完成。如果 TCP 连接断开,并且客户端试图在过期时间到期后重新开始下载,则下载将会失败。

    如果客户端使用 Range GET 来获取较小的文件,在过期时间到期后发生的任何 GET 请求将会失败。有关 Range GET 的更多信息,请参阅CloudFront 如何处理对象的部分请求(Range GET)

  • RTMP 分配 – 在播放事件开始时,CloudFront 检查签名 URL 中的过期时间。如果客户端在过期时间到期之前开始播放媒体文件,CloudFront 将允许播放整个媒体文件。然而,根据媒体播放器,暂停和重新开始可能触发另一个播放事件。跳到媒体文件中另一个位置将触发另一个播放事件。如果在过期时间到期后发生播放事件,CloudFront 不会提供媒体文件。

示例代码和第三方工具

有关创建签名 URL 哈希和签署部分的示例代码,请参阅以下主题:

有关支持私有内容的第三方工具的信息,包括创建签名 URL,请参阅 配置私有内容的工具和代码示例