使用固定政策创建签名 URL - Amazon CloudFront
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

使用固定政策创建签名 URL

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

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

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

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

    
										1
									Base URL for the file

    基本 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
									Your query string parameters, if any&

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

    color=red&size=medium

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

    重要

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

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

    
										4
									Expires=date and time in Unix time format (in seconds) and Coordinated Universal Time (UTC)

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

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

    
										5*
									&Signature=hashed and signed version of the policy statement

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

    
										6
									&Key-Pair-Id=active CloudFront key pair Id for the key pair that you're using to generate the signature

    有效 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 的策略声明中指定的值

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

Resource

指定的值取决于是为 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 如何通过使用罐头策略创建网络分发或RTMP分布的签名(无AdobeFlashPlayer)

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

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

    注意

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

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

  3. 使用 MIME Base64 编码对字符串进行 Base64 编码。有关详细信息,请参阅 第6.8节,Base64内容传输编码RFC2045、MIME(多用途互联网邮件扩展)第一部分: 互联网消息机构的格式.

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

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

    +

    - (连字符)

    =

    _(下划线)

    /

    ~(波浪字符)

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

选项 2:要通过使用罐式策略创建一个通过罐装策略创建的RTMP分布签名(AdobeFlashPlayer)

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

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

    注意

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

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

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

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

  3. 使用 MIME Base64 编码对字符串进行 Base64 编码。有关详细信息,请参阅 第6.8节,Base64内容传输编码RFC2045、MIME(多用途互联网邮件扩展)第一部分: 互联网消息机构的格式.

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

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

    +

    - (连字符)

    =

    _(下划线)

    /

    ~(波浪字符)

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

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

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

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

    ?

    %3F

    &

    %26

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