

# 限制对文件的访问
<a name="private-content-overview"></a>

您可通过两种方式控制用户对私有内容的访问：
+ [限制对 CloudFront 缓存中的文件的访问](#private-content-overview-edge-caches)。
+ 通过执行下列操作之一，限制对您源中文件的访问：
  + [为 Amazon S3 存储桶设置源访问控制 (OAI](private-content-restricting-access-to-s3.md))。
  + [为私有 HTTP 服务器（自定义源）配置自定义标头。](#forward-custom-headers-restrict-access)

## 限制对 CloudFront 缓存中的文件的访问
<a name="private-content-overview-edge-caches"></a>

您可以将 CloudFront 配置为要求用户使用*签名 URL* 或*签名 Cookie* 访问您的文件。然后开发应用程序，以创建签名 URL 并将其分发给经身份验证的用户，或者为经身份验证的用户发送用于设置签名 Cookie 的 `Set-Cookie` 标头。（要为一些用户提供长期访问少量文件的权限，还可以手动创建签名 URL。） 

创建签名 URL 或签名 Cookie 以控制对您的文件的访问时，可以指定以下限制：
+ 结束日期和时间，在此之后，URL 不再有效。
+ （可选）URL 生效的日期和时间。
+ （可选）可用于访问您的内容的 IP 地址或计算机的地址范围。

签名 URL 或签名 Cookie 的其中一部分使用公有/私有密钥对中的私有密钥进行哈希处理和签名。当某人使用签名 URL 或签名 Cookie 访问文件时，CloudFront 将比较 URL 或 Cookie 的已签名部分和未签名部分。如果它们不匹配，则 CloudFront 将不提供该文件。

您必须使用 RSA 2048 或 ECDSA 256 私有密钥来对 URL 或 Cookie 进行签名。

## 限制对 Amazon S3 存储桶中文件的访问
<a name="private-content-overview-s3"></a>

您可以选择保护 Amazon S3 存储桶中的内容，以便用户可以通过指定的 CloudFront 分配访问内容，但不能使用 Amazon S3 URL 直接访问内容。这可防止其他人绕过 CloudFront 并使用 Amazon S3 URL 访问您希望限制访问的内容。虽然此步骤未要求使用签名 URL，但我们建议使用。

如需要求用户通过 CloudFront URL 访问内容，请执行以下任务：
+ 为 CloudFront *源访问控制*授予读取 S3 存储桶中的文件的权限。
+ 创建源访问控制，并将其与您的 CloudFront 分配相关联。
+ 删除其他任何人使用 Amazon S3 URL 读取这些文件的权限。

有关更多信息，请参阅 [限制对 Amazon S3 源的访问](private-content-restricting-access-to-s3.md)。

## 在自定义源上限制对文件的访问
<a name="forward-custom-headers-restrict-access"></a>

如果您使用自定义源，则可以选择设置自定义标头来限制访问。要使 CloudFront 从自定义源获取文件，CloudFront 必须使用标准 HTTP（或 HTTPS）请求访问这些文件。但是，使用自定义标头，您可以进一步限制对内容的访问，使得用户只能通过 CloudFront 进行访问而无法直接访问。虽然此步骤未要求使用签名 URL，但我们建议使用。

如需要求用户通过 CloudFront 访问内容，请在 CloudFront 分配中更改以下设置：

**源自定义标头**  
将 CloudFront 配置为将自定义标头转发到源。请参阅 [配置 CloudFront 以便向源请求添加自定义标头](add-origin-custom-headers.md#add-origin-custom-headers-configure)。

**查看器协议策略**  
将分配配置为要求查看器使用 HTTPS 访问 CloudFront。请参阅 [查看器协议策略](DownloadDistValuesCacheBehavior.md#DownloadDistValuesViewerProtocolPolicy)。

**源协议策略**  
将分配配置为要求 CloudFront 与查看器使用相同协议来向源转发请求。请参阅 [协议（仅自定义源）](DownloadDistValuesOrigin.md#DownloadDistValuesOriginProtocolPolicy)。

进行了这些更改之后，在自定义源上更新应用程序，以仅接受满足如下条件的请求：其中包含您已将 CloudFront 配置为发送的自定义标头。

**查看器协议策略**和**源协议策略**的组合可确保在传输过程中对自定义标头进行加密。但是，建议您定期执行以下任务来轮换 CloudFront 转发到源的自定义标头：

1. 更新 CloudFront 分配，开始将新标头转发至自定义源。

1. 更新应用程序以接受新标头，从而确认请求来自 CloudFront。

1. 当请求不再包含您要替换的标头时，请更新应用程序以便不再接受旧标头，从而确认请求来自 CloudFront。