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

使用固定政策创建签名 URL

要使用标准策略创建签名 URL,请执行以下过程。

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

  1. 如果您使用 .NET 和 Java 创建签名 URL,而且,如果您尚未将密钥对私有密钥的格式从默认 .pem 格式重新设置为与 .NET 和 Java 兼容的格式,那么现在就开始设置吧。有关更多信息,请参阅 重新设置 CloudFront 密钥对的格式(仅 .NET 和 Java)。

  2. 按指定顺序将下列值串连在一起并删除各部分之间的空格 (包括制表符和换行符)。您可能需要在应用程序代码的字符串中包括换码符。所有值都有一个 String 类型。在后面的两个示例中,每个部分是按编号 ( 
								1
							) 键入的。

    
										1
									文件的基本 URL

    基本 URL 是您将用于访问文件的 CloudFront URL,如果您不使用签名 URL,包括您自己的查询字符串参数(如果有)。有关适用于 Web 分配的 URL 格式的更多信息,请参阅在 CloudFront 中自定义文件的 URL 格式

    以下示例显示了您为 Web 分配指定的值。

    • 以下 CloudFront URL 用于 Web 分配中的文件(使用 CloudFront 域名)。请注意,image.jpg 是在 images 目录中。URL 中文件的路径必须与您 HTTP 服务器或您 Amazon S3 存储桶中文件的路径匹配。

      http://d111111abcdef8.cloudfront.net/images/image.jpg

    • 以下 CloudFront URL 包括查询字符串:

      http://d111111abcdef8.cloudfront.net/images/image.jpg?size=large

    • 以下 CloudFront URL 用于 Web 分配中的文件。两者都使用备用域名,第二个包括查询字符串:

      http://www.example.com/images/image.jpg

      http://www.example.com/images/image.jpg?color=red

    • 以下 CloudFront URL 用于使用备用域名和 HTTPS 协议的 Web 分配中的文件:

      https://www.example.com/images/image.jpg

    对于 RTMP 分配,以下示例用于采用两种不同视频格式(MP4 和 FLV)的文件:

    • MP4mp4:sydney-vacation.mp4

    • FLVsydney-vacation

    • FLVsydney-vacation.flv

    注意

    对于 .flv 文件,是否包括.flv文件扩展名取决于您的播放器。要提供 MP3 音频文件或 H.264/MPEG-4 视频文件,您可能需要用 mp3:mp4: 作为文件名的前缀。某些媒体播放器可配置,以自动添加前缀。媒体播放器还可能要求您指定无文件扩展名的文件名(例如,sydney-vacation,而不是 sydney-vacation.mp4)。

    
										2
									?

    ? 表示查询字符串参数位于基本 URL 后面。即使您没有任何自己的查询字符串参数,也会包含 ?

    
										3
									您的查询字符串参数(如果有)&

    该值为可选项。如果您想添加自己的查询字符串参数,例如:

    color=red&size=medium

    则在 ?(请参阅 
											2
										)后面以及 Expires 参数前面添加这些参数。在某些罕见情况下,可能需要将查询字符串参数放在 Key-Pair-Id 之后。

    重要

    您的参数不能命名为 ExpiresSignatureKey-Pair-Id

    如果您添加自己的参数,请在每个参数后追加 &,包括最后一个参数。

    
										4
									Expires=Unix 时间格式(以秒为单位)和协调世界时 (UTC) 格式的日期和时间

    您希望 URL 不再允许访问文件的日期和时间。

    指定 Unix 时间格式(以秒为单位) 和协调通用时间 (UTC) 格式的过期日期和时间。例如,2013 年 1 月 1 日上午 10 点 UTC 转换为 Unix 时间格式就是 1357034400。要使用纪元时间,请使用 32 位整数表示日期,该日期不得晚于 2147483647 (2038 年 1 月 19 日,03:14:07 UTC)。有关 UTC 的信息,请参阅 RFC 3339 - Internet 上的日期和时间:时间戳,网址为 http://tools.ietf.org/html/rfc3339

    
										5
									&Signature=经过哈希处理和签名的策略声明版本

    JSON 策略声明经过哈希处理、签署和 Base64 编码的版本。有关更多信息,请参阅为使用标准策略的签名 URL 创建签名

    
										6
									&Key-Pair-Id=用于生成签名的密钥对的有效 CloudFront 密钥对 ID

    有效 CloudFront 密钥对的 ID,例如 APKA9ONS7QCOWEXAMPLE。CloudFront 密钥对 ID 告诉 CloudFront 哪个公有密钥可用于验证签名 URL。CloudFront 将签名中的信息和策略声明中的信息进行比较,以验证该 URL 没有被篡改。

    包括在 CloudFront 签名 URL 中的密钥对 ID 必须是可信签署人之一的有效密钥对:

    • Web 分配 – 密钥对必须与作为缓存行为的可信签署人之一的 AWS 账户相关联。

    • RTMP 分配 – 密钥对必须与作为分配的可信签署人之一的 AWS 账户相关联。

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

    如果您在轮换 CloudFront 密钥对时使密钥对无效,并且如果您以编程方式产生签名 URL,您必须更新您的应用程序,以使用可信签署人之一的新的有效密钥对。如果您手动产生签名 URL,您必须创建新的签名 URL。有关轮换密钥对的更多信息,请参阅 轮换 CloudFront 密钥对

