Amazon CloudFront 常见问题

gRPC

gRPC 是一个现代的开源远程过程调用(RPC)框架,允许客户端和服务器通过长期的 HTTP/2 连接进行双向通信。通过使用持久开放连接,客户端和服务器可以相互发送实时数据,而无需客户端频繁重新启动连接来检查要交换的新数据。gRPC 非常适合低延迟和高传输速度至关重要的使用案例,例如实时通信应用程序和在线游戏。

您的 CloudFront 分发上的每个缓存行为均启用了 gRPC。启用 gRPC 将确保您的发行版上也启用了 HTTP/2 和对 POST 请求的支持。gRPC 仅支持 HTTP/2 上的 POST 方法。

当满足以下条件时,Amazon CloudFront 会通过 gRPC 进行通信:

  1. 已在您的分发上启用 HTTP/2
  2. 已在缓存行为上启用 POST 请求和 gRPC
  3. 客户端通过 HTTP/2 连接发送值为“application/grpc”的“content-type”标头
  1. 安全性 — gRPC 使用 HTTP/2,确保从客户端到原始服务器的流量经过端到端加密。此外,使用 gRPC 时,您可以免费获得 AWS Shield Standard,并且可以配置 AWS WAF 来帮助保护 gRPC 流量免受攻击。
  2. 更好的性能 - gRPC 利用一种称为协议缓冲区的二进制消息格式,它比传统有效载荷(如用于 RESTful API 的 JSON)更小。解析协议缓冲区的 CPU 占用率较低,因为数据是二进制格式,这意味着消息交换速度更快。这样就可以提高整体性能。
  3. 内置流式传输支持 — 流式传输是 gRPC 框架的内置部分,支持客户端和服务器端流式传输语义。这使得构建流服务或客户端变得更加简单。CloudFront 上的 gRPC 支持以下流式传输组合:
    • 一元(无流式传输)
    • 客户端到服务器的流式传输
    • 服务器到客户端的流式传输
    • 双向流式传输

暂时不能。CloudFront 仅支持基于 HTTP/2 的 gRPC。

安全性

CloudFront 提供两种完全托管的方式来保护您的源:

  1. 源访问控制(OAC):CloudFront 源访问控制(OAC)是一种安全功能,可限制对 Amazon Simple Storage Service(S3)源、AWS Elemental 源和 Lambda 函数 URL 的访问,确保只有 CloudFront 可以访问内容。
  2. VPC 源:CloudFront 虚拟私有云(VPC)源允许您使用 Amazon CloudFront 从托管在 VPC 私有子网中的应用程序传送内容。您可以将应用程序负载均衡器(ALB)网络负载均衡器(NLB)和私有子网中的 EC2 实例用作 CloudFront 的 VPC 源

如果 CloudFront 托管解决方案不能满足您的使用案例要求,以下是一些可用的替代方法:

  1. 自定义源标头:使用 CloudFront,您可以将自定义标头附加到传入请求,然后配置源以验证这些特定标头值,从而有效地将访问限制为仅通过 CloudFront 路由的请求。此方法会额外创建一个身份验证层,从而大大降低未经授权直接访问源的风险。
  2. IP 允许列表:您可以配置源的安全组或防火墙,以专门允许来自 CloudFront 的 IP 范围的传入流量。为方便起见,AWS 会维护并定期更新这些 IP 范围。有关实施 IP 允许列表的详细信息,请参阅我们的综合文档:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/LocationsOfEdgeServers.html#managed-prefix-list。此资源提供有关利用 AWS 托管前缀列表实现最佳安全配置的分步指导。
  3. SSL/TLS 加密:您可以将 CloudFront 配置为专门使用 HTTPS 连接来连接您的源,从而通过 CloudFront 分发和源之间的加密通信实现端到端数据保护。

VPC 源

