使用标准策略创建签名 URL - Amazon CloudFront

使用标准策略创建签名 URL

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

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

  2. 按照列出的顺序连接以下值,复制本示例签名 URL 中显示的格式:

    https://d111111abcdef8.cloudfront.net/image.jpg?color=red&size=medium&Expires=1357034400&Signature=nitfHRCrtziwO2HwPfWw~yYDhUF5EwRunQA-j19DzZrvDh6hQ73lDx~-ar3UocvvRQVw6EkC~GdpGQyyOSKQim-TxAnW7d8F5Kkai9HVx0FIu-5jcQb0UEmatEXAMPLE3ReXySpLSMj0yCd3ZAB4UcBCAqEijkytL6f3fVYNGQI6&Key-Pair-Id=K2JCJMDEHXQW5F

    删除所有空格(包括制表符和换行符)。您可能需要在应用程序代码的字符串中包括换码符。所有值的类型均为 String

    1. 文件的基本 URL

    基本 URL 是您将用于访问文件的 CloudFront URL,如果您不使用签名 URL,包括您自己的查询字符串参数(如果有)。在上一示例中,基本 URL 为 https://d111111abcdef8.cloudfront.net/image.jpg。有关适用于分配的 URL 格式的更多信息,请参阅在 CloudFront 中自定义文件的 URL 格式

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

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

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

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

    • 以下 CloudFront URL 适用于分配中的映像文件。均使用备用域名。第二个包括查询字符串:

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

      https://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

    则将该参数添加在 ? 之后,且位于 Expires 参数之前。在某些罕见情况下,可能需要将查询字符串参数放在 Key-Pair-Id 之后。

    重要

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

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

    4. Expires=Unix 时间格式(按秒计)和协调世界时(UTC)格式的日期和时间

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

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

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

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

    6. &Key-Pair-Id=CloudFront 公有密钥的公有密钥 ID,您使用该公有密钥的对应私有密钥来生成签名

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

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

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

要为使用标准策略的签名 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 参数,例如:

https://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 中使用以下示例策略声明时,用户将可以访问文件 https://d111111abcdef8.cloudfront.net/horizon.jpg,直至 UTC 时间 2013 年 1 月 1 日上午 10 点:

{ "Statement": [ { "Resource": "https://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 的各部分的串连。