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

使用标准策略创建签名 URL

要使用标准策略创建签名 URL,请完成以下步骤。

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

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

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

    
										1
									文件的基本 URL

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

    • 以下 CloudFront URL 适用于分配中的图像文件(使用 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 适用于分配中的映像文件。两者都使用备用域名,第二个包括查询字符串:

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

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

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

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

    
										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 上的日期和时间:时间戳,网址为 https://tools.ietf.org/html/rfc3339

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

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

    
									6
								&Key-Pair-Id=您用于生成签名的相应私有密钥的 CloudFront 公有密钥的公有密钥 ID

    CloudFront 公有密钥的 ID,例如,K2JCJMDEHXQW5F。公有密钥 ID 告诉 CloudFront 要使用哪个公有密钥来验证签名的 URL。CloudFront 将比较签名中的信息与政策声明中的信息,以确认该 URL 没有被篡改。

    此公有密钥必须属于作为分配中可信签署人的密钥组。有关更多信息,请参阅 指定可以创建签名 URL 和签名 Cookie 的签署人

签名 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=K2JCJMDEHXQW5F

为使用标准策略的签名 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 指定一个值。

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

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

请注意以下几点:

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

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

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

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:使用标准策略创建签名

  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 的各部分的串连。