CloudFront 虚拟私有云(VPC)源是一项新功能,允许您使用 CloudFront 从托管在 VPC 私有子网中的应用程序传送内容。使用 VPC 源,您可以将应用程序置于 VPC 的私有子网中,该子网只能通过 CloudFront 分发进行访问。这消除了对源具有外部可解析的域名服务(DNS)名称的要求。您可以使用在应用程序负载均衡器(ALB)、网络负载均衡器(NLB)和 EC2 实例上运行的应用程序来设置 VPC 源。VPC 源仅在 AWS 商业区域可用,支持的 AWS 区域的完整列表可在此处查看。

如果您希望增强 Web 应用程序的安全性,同时保持高性能和全球可扩展性,则应将 VPC 源与 CloudFront 结合使用。通过 VPC 源,您可以限制只有 CloudFront 分发才能访问 VPC 中的源,而无需进行诸如秘密标头或访问控制列表之类的复杂配置。VPC 源还让您可以免费路由到具有内部 IPv4 IP 地址的私有子网中的源,从而优化您的 IPv4 成本。如果您想简化安全管理,VPC 源是完美的选择,它可以让您更加专注于发展核心业务,而不是管理复杂的安全措施。

  1. 安全性 — 借助 VPC 源,您可以将负载均衡器和 EC2 实例放置在私有子网中,使 CloudFront 成为唯一的入口点,从而加强应用程序的安全状况。用户请求通过私有、安全的连接从 CloudFront 传输到 VPC 源,从而提高应用程序的安全性。
  2. 管理 — VPC 源允许您将源移动到没有公共访问权限的私有子网,而无需实施访问控制列表、秘密共享标头或其他限制源访问权限的机制,从而减少安全地 CloudFront - 源连接所需的运营开销。这样,您就可以轻松使用 CloudFront 来保护他们的 Web 应用程序,而无需投资于无差别的开发工作。
  3. 可扩展且性能出色 — 借助 VPC 源,客户可以使用 CloudFront 的全球边缘站点和 AWS 主干网络,享受与其他现有内容分发方法类似的规模和性能,同时改善安全状况。该解决方案可简化安全管理,同时为客户提供全球应用程序交付,使您可以轻松将 CloudFront 用作应用程序的单一前门。

CloudFront 虚拟私有云(VPC)源允许您使用 CloudFront 通过应用程序负载均衡器、网络负载均衡器和 EC2 实例从托管在 VPC 私有子网中的应用程序传送内容。Amazon VPC 屏蔽公共访问权限(VPC BPA)是一种简单的声明性控制,它通过 AWS 提供的互联网路径权威地阻止传入(入口)和传出(出口)VPC 流量。在具有 VPC 源的子网上启用 VPC BPA 时,来自 CloudFront 的活动连接将终止于该子网。不会向该子网发送新的连接,而是将其路由到 VPC 源所在的其他子网(未启用 BPA),或者如果 VPC 源所在的所有子网都启用了 BPA,则该连接会被丢弃。

VPC 源支持应用程序负载均衡器、网络负载均衡器和 EC2 实例。

不,VPC 私有源不支持 IPv6。使用 VPC 源需要私有 IPv4 地址,这些地址是免费的,并且不会产生 IPv4 费用。

流式传输

媒体质量感知弹性(MQAR)是 Amazon CloudFront 与 AWS Media Services 之间的一项集成功能,它可以根据动态生成的视频质量分数提供跨区域源选择和失效转移。借助 MQAR,您可以在两个不同的 AWS 区域中部署一个冗余的 AWS 媒体服务工作流,以实现弹性的直播活动交付。当您为分发启用 MQAR 功能时,就会授权 CloudFront 自动选择被认为具有最高质量分数的源。质量分数代表您从源感知到的媒体流式传输质量问题,例如黑帧、冻结帧、丢帧或者重复帧。例如,如果您的 AWS Elemental MediaPackage v2 源部署在两个不同的 AWS 区域中,而且一个区域报告的媒体质量分数高于另一个区域,CloudFront 会自动切换到报告更高分数的那个源。此功能模拟持续“监控”,以提供直播活动和全天候节目频道,旨在帮助为观众提供高质量的体验。您可以在《CloudFront 开发人员指南》中阅读有关 MQAR 的更多信息。

任播静态 IP

