

# 通过 VPC 源限制访问
<a name="private-content-vpc-origins"></a>

您可以使用 CloudFront，从托管在您的虚拟私有云（VPC）私有子网中的应用程序提供内容。您可以使用私有子网中的应用程序负载均衡器（ALB）、网络负载均衡器（NLB）和 EC2 实例作为 VPC 源。

以下介绍您可能需要使用 VPC 源的一些原因：
+ **安全性** – VPC 源设计用于提升应用程序的安全状况，此方法将您的负载均衡器和 EC2 实例置于私有子网中，从而使 CloudFront 成为单一入口点。用户请求通过私有、安全的连接从 CloudFront 发送到 VPC 源，为您的应用程序增加额外的安全性。
+ **管理** – VPC 源减少了在 CloudFront 与源之间建立安全连接所需的运营开销。您可以将源迁移到不具有公共访问权限的私有子网，而且您不必实施访问控制列表（ACL）或其他机制来限制对源的访问。这样，您无需投资于重复性的开发工作，即可使用 CloudFront 来保障 Web 应用程序的安全。
+ **可扩展性和性能**：VPC 源有助于您保护 Web 应用程序，将时间专注于发展业务关键型应用程序，同时使用 CloudFront 提高安全性并保持高性能和全球可扩展性。VPC 源可简化安全管理并降低操作复杂性，这样您就可以将 CloudFront 用作应用程序的单一入口点。

**提示**  
CloudFront 支持跨 Amazon Web Services 账户共享 VPC 源，无论它们是否在您的组织中。您可以通过 CloudFront 控制台或 Amazon Resource Access Manager（Amazon RAM）共享 VPC 源。有关更多信息，请参阅 [在 CloudFront 中使用共享的资源](sharing-resources.md)。

## 先决条件
<a name="vpc-origin-prerequisites"></a>

在为 CloudFront 分配创建 VPC 源之前，您必须完成以下操作：

### VPC 配置
<a name="vpc-configuration"></a>