Web 分配的签名 URL 示例:


							1
						http://d111111abcdef8.cloudfront.net/image.jpg 
							2
						? 
							3
						color=red&size=medium& 
							4
						Expires=1357034400 
							5
						&Signature=nitfHRCrtziwO2HwPfWw~yYDhUF5EwRunQA-j19DzZrvDh6hQ73lDx~-ar3UocvvRQVw6EkC~GdpGQyyOSKQim-TxAnW7d8F5Kkai9HVx0FIu-5jcQb0UEmatEXAMPLE3ReXySpLSMj0yCd3ZAB4UcBCAqEijkytL6f3fVYNGQI6 
							6
						&Key-Pair-Id=APKA9ONS7QCOWEXAMPLE

RTMP 分配的签名 URL 示例:


							1
						videos/mediafile.flv 
							2
						? 
							3
						color=red&size=medium& 
							4
						Expires=1357034400 
							5
						&Signature=nitfHRCrtziwO2HwPfWw~yYDhUF5EwRunQA-j19DzZrvDh6hQ73lDx~-ar3UocvvRQVw6EkC~GdpGQyyOSKQim-TxAnW7d8F5Kkai9HVx0FIu-5jcQb0UEmatEXAMPLE3ReXySpLSMj0yCd3ZAB4UcBCAqEijkytL6f3fVYNGQI6 
							6
						&Key-Pair-Id=APKA9ONS7QCOWEXAMPLE

为使用标准策略的签名 URL 创建签名

要为使用标准策略的签名 URL 创建签名,请执行以下过程:

  1. 创建策略声明。请参阅 为使用标准策略的签名 URL 创建策略声明

  2. 签署策略声明以创建签名。请参阅 为使用标准策略的签名 URL 创建签名

为使用标准策略的签名 URL 创建策略声明

使用标准策略创建签名 URL 时,Signature 参数是策略声明经过哈希处理和签署的版本。对于使用固定政策的签名 URL,您没有像对待使用自定义政策的签名 URL那样将政策声明包含在 URL 内。要创建策略声明,请执行以下过程。

为使用固定政策的签名 URL 创建政策声明

  1. 使用以下 JSON 格式以及 UTF-8 字符编码构建策略声明。根据指定,准确包括所有标点符号和其他文本值。有关 ResourceDateLessThan 参数的信息,请参阅 在使用标准策略的签名 URL 的策略声明中指定的值

    { "Statement":[ { "Resource":"base URL or stream name", "Condition":{ "DateLessThan":{ "AWS:EpochTime":ending date and time in Unix time format and UTC } } } ] }
  2. 删除策略声明中的所有空格 (包括制表符和换行符)。您可能需要在应用程序代码的字符串中包括换码符。

在使用标准策略的签名 URL 的策略声明中指定的值

为标准策略创建策略声明时,请指定以下值。

资源

指定的值取决于是为 Web 分配还是为 RTMP 分配创建签名 URL。

注意

只能为 Resource 指定一个值。

Web 分配

包含查询字符串(如果有)的基本 URL,但不包括 CloudFront ExpiresSignatureKey-Pair-Id 参数,例如:

http://d111111abcdef8.cloudfront.net/images/horizon.jpg?size=large&license=yes

请注意以下几点:

  • 协议 – 该值必须以 http://https:// 开头。

  • 查询字符串参数 – 如果没有查询字符串参数,请省略问号。

  • 备用域名 – 如果在 URL 中指定备用域名 (CNAME),则必须在引用网页或应用程序中的文件时指定备用域名。切勿为对象指定 Amazon S3 URL。

RTMP 分配

只包括流名称。例如,流视频的完整 URL 为:

rtmp://s5c39gqb8ow64r.cloudfront.net/videos/cfx/st/mp3_name.mp3

那么为 Resource 使用以下值:

videos/mp3_name

切勿包含诸如 mp3:mp4: 的前缀。此外,根据您所使用的播放器,您可能必须省略 Resource 值的文件扩展名。例如,您可能需要使用 sydney-vacation 而不是 sydney-vacation.flv

DateLessThan

Unix 时间格式(以秒为单位)和协调通用时间 (UTC) 格式的 URL 过期日期和时间。例如,2013 年 1 月 1 日上午 10 点 UTC 转换为 Unix 时间格式就是 1357034400。

