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

指定可创建签名 URL 和签名 Cookie 的 AWS 账户 (可信签署人)

要创建签名 URL 或签名 Cookie,至少需要一个具有有效 CloudFront 密钥对的 AWS 账户。该账户被称为可信签署人。可信签署人有两个用途:

  • 只要将可信签署人的 AWS 账户 ID 添加到分配中,CloudFront 就会立即开始要求用户使用签名 URL 或签名 Cookie 访问文件。

  • 创建签名 URL 或签名 Cookie 时,使用可信签署人的私有密钥来签署 URL 或 Cookie 的一部分。当某人请求限制的文件时,CloudFront 会比较 URL 或 Cookie 的已签名部分与未签名部分,以确认 URL 或 Cookie 未被篡改。CloudFront 还会验证 URL 或 Cookie 是否有效,即,未超过过期日期和时间。

指定可信签署人时,还会间接指定要求签名 URL 或签名 Cookie 的文件:

  • Web 分配 – 将可信签署人添加到缓存行为中。如果分配只有一个缓存行为,用户则必须使用签名 URL 或签名 Cookie 访问与该分配关联的任何文件。如果创建了多个缓存行为,并将可信签署人添加到某些缓存行为中而没有添加到其他缓存行为中,则可要求用户使用签名 URL 或签名 Cookie 访问某些文件而不是其他文件。

  • RTMP 分配(仅签名 URL) – 将可信签署人添加到分配中。在您将可信签署人添加到 RTMP 分配后,用户必须使用签名 URL 访问与该分配相关联的任何文件。

注意

要为分配指定可信签署人,您必须使用 CloudFront 控制台或 CloudFront API 版本 2009-09-09 或更高版本。

要指定可创建签名 URL 或签名 Cookie 的账户并将账户添加到 CloudFront 分配中,请执行以下任务:

  1. 决定您要使用哪个 AWS 账户作为可信签署人。大多数 CloudFront 客户使用他们用于创建分配的账户。

  2. 对于您在第 1 步中选择的每个账户,创建 CloudFront 密钥对。有关更多信息,请参阅 为可信签署人创建 CloudFront 密钥对

  3. 如果使用 .NET 或 Java 创建签名 URL 或签名 Cookie,请重新设置 CloudFront 私有密钥的格式。有关更多信息,请参阅 重新设置 CloudFront 密钥对的格式(仅 .NET 和 Java)。

  4. 在为其创建签名 URL 或签名 Cookie 的分配中,指定可信签署人的 AWS 账户 ID。有关更多信息,请参阅将可信签署人添加到您的分配中

  5. (可选)验证 CloudFront 是否能够识别您的可信签署人具有有效的 CloudFront 密钥对。有关更多信息,请参阅验证可信签署人是有效的(可选)

为可信签署人创建 CloudFront 密钥对

用于创建 CloudFront 签名 URL 或签名 Cookie 的每个 AWS 账户(可信签署人)必须具有自己的 CloudFront 密钥对,并且密钥对必须有效。——请注意,无法使用 Amazon EC2 密钥对替换 CloudFront 密钥对。在创建 CloudFront 签名 URL 或签名 Cookie 时,应将可信签署人密钥对的密钥对 ID 包含在 URL 中。Amazon EC2 不提供密钥对 ID。

要帮助保护您的应用程序,我们建议您每 90 天或更频繁地更改 CloudFront 密钥对。有关更多信息,请参阅 轮换 CloudFront 密钥对

可以通过下列方法之一来创建密钥对:

在 AWS 管理控制台中创建 CloudFront 密钥对

  1. 使用 AWS 账户的根凭证登录 AWS 管理控制台。

    重要

    IAM 用户无法创建 CloudFront 密钥对。必须使用根凭证登录才能创建密钥对。

  2. 账户名称菜单上,单击安全凭证

  3. 展开 CloudFront 密钥对

  4. 确认没有或仅拥有一个有效的密钥对。如果已有两个有效的密钥对,则无法创建密钥对。

  5. 单击 Create New Key Pair (创建新的密钥对)

  6. 创建密钥对对话框中,单击下载私有密钥文件

  7. 打开 <filename>对话框中,接受保存文件的默认值,然后单击确定以下载并保存 CloudFront 密钥对的私有密钥。

    重要

    将 CloudFront 密钥对的私有密钥保存在安全的位置,并设置对文件的权限,以便只有所需的管理员用户可读取它。如果某人获取您的私有密钥,则他们可以生成有效的签名 URL 和签名 Cookie,并下载您的内容。您不能再次获得私有密钥,因此,如果您丢失了或删除了它,您必须创建新 CloudFront 密钥对。

  8. 记录密钥对的密钥对 ID。(在 AWS 管理控制台 中,这称为访问密钥 ID。) 创建签名 URL 或签名 Cookie 时会用到它。