Amazon CloudFront 的任播静态 IP 是一组静态 IP 地址,允许您连接到全球所有 CloudFront 边缘站点。它们提供了一个小型的静态 IP 列表,可用于零费率计费(网络提供商在适当协议下免除特定 IP 地址的数据费用)以及为加强安全状况而设置客户端允许列表等使用案例。通过使用任播静态 IP,可以消除不断更新允许列表或 IP 映射的操作挑战,因为同一组 IP 适用于 CloudFront 的整个全球网络,同时仍然可以享受 CloudFront 的所有功能。

要启用任播静态 IP,需要先在您的 AWS 账户中请求并创建一个任播静态 IP 列表。创建列表后,您可以将 CloudFront 分发与任播静态 IP 列表关联。这可以通过 AWS 管理控制台上的任播静态 IP 部分来完成,或者通过编辑每个分发并从下拉菜单中选择所需的任播静态 IP 列表来完成。保存这些更改后,您可以从 AWS 管理控制台中显示的列表或通过 API 复制或下载与您的分发关联的特定静态 IP 地址集

启用 CloudFront 任播静态 IP 后,您将收到 21 个 IPv4 的 IP 地址。您需要将所有这些 IP 地址添加到任何相关的允许列表中。

不能。CloudFront 任播仅适用于分布在不同地理区域的 IP。

随着 CloudFront 添加新的边缘站点,您的任播静态 IP 列表将继续保持有效。我们将酌情公布来自新边缘站点的 IP。

所有 CloudFront 功能均可与任播配合使用,但有三个明显的例外:1/ 任播静态 IP 不支持无法支持 SNI 的旧客户端,2/ 使用任播静态 IP 时,需要使用价格级别“所有”,3/ 使用任播静态 IP 时,必须禁用 IPv6。任播静态 IP 在 DNS 解析阶段工作,一旦请求到达主机,所有现有功能以及与其他 AWS 服务的集成将继续可供您的分发使用。

您可以将任播静态 IP 与多个分发一起使用,但它们必须位于同一个账户中。CloudFront 任播静态 IP 可与账户中的多个分发关联。CloudFront 任播静态 IP 将支持服务器名称指示(SNI),以便从与其任播静态 IP 策略关联的任意数量的分发中返回正确的证书。如果您希望为账户中的多个分发设置不同的静态 IP,则可以创建额外的任播静态 IP 列表,并将它们关联到特定分发。

在启用了任播静态 IP 的账户中创建新的分发时,必须将新分发与现有的任播静态 IP 列表明确关联。默认情况下,该分发将使用动态 IP 地址,直到您将其链接到静态 IP 列表。

日志记录和报告

  1. 标准日志(访问日志)CloudFront 标准日志提供有关向分发发出的每个请求的详细记录。这些日志对于许多场景都很有用,包括安全和访问审计。
  2. 实时日志 CloudFront 实时日志实时提供有关向分发发出的请求的信息(日志记录在收到请求后的几秒钟内传送)。您可以选择实时日志的采样率 — 即希望接收实时日志记录的请求的百分比。
  3. 记录边缘函数:您可以使用 Amazon CloudWatch Logs 获取边缘函数(Lambda@Edge 和 CloudFront Functions)的日志。您可以使用 CloudWatch 控制台或 CloudWatch Logs API 访问日志。有关详细信息,请参阅 Edge 函数日志
  4. 记录服务活动:您可以使用 AWS CloudTrail 在 AWS 账户中记录 CloudFront 服务活动(API 活动)。CloudTrail 提供 CloudFront 中用户、角色或 AWS 服务执行的 API 操作的记录。使用 CloudTrail 收集的信息,您可以确定向 CloudFront 发出的 API 请求、发出请求的 IP 地址、发出请求的人员、发出请求的时间以及其他详细信息。有关更多信息,请参阅使用 AWS CloudTrail 记录 Amazon CloudFront API 调用
  • CloudFront 标准日志会传送到您选择的 Amazon S3 存储桶、Amazon CloudWatch Logs 和 Amazon Data Firehose。有关更多信息,请参阅使用标准日志(访问日志)
  • CloudFront 实时日志将传送到您在 Amazon Kinesis Data Streams 中选择的数据流。CloudFront 除了收取因使用 Kinesis 数据流产生的费用外,还针对实时日志进行收费。有关更多信息,请参阅使用实时日志
  • CloudFront 边缘函数日志(Lambda@Edge 和 CloudFront Functions)将传送到 Amazon CloudWatch Logs