该值必须与签名 URL 中的Expires查询字符串参数相匹配。切勿用引号将该值括起来。

有关更多信息,请参阅 CloudFront 何时检查签名 URL 中的过期日期和时间?

使用标准策略的签名 URL 的示例策略声明

当您在签名 URL 中使用以下示例策略声明时,用户将可以访问文件 http://d111111abcdef8.cloudfront.net/horizon.jpg,直至 UTC 时间 2013 年 1 月 1 日上午 10 点:

{ "Statement":[ { "Resource":"http://d111111abcdef8.cloudfront.net/horizon.jpg?size=large&license=yes", "Condition":{ "DateLessThan":{ "AWS:EpochTime":1357034400 } } } ] }

为使用标准策略的签名 URL 创建签名

要为签名 URL 中的 Signature 参数创建值,请对在为使用标准策略的签名 URL 创建策略声明中创建的策略声明进行哈希处理并签署。该步骤有两个版本。为您的场景按照以下步骤操作:

有关额外信息以及如何哈希、签署及编码策略声明的示例,请参阅:

选项 1:通过使用标准策略为 Web 分配或 RTMP 分配 (不使用 Adobe Flash 播放器) 创建签名

  1. 使用 SHA-1 哈希函数和 RSA 对在为使用固定政策的签名 URL 创建政策声明过程中创建的策略声明进行哈希处理并签署。请使用不再包含空格的策略声明版本。

    对于散列函数所要求的私钥,使用与有效可信签署人关联的私钥。

    注意

    您用于哈希及签署策略声明的方法取决于您的编程语言和平台。有关示例代码,请参阅 为签名 URL 创建签名的代码示例

  2. 删除经过哈希处理并签署的字符串中的空格 (包括制表符和换行符)。

  3. 使用 MIME Base64 编码对字符串进行 Base64 编码。有关更多信息,请参阅 RFC 2045, MIME (Multipurpose Internet Mail Extensions) Part One: Format of Internet Message Bodies 中的 Section 6.8, Base64 Content-Transfer-Encoding

  4. 用有效的字符替换 URL 查询字符串中的无效字符。下表列出了无效和有效字符。

    替换这些无效字符 使用这些有效字符

    +

    - (连字符)

    =

    _(下划线)

    /

    ~(波浪字符)

  5. 将结果值附在签名 URL 的 &Signature= 之后,然后返回 要使用固定政策创建签名 URL,以完成签名 URL 的各部分的串连。

选项 2:通过使用标准策略为 RTMP 分配 (使用 Adobe Flash 播放器) 创建签名

  1. 使用 SHA-1 哈希函数和 RSA 对在为使用固定政策的签名 URL 创建政策声明过程中创建的策略声明进行哈希处理并签署。请使用不再包含空格的策略声明版本。

    对于散列函数所要求的私钥,使用与有效可信签署人关联的私钥。

    注意

    您用于哈希及签署策略声明的方法取决于您的编程语言和平台。有关示例代码,请参阅 为签名 URL 创建签名的代码示例

  2. 删除经过哈希处理并签署的字符串中的空格 (包括制表符和换行符)。

    如果您使用 Adobe Flash 播放器且从网页中通过了流名称,请继续执行第 3 步。

    如果您使用 Adobe Flash 播放器且从网页中未通过流名称,请跳过本过程的其余步骤。例如,如果您编写从 Adobe Flash .swf 文件内获取流名称的自己的播放器,请跳过本过程的其余步骤。

  3. 使用 MIME Base64 编码对字符串进行 Base64 编码。有关更多信息,请参阅 RFC 2045, MIME (Multipurpose Internet Mail Extensions) Part One: Format of Internet Message Bodies 中的 Section 6.8, Base64 Content-Transfer-Encoding

  4. 用有效的字符替换 URL 查询字符串中的无效字符。下表列出了无效和有效字符。

    替换这些无效字符 使用这些有效字符

    +

    - (连字符)

    =

    _(下划线)

    /

    ~(波浪字符)

  5. Adobe Flash 播放器的一些版本要求您对字符 ?、= 和 & 进行 URL 编码。有关您的 Adobe Flash 播放器版本是否要求此字符替换的信息,请参阅 Adobe 网站。

    如果您的 Flash 版本不要求 URL 编码这些字符,请跳到第 6 步。

    如果您的 Flash 版本要求 URL 编码这些字符,根据下表中的指示替换它们。(您在上一步中已经替换了 =。)

    替换这些无效字符 使用此 URL 编码

    ?

    %3F

    &

    %26

  6. 将结果值附在签名 URL 的 &Signature= 之后,然后返回 要使用固定政策创建签名 URL,以完成签名 URL 的各部分的串连。