创建 RSA 密钥对并将公有密钥上传到 AWS 管理控制台 中

  1. 使用 OpenSSL 或其他工具创建密钥对。

    例如,如果使用 OpenSSL,则可以使用以下命令生成一个长度为 4096 位的密钥对,并将其保存到文件 private_key.pem 中:

    openssl genrsa -out private_key.pem 4096

    生成的文件同时包含公有密钥和私有密钥。要从该文件中提取公有密钥,请运行以下命令:

    openssl rsa -pubout -in private_key.pem -out public_key.pem

    公有密钥 (public_key.pem) 是在此过程的稍后步骤中上传的文件。

    注意密钥的以下要求:

    • 密钥对必须为 SSH-2 RSA 密钥对。

    • 密钥对必须采用 Base64 编码的 PEM 格式。

    • 支持的密钥长度为 1024、2048 和 4096 位。

  2. 使用 AWS 账户的根凭证登录 AWS 管理控制台。

    重要

    IAM 用户无法创建 CloudFront 密钥对。必须使用根凭证登录才能创建密钥对。

  3. 账户名称菜单上,单击安全凭证

  4. 展开 CloudFront 密钥对

  5. 确认没有或仅拥有一个有效的密钥对。如果您已经有两个有效的密钥对,则无法上传自己的密钥对。

  6. 单击 Upload Your Own Key Pair

  7. Upload Your Own Key Pair 对话框中,单击 Choose File 并选择在第 1 步中创建的公有密钥文件。

  8. 单击上传

    将关闭上传密钥对对话框,并在 CloudFront 密钥对列表顶部显示新密钥对。

  9. 记录密钥对的密钥对 ID。(在 AWS 管理控制台 中,这称为访问密钥 ID。) 创建签名 URL 或签名 Cookie 时会用到它。

重新设置 CloudFront 密钥对的格式(仅 .NET 和 Java)。

如果使用 .NET 或 Java 创建签名 URL 或签名 Cookie,则不能以默认 .pem 格式使用密钥对中的私有密钥来创建签名:

  • .NET Framework – 将私有密钥转换为 .NET Framework 使用的 XML 格式。可以使用多种工具。

  • Java – 将私有密钥转换为 DER 格式。要做到这一点,您可以使用 OpenSSL:

    $ openssl pkcs8 -topk8 -nocrypt -in origin.pem -inform PEM -out new.der -outform DER

    要确保编码器正常工作,将 Bouncy Castle Java 加密术 API 的 jar 添加到您的项目中,然后添加 Bouncy Castle 提供商。

将可信签署人添加到您的分配中

可信签署人是可为分配创建签名 URL 和签名 Cookie 的 AWS 账户。默认情况下,不允许任何账户 (甚至是创建分配的账户) 创建签名 URL 或签名 Cookie。要指定您想用作可信签署人的 AWS 账户,将账户添加到您的分配中:

  • Web 分配 – 可信签署人与缓存行为相关联。这样,您就可以要求对同一分配中的某些文件使用签名 URL 或签名 Cookie,对另一些文件则不使用。可信签署人只能为与相应的缓存行为相关联的文件创建签名 URL 或 Cookie。例如,如果您有两个可信签署人,他们分别针对两个不同的缓存行为,那么这两个可信签署人均不能为与另一个缓存行为相关联的文件创建签名 URL 或 Cookie。

  • RTMP 分配(仅签名 URL) – 可信签署人与分配相关联。在您将可信签署人添加到 RTMP 分配后,用户必须使用签名 URL 或签名 Cookie 访问与该分配关联的任何对象。

重要

定义路径模式及其顺序时要小心,确保不会无意中为用户提供对您的内容的访问权限,或者阻止他们访问您希望每个人都可以访问的内容。例如,假设请求匹配两个缓存行为的路径模式。第一个缓存行为不要求签名 URL 或签名 Cookie,而第二个缓存行为有此要求。这种情况下,用户不需使用签名 URL 或签名 Cookie 即可访问文件,因为 CloudFront 处理的缓存行为与第一个相符的条件相关联。

更多有关路径模式的信息,请参阅 路径模式

重要

如果要更新已经用于分发内容的分配,则应仅在准备开始生成文件的签名 URL 或签名 Cookie 时添加可信签署人,否则 CloudFront 将拒绝请求:

  • Web 分配 – 在您将可信签署人添加到 Web 分配的缓存行为后,用户必须使用签名 URL 或签名 Cookie 才能访问与该缓存行为相关联的文件。

  • RTMP 分配(仅签名 URL) – 在您将可信签署人添加到 RTMP 分配后,用户必须使用签名 URL 访问与该分配相关联的任何文件。

可信签署人的最大数量取决于分配的类型:

  • Web 分配 – 每个缓存行为最多具有 5 个可信签署人

  • RTMP 分配 – 分配最多具有 5 个可信签署人

您可以使用 CloudFront 控制台或 CloudFront API 将可信签署人添加到您的分配中。请参阅以下主题:

使用 CloudFront 控制台将可信签署人添加到您的分配中