CloudFront 标准访问日志可以传送到 Amazon S3、Amazon CloudWatch 和 Amazon Data Firehose。您可以选择输出日志格式(纯文本、w3c、JSON、csv 和 parquet)。您可以选择要记录的字段以及这些字段以何种顺序包含在日志中。对于传送到 S3 的日志,您还可以为其启用分区,即,将日志配置为按小时或按天自动分区。您还可以将标准访问日志传送到选择加入 AWS 区域的 S3 存储桶。要了解更多信息,请参阅《CloudFront 开发人员指南》的标准访问日志部分。

CloudFront 不会对启用标准日志收费,但您需要根据日志传送目的地支付日志传送、存储和访问费用。如需了解更多信息,请参阅 CloudFront 定价页面的“附加功能”部分。

您可以根据您的使用案例选择目标。如果您拥有时效性很强的使用案例且需要在几秒内快速访问日志数据,则选择实时日志。如果您需要成本更低的实时日志管道,您可以通过仅为特定缓存行为启用日志或选择较低的采样率来选择筛选日志数据。实时日志管道的构建是为了快速传送数据。因此,如果发生数据延迟,日志记录可能会被删除。另一方面,如果您需要低成本的日志处理解决方案且不需要实时数据,则您适合使用当前的标准日志选项。S3 中的标准日志为完整性而构建,且日志通常在几分钟内即可用。可以为整个分发启用这些日志,而不是特定的缓存行为。因此,如果您需要日志进行临时调查、审计和分析,您可以选择仅启用 S3 中的标准日志。您可以选择使用这两种日志的组合。使用经过筛选的实时日志列表,以获取操作可见性,然后使用标准日志进行审计。
 

CloudFront 标准日志将传送到您的 S3 存储桶中。您还可以使用 DataDog 和 Sumologic 等第三方解决方案构建的集成来从这些日志中创建控制面板。

实时日志将传送到您的 Kinesis Data Stream。从 Kinesis Data Streams 中,可以将日志发布到 Amazon Kinesis Data Firehose。Amazon Kinesis Data Firehose 支持将日志轻松传送至 Amazon S3、Amazon Redshift、Amazon Elasticsearch Service 以及 Datadog、New Relic 和 Splunk 等服务提供商。Kinesis Firehose 还支持将数据传送到通用的 HTTP 终端节点。

使用下列步骤估算您需要的分区数量:

  1. 计算(或估算)您的 CloudFront 分发每秒钟接收的请求数。您可以使用 CloudFront 使用报告或 CloudFront 指标来帮助计算您每秒的请求数。
  2. 确定单个实时日志记录的典型大小。包含所有可用字段的一个典型记录约为 1KB。如果您不确定您的日志记录大小,您可以启用低采样率(例如 1%)的实时日志,然后使用 Kinesis Data Streams 中的监测数据计算记录平均大小(记录总数除以总的传入字节数)。
  3. 将每秒钟的请求数(从步骤 1 中)乘以典型的实时日志记录大小(从步骤 2 中),以确定您的实时日志配置每秒可能发送到 Kinesis 数据流的数据量。
  4. 使用每秒钟的数据量计算您需要的分区数量。单个分区每秒可处理不超过 1MB 的数据量及 1000 个请求(日志记录)。计算您需要的分区数量时,我们建议最多增加 25% 作为缓冲。

例如,假设您的分发每秒接收 10000 个请求,且您的实时日志记录的典型大小是 1KB。这意味着,您的实时日志配置每秒可以生成 10000000 个字节(10000 乘以 1000)或者 9.53MB 的数据量。在此情况下,您只需要 10 个 Kinesis 分区。您应该考虑至少创建 12 个分区,以便拥有一些缓冲区。