许多通过互联网分发内容的公司都希望限制对文档、业务数据、流媒体或面向选定用户(例如付费用户)的内容的访问。要使用 CloudFront 安全地提供这种私有内容,可执行以下操作:

  • 要求用户使用特殊的 CloudFront 签名 URL 或签名 Cookie 访问私有内容。

  • 要求您的用户使用 CloudFront URL 访问内容,而不是直接用源服务器(例如 Amazon S3 或私有 HTTP 服务器)上的 URL 访问内容。CloudFront URL 不是必需的,但建议使用,以防止用户绕过在签名 URL 或签名 Cookie 中指定的限制。

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

注意

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

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

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

描述 标准策略 自定义策略

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

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

是(可选)

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

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

是(可选)

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

签名 URL 的工作方式

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

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

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

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

    • 使用固定政策创建签名 URL

    • 使用自定义政策创建签名 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 不会提供媒体文件。

    注意

    Adobe 宣布将在 2020 年 12 月 31 日前停用 Flash。因此,Amazon CloudFront 将不再支持 Adobe Flash Media Server,并将在 2020 年 12 月 31 日前弃用实时消息协议 (RTMP) 发行版。有关更多信息,请参阅 Amazon CloudFront 开发论坛上的完整通告。

使用签名 URL 和已签名的 Cookie 提供私有内容相关推荐

  1. 存储桶上传策略和签名 URL的绕过及利用

    本文中带有自己一些拙见,读者若存在相关问题或者有其他想法的,欢迎在评论区交流探讨.原文:https://labs.detectify.com/2018/08/02/bypassing-exploiti ...

  2. 阿里云OSS获取文件强制下载的签名URL

    需求: 视频文件在后台可预览,可下载. 目前难题: 在点击下载时,OSS的签名url在浏览器中会直接播放,不提示下载 原因 : OSS在上传时未指定文件元信息.官方推荐,指定文件元信息 'Conten ...

  3. 刷步恢复使用Unv0ver6.0.1工具已签名,附在线安装地址!

    iOS区证书掉签状态 目前Unc0ver6.0.1已签名,可在线安装 其它应用掉签,无法安装 Unc0ver6.0.1 最新版本:6.0.1 支持设备:A7-A14 根据官方更改日志,unc0ver ...

  4. iOS14越狱Unv0ver6.0.0工具已签名!附在线安装地址!

    iOS区证书掉签状态 目前Unc0ver6.0.0已签名ok,可在线安装 其它应用掉签,无法安装 Unc0ver6.0.0 最新版本:6.0.0 支持设备:A7-A14 支持固件:A7-A13设备的i ...

  5. CloudFront签名URL

    目的 使用CloudFront签名URL机制来实现,下载文件安全. 前提 已经为CloudFront设置好密钥组,并且启用CloudFront签名URL机制来下载s3文件选项. Maven ...&l ...

  6. python生成签名sign(按照字典中的key的ascii码排序加上对应的key转换成url形式生成md5签名)

    Python签名 按照字典中的key的ascii码排序加上对应的key转换成url形式生成md5签名 请求参数(参数字典) parm = {"UnionId":"8888 ...

  7. iis服务器配置微信php,IIS+PHP下微信二次开发JS-SDK签名失败(已解决)

    今天朋友丢个页面给我让配置下微信分享信息(标题,摘要,图片). 二话不说,从微信开发文档里面把JS-SDK的下载下来,然后按开发文档说的那样做好配置.但是签名一直失败啊~~~~,我想很多新手跟我一样, ...

  8. java接口 密钥签名作用_api接口签名加密请求(二)

    在"api接口签名加密请求,从springmvc4项目搭建开始"篇文章,讲述了使用java springmvc搭建api接口请求例子.为了方便php能调用,接着写了php的demo ...

  9. java jnlp 签名_JNLP(jar包签名)

    JNLP(Java Network Launching Protocol )是java提供的一种可以通过浏览器直接执行java应用程序的途径,它使你可以直接通过一个网页上的url连接打开一个java应 ...

最新文章

  1. ubuntu 12 JDK 编译
  2. 百度编辑器上传图片自定义路径,访问路径动态加载
  3. 访问服务器 request.getheader(origin)为null_服务器磁盘不足,1分钟快速搞定!
  4. SpringBoot集成Thymeleaf
  5. 我曾经是怎么做面试官的
  6. C++语言实现-邻接矩阵
  7. 根据android版本号,增加兼容性处理
  8. Wondows Sever 2003密钥【收集】
  9. 电脑专业英语1695词
  10. java 货币格式 转换_Java 转换货币形式
  11. 多媒体融合通信系统在铁路系统编组站的应用
  12. linux 常用命令 ln/cat/echo/grep/sed/tar/wc/find/ssh/scp/strace/strings/dd/chrt/iostat/rotatelogs/dstat
  13. STM32开发实例 基于STM32单片机的智能机房系统
  14. RSS2021中 有关复杂环境导航的论文
  15. Springboot整合Lombok
  16. 转 Lua标准库: table函数, 数学函数, 字符串函数/格式化/配对, WoW新增函数, 函数别名...
  17. 定期清理执行垃圾回收代码
  18. 面经/字节跳动,面试流程及问题分享(附答案)
  19. Android之第三方框架使用汇总
  20. es 本地上传文件ftp服务器,es文件浏览器自动上传ftp服务器

热门文章

  1. 用计算机连续计算五道题,事业单位数量关系:数学运算-给我十分钟,还你五道题...
  2. IOI车机系统刷机和改包笔记
  3. 同步、异步与阻塞、非阻塞经典段子(来自网络)
  4. Vue _ 后台管理
  5. Docker是什么?可以用Docker做什么?
  6. Android Studio 自动更新失败解决办法
  7. 计算机图形学 Bresenham直线生成算法
  8. 数据预处理流程图思维导图
  9. 千千静听歌词窗体分析
  10. 如何学习嵌入式? 嵌入式之路从入门到放弃....