使用 CloudFront 控制台将可信签署人添加到分配中

  1. 如果您想只使用创建分配的 AWS 账户作为可信签署人,请跳到第 2 步。

    如果您希望使用其他 AWS 账户,请获取每个账户的 AWS 账户 ID:

    1. 使用要用作可信签署人的账户登录到 AWS 管理控制台 (https://console.aws.amazon.com/console/home)。

    2. 在控制台的右上角,单击与账户关联的名称,然后单击“My Account”。

    3. 账户设置下,记下账户 ID。

    4. 注销 AWS 管理控制台。

    5. 为您希望用作可信签署人的其他账户重复步骤 a 到步骤 d。

  2. 打开 Amazon CloudFront 控制台 (https://console.aws.amazon.com/cloudfront/),并使用用于创建要添加可信签署人的分配的账户登录。

  3. 单击分配 ID。

  4. 更改编辑模式:

    • Web 分配 – 单击行为选项卡,单击要编辑的行为,然后单击编辑

    • RTMP 分配 – 单击编辑

  5. 对于限制查看器访问(使用签名 URL 或签名 Cookie),单击Yes (是)

  6. 对于 Trusted Signers (可信签名方),为您的场景选中相应复选框:

    • Self (本身) – 如果您想使用当前账户(您用于创建分配的账户),请选中该复选框。

    • Specify Accounts (指定账户) – 如果您想使用其他 AWS 账户,请选中该复选框。

  7. 如果选中 Specify Accounts (指定账户) 复选框,请在 AWS Account Number (AWS 账号) 字段中输入 AWS 账户 ID,即在此过程的第一步中获得的账户 ID。每行输入一个账户 ID。

  8. 单击“Yes, Edit (是的,编辑)”。

  9. 如果要将可信签署人添加到 Web 分配,并且有多个缓存行为,请重复执行第 4 步到第 8 步 。

使用 CloudFront API 将可信签署人添加到您的分配中

可使用 CloudFront API 将可信签署人的 AWS 账户 ID 添加到现有分配中或创建包括可信签署人的新分配。在这两种情况下,在 TrustedSigners 元素中指定适用的值。对于 Web 分配,请将 TrustedSigners 元素添加到一个或多个缓存行为中。对于 RTMP 分配,请将 TrustedSigners 元素添加到该分配中。

请参阅 Amazon CloudFront API Reference 中的以下主题:

验证可信签署人是有效的(可选)

将可信签署人添加到分配后,可能需要验证该签署人是否有效。对于有效的可信签名,必须满足以下条件:

  • AWS 账户必须至少具有一个有效的密钥对。如果您轮换密钥对,该账户将暂时有两个有效的密钥对,旧密钥对和新密钥对。

  • CloudFront 必须知道有效的密钥对。创建密钥对后,可能要稍等片刻 CloudFront 才知道密钥对的存在。

注意

要显示分配有效可信签署人的列表,您目前必须使用 CloudFront API。CloudFront 控制台中不提供有效可信签署人的列表。

使用 CloudFront API 验证可信签署人是有效的

要确定哪个可信签署人具有有效密钥对 (有效可信签署人),您可获取分配并审查 ActiveTrustedSigners 元素中的值。此元素列出了分配标识为可信签署人的每个账户的 AWS 账户 ID。如果可信签署人具有一个或多个 CloudFront 密钥对,ActiveTrustedSigners 元素也会列出密钥对 ID。有关更多信息,请参阅 Amazon CloudFront API Reference 中的以下主题:

轮换 CloudFront 密钥对

AWS 建议您每 90 天旋转(更换)一次您的有效 CloudFront 密钥对。要轮换用于创建签名 URL 或签名 Cookie 的 CloudFront 密钥对,而不使尚未过期的 URL 或 Cookie 失效,请执行以下任务:

  1. 为用于创建签名 URL 的每个账户创建新的密钥对。有关更多信息,请参阅 为可信签署人创建 CloudFront 密钥对

  2. 验证 CloudFront 知道新密钥对的存在。有关更多信息,请参阅 验证可信签署人是有效的(可选)

  3. 更新您的应用程序,以使用新密钥对的私有密钥创建签名。

  4. 确认使用新私有密钥签名 URL 或 Cookie 运行正常。

  5. 等待使用旧 CloudFront 密钥对签名 URL 或 Cookie 中的过期日期已过。

  6. 将旧 CloudFront 密钥对更改为无效

    1. 使用您希望使其密钥对失效的 AWS 账户的根凭证登录 AWS 管理控制台。

    2. 账户名称菜单上,单击安全凭证

    3. 展开 CloudFront 密钥对

    4. 选择特定密钥对,然后选择 Make Inactive (转为非活跃)

    5. 对您希望使其密钥对失效的每个 AWS 账户重复步骤 a 到 d。

  7. 再次确认使用新私有密钥签名 URL 或 Cookie 运行正常。

  8. 删除旧 CloudFront 密钥对:

    1. 访问您的安全凭证页面。

    2. 展开 CloudFront 密钥对

    3. 选择特定的密钥对,然后选择 Delete (删除)

  9. 从保存旧私钥的位置将旧私钥删除。