在 VPC 源支持的其中一个 Amazon Web Services 区域中，**在 Amazon VPC 上创建虚拟私有云（VPC）**。有关创建 VPC 的信息，请参阅《Amazon VPC 用户指南》**中的[创建 VPC 以及其他 VPC 资源](https://docs.amazonaws.cn/vpc/latest/userguide/create-vpc.html#create-vpc-and-other-resources)。有关受支持区域的列表，请参阅[支持 VPC 源的 Amazon Web Services 区域](#vpc-origins-supported-regions)。

VPC 必须包括以下各项：
+ **互联网网关**：您需要向具有 VPC 源资源的 VPC 添加互联网网关。互联网网关是必需的，以指明 VPC 可以接收来自互联网的流量。互联网网关并不用于将流量路由到子网内的源，您也不需要更新路由策略。
+ **私有子网，有至少一个可用的 IPv4 地址**：CloudFront 使用服务托管式弹性网络接口（ENI）路由到您的子网，CloudFront 在您使用 CloudFront 定义 VPC 源资源后创建该接口。您的私有子网中必须至少有一个可用的 IPv4 地址，这样才能成功完成 ENI 的创建过程。IPv4 地址可以是私有的，无需支付额外费用。不支持仅 IPv6 子网。

### 源资源
<a name="origin-resources"></a>

在私有子网中，启动应用程序负载均衡器、网络负载均衡器或 EC2 实例用作源。您启动的资源必须完全部署并处于活动状态，然后才能将其用作 VPC 源。

**源限制：**
+ 网关负载均衡器不能添加为源
+ 双栈网络负载均衡器不能添加为源
+ 带有 TLS 侦听器的网络负载均衡器不能添加为源
+ 要用作 VPC 源，网络负载均衡器必须附加了一个安全组

### 安全组配置
<a name="security-group-configuration"></a>

您的 VPC 源资源（应用程序负载均衡器、网络负载均衡器或 EC2 实例）必须附加了一个安全组。当您创建 VPC 源时，CloudFront 会自动创建一个采用命名模式 `CloudFront-VPCOrigins-Service-SG` 的服务管理的安全组。此安全组完全由 Amazon 管理，不应编辑。

要支持来自 CloudFront 的流量到达您的 VPC 源，请使用以下方法之一更新附加到源资源（ALB、NLB 或 EC2 实例）的安全组以支持入站流量：
+ **选项 1：**支持来自 CloudFront 托管式前缀列表的流量。有关更多信息，请参阅 [使用 CloudFront 托管前缀列表](LocationsOfEdgeServers.md#managed-prefix-list)。这也可以在创建 VPC 源之前完成。
+ **选项 2：**支持来自 CloudFront 服务托管式安全组 (`CloudFront-VPCOrigins-Service-SG`) 的流量。只有在创建 VPC 源并创建服务托管式安全组之后，才能执行此操作。此配置更具限制性，因为它将流量限制为仅限您的 CloudFront 分配。

**重要**  
请勿使用以 `CloudFront-VPCOrigins-Service-SG` 开头的名称创建您自己的安全组。这是服务托管式安全组的 Amazon 保留命名模式。有关更多信息，请参阅[创建安全组](https://docs.amazonaws.cn/vpc/latest/userguide/creating-security-groups.html)。

### 协议和功能限制
<a name="protocol-feature-restrictions"></a>

VPC 源不支持以下各项：
+ WebSocket
+ gRPC 流量
+ 使用 Lambda@Edge 的源请求和源响应触发器

## 创建 VPC 源（新分配）
<a name="new-vpc-origin"></a>

以下过程演示如何在 CloudFront 控制台中，为新 CloudFront 分配创建 VPC 源。或者，您可以将 [CreateVpcOrigin](https://docs.amazonaws.cn/cloudfront/latest/APIReference/API_CreateVpcOrigin.html) 和 [CreateDistribution](https://docs.amazonaws.cn/cloudfront/latest/APIReference/API_CreateDistribution.html) API 操作与 Amazon CLI 或 Amazon SDK 一起使用。

**为新 CloudFront 分配创建 VPC 源**

1. 通过以下网址打开 CloudFront 控制台：[https://console.amazonaws.cn/cloudfront/v4/home](https://console.amazonaws.cn/cloudfront/v4/home)。

1. 选择 **VPC 源**、**创建 VPC 源**。

1. 填写必填字段。在**源 ARN** 中，选择应用程序负载均衡器、网络负载均衡器或 EC2 实例的 ARN。如果未显示 ARN，可以复制特定资源 ARN，然后将其粘贴到此处。

1. 选择**创建 VPC 源**。

1. 等待 VPC 源状态更改为**已部署**。这一过程耗时最多 15 分钟。

1. 选择**分配**、**创建分配**。

1. 对于**源域**，从下拉列表中选择您的 VPC 源资源。

   如果您的 VPC 源是 EC2 实例，请复制实例的**私有 IP DNS 名称**并粘贴到**源域**字段中。

1. 完成分配的创建。有关更多信息，请参阅 [在控制台中创建 CloudFront 分配](distribution-web-creating-console.md#create-console-distribution)。

## 创建 VPC 源（现有分配）
<a name="existing-vpc-origin"></a>

以下过程演示如何在 CloudFront 控制台中，为现有 CloudFront 分配创建 VPC 源，这有助于确保应用程序的持续可用性。或者，您可以将 [CreateVpcOrigin](https://docs.amazonaws.cn/cloudfront/latest/APIReference/API_CreateVpcOrigin.html) 和 [UpdateDistributionWithStagingConfig](https://docs.amazonaws.cn/cloudfront/latest/APIReference/API_UpdateDistributionWithStagingConfig.html) API 操作与 Amazon CLI 或 Amazon SDK 一起使用。

（可选）您可以选择将 VPC 源添加到现有分配中，而不创建暂存分配。

**为现有 CloudFront 分配创建 VPC 源**

1. 通过以下网址打开 CloudFront 控制台：[https://console.amazonaws.cn/cloudfront/v4/home](https://console.amazonaws.cn/cloudfront/v4/home)。

1. 选择 **VPC 源**、**创建 VPC 源**。

1. 填写必填字段。在**源 ARN** 中，选择应用程序负载均衡器、网络负载均衡器或 EC2 实例的 ARN。如果未显示 ARN，可以复制特定资源 ARN，然后将其粘贴到此处。

1. 选择**创建 VPC 源**。

1. 等待 VPC 源状态更改为**已部署**。这一过程耗时最多 15 分钟。

1. 在导航窗格中，选择**分配**。

1. 选择分配的 ID。

1. 在**常规**选项卡的**持续部署**下，选择**创建暂存分配**。有关更多信息，请参阅 [使用 CloudFront 持续部署来安全地测试 CDN 配置更改](continuous-deployment.md)。

1. 按照**创建暂存分配**向导中的步骤创建暂存分配。其中包括以下步骤：
   + 对于**源**，选择**创建源**。
   + 对于**源域**，从下拉菜单中选择您的 VPC 源资源。

     如果您的 VPC 源是 EC2 实例，请复制实例的**私有 IP DNS 名称**并粘贴到**源域**字段中。
   + 选择**创建源**。

1. 在暂存分配中，测试 VPC 源。

1. 将暂存分配配置提升到主分配。有关更多信息，请参阅 [提升暂存分配的配置](working-with-staging-distribution-continuous-deployment-policy.md#promote-staging-distribution-configuration)。

1. 通过将子网设为私有子网，移除对 VPC 源的公开访问。执行此操作后，VPC 源将无法通过互联网发现，但是 CloudFront 仍可对其进行私有访问。有关更多信息，请参阅**《Amazon VPC 用户指南》中的[将子网与路由表关联或取消关联](https://docs.amazonaws.cn/vpc/latest/userguide/WorkWithRouteTables.html#AssociateSubnet)。

## 更新 VPC 源
<a name="update-vpc-origin"></a>

以下过程演示如何在 CloudFront 控制台中，更新 CloudFront 分配的 VPC 源。或者，您可以将 [UpdateDistribution](https://docs.amazonaws.cn/cloudfront/latest/APIReference/API_UpdateDistribution.html) 和 [UpdateVpcOrigin](https://docs.amazonaws.cn/cloudfront/latest/APIReference/API_UpdateVpcOrigin.html) API 操作与 Amazon CLI 或 Amazon SDK 一起使用。

**为 CloudFront 分配更新现有 VPC 源**

1. 通过 [https://console.amazonaws.cn/cloudfront/v4/home](https://console.amazonaws.cn/cloudfront/v4/home) 打开 CloudFront 控制台

1. 在导航窗格中，选择**分配**。

1. 选择分配的 ID。

1. 选择**行为**选项卡。

1. 确保 VPC 源不是缓存行为的默认源。

1. 选择**源**选项卡。

1. 选择要更新的 VPC 源，然后选择**删除**。这会取消 VPC 源与分配的关联。重复步骤 2-7，取消 VPC 源与任何其他分配的关联。

1. 选择 **VPC 源**。

1. 选择 VPC 源并选择**编辑**。

1. 进行相应更新并选择**更新 VPC 源**。

1. 等待 VPC 源状态更改为**已部署**。这一过程耗时最多 15 分钟。

1. 在导航窗格中，选择**分配**。

1. 选择分配的 ID。

1. 选择**源**选项卡。

1. 选择**创建源**。

1. 对于**源域**，从下拉菜单中选择您的 VPC 源资源。

   如果您的 VPC 源是 EC2 实例，请复制实例的**私有 IP DNS 名称**并粘贴到**源域**字段中。

1. 选择**创建源**。这会再次将 VPC 源与您的分配相关联。重复步骤 12-17，将更新后的 VPC 源与任意其他分配相关联。

## 支持 VPC 源的 Amazon Web Services 区域
<a name="vpc-origins-supported-regions"></a>

目前，以下商用 Amazon Web Services 区域中支持 VPC 源。可用区（AZ）例外情况已注明。


| 区域名称 | 区域 | 
| --- | --- | 
| 美国东部（俄亥俄州） | us-east-2 | 
| 美国东部（弗吉尼亚州北部） | us-east-1 (except AZ use1-az3) | 
| 美国西部（北加利福尼亚） | us-west-1 (except AZ usw1-az2) | 
| 美国西部（俄勒冈州） | us-west-2 | 
| 非洲（开普敦） | af-south-1 | 
| 亚太地区（香港） | ap-east-1 | 
| Asia Pacific (Mumbai) | ap-south-1 | 
| 亚太地区（海得拉巴） | ap-south-2 | 
| 亚太地区（雅加达） | ap-southeast-3 | 
| 亚太地区（墨尔本） | ap-southeast-4 | 
| 亚太地区（大阪） | ap-northeast-3 | 
| 亚太地区（新加坡） | ap-southeast-1 | 
| 亚太地区（悉尼） | ap-southeast-2 | 
| 亚太地区（东京） | ap-northeast-1 (except AZ apne1-az3) | 
| 亚太地区 (首尔) | ap-northeast-2 | 
| 亚太地区（泰国） | ap-southeast-7 | 
| 亚太地区（马来西亚） | ap-southeast-5 | 
| 亚太地区（台北） | ap-east-2 | 
| 加拿大（中部） | ca-central-1 (except AZ cac1-az3) | 
| 加拿大西部（卡尔加里） | ca-west-1 | 
| 欧洲地区（法兰克福） | eu-central-1 | 
| 欧洲地区（爱尔兰） | eu-west-1 | 
| 欧洲地区（伦敦） | eu-west-2 | 
| 欧洲地区（米兰） | eu-south-1 | 
| 欧洲地区（巴黎） | eu-west-3 | 
| 欧洲（西班牙） | eu-south-2 | 
| 欧洲地区（斯德哥尔摩） | eu-north-1 | 
| 欧洲（苏黎世） | eu-central-2 | 
| 以色列（特拉维夫） | il-central-1 | 
| 中东（巴林） | me-south-1 | 
| 中东（阿联酋） | me-central-1 | 
| 南美洲（圣保罗） | sa-east-1 | 
| 墨西哥（中部） | mx-central-1 | 