限制您的内容的地理分配 - Amazon CloudFront
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

限制您的内容的地理分配

您可以使用地理限制(有时称为地理封锁)来阻止特定地理位置的用户访问您通过 Amazon CloudFront 发行版分发的内容。要使用地理限制功能,您有两个选项:

  • 使用 CloudFront 地理限制功能。使用该选项可限制对与某个分配关联的所有文件的访问,并在国家/地区级别限制访问。

  • 使用第三方地理定位服务。使用该选项可限制对与某个分配关联的一小部分文件的访问,或在比国家/地区级别更细化级别上限制访问。

使用 CloudFront 地理限制

当用户请求您的内容时,无论用户身在何处, CloudFront 通常都会提供所请求的内容。如果您需要阻止特定国家/地区的用户访问您的内容,则可以使用 CloudFront 地理限制功能执行以下操作之一:

  • 仅当用户位于允许列表中的某个已批准国家/地区时,才授予他们访问您的内容的权限。

  • 当用户位于拒绝列表中被禁止的国家/地区之一时,阻止他们访问您的内容。

例如,如果请求来自您无权分发内容的国家/地区,则可以使用 CloudFront 地理限制来阻止该请求。

注意

CloudFront 使用第三方数据库确定用户的位置。IP 地址和国家/地区之间映射的准确性因区域而异。根据最近的测试,整体准确性为 99.8%。如果 CloudFront 无法确定用户的位置,则 CloudFront 提供用户请求的内容。

以下是地理限制的工作机制:

  1. 假设您仅有权在列支敦士登分发内容。您更新CloudFront 分配以添加仅包含列支敦士登的许可名单。(您也可以添加包含除列支敦士登以外所有国家/地区的拒绝列表。)

  2. 摩纳哥的用户请求您的内容,然后 DNS 会将请求路由到意大利米兰的 CloudFront 边缘站点。

  3. 米兰的边缘站点将检查您的分配,并确定摩纳哥的这名用户没有权限,无法下载您的内容。

  4. CloudFront 403 (Forbidden)向用户返回 HTTP 状态码。

您可以选择配置 CloudFront 为向用户返回自定义错误消息,也可以指定 CloudFront 要将请求文件的错误响应缓存多长时间。默认值为 10 秒。有关更多信息,请参阅为特定 HTTP 状态代码创建自定义错误页面

地理限制适用于整个分配。如果您需要对部分内容应用一种限制,而对内容的另一部分应用不同的限制(或不限制),则必须创建单独的 CloudFront 发行版或使用第三方地理定位服务

如果启用 CloudFront 标准日志(访问日志),则可以通过搜索值为sc-status(HTTP 状态代码)的日志条目来识别 CloudFront 被拒绝的请求403。但是,仅使用标准日志,您无法区分根据用户位置 CloudFront拒绝的请求和因用户出于其他原因无权访问文件而 CloudFront 被拒绝的请求。如果您有第三方地理定位服务,例如 Digital Element 或 MaxMind,则可以根据访问日志c-ip(客户端 IP)列中的 IP 地址来识别请求的位置。有关 CloudFront 标准日志的更多信息,请参阅配置和使用标准日志(访问日志)

以下过程说明了如何使用 CloudFront 控制台向现有发行版添加地理限制。有关如何使用控制台创建分配的信息,请参阅创建分配

向 CloudFront Web 分发添加地理限制(控制台)
  1. 登录Amazon Web Services Management Console并打开 CloudFront 控制台,网址为https://console.amazonaws.cn/cloudfront/v4/home

  2. 在导航窗格中,选择分配,然后选择要更新的分配。

  3. 选择安全选项卡,然后选择地理限制

  4. 选择编辑

  5. 选择允许列表以创建允许的国家/地区的列表,或选择阻止列表以创建被阻止的国家/地区的列表。

  6. 将所需的国家/地区添加到列表中,然后选择保存更改

使用第三方地理定位服务

借助 CloudFront 地理限制功能,您可以控制通过给定 Web 发行版分发的所有文件在国家/地区级别的内容分发。如果您有地理限制的用例,其中限制不符合国家边界,或者您只想限制对给定发行版提供的部分文件的访问权限,则可以CloudFront 与第三方地理定位服务结合使用。这使您不仅可以根据国家/地区,还可以根据城市、邮政编码甚至纬度和经度来控制您的内容。

当您使用第三方地理定位服务时,我们建议您使用 CloudFront 签名 URL,您可以通过签名 URL 指定过期日期和时间,在此日期和时间之后,网址将不再有效。此外,我们建议您使用 Amazon S3 存储桶作为来源,因为这样您就可以使用 CloudFront 源访问控制来防止用户直接从源访问您的内容。有关签名的 URL 和源访问控制的更多信息,请参阅使用签名 URL 和签名 Cookie 提供私有内容

以下步骤说明如何使用第三方地理定位服务来控制对您的文件的访问。

使用第三方地理定位服务来限制对发行版中 CloudFront文件的访问
  1. 获得具有地理定位服务的账户。

  2. 将您的内容上传到 Amazon S3 存储桶。

  3. 将 Amazon CloudFront 和 Amazon S3 配置为提供私有内容。有关更多信息,请参阅使用签名 URL 和签名 Cookie 提供私有内容

  4. 编写您的 Web 应用程序,以做到以下几点:

    • 将每个用户请求的 IP 地址发送到地理定位服务。

    • 评估地理定位服务的返回值,以确定用户是否位于您 CloudFront 想要分发内容的地点。

    • 如果您想将内容分发到用户所在的位置,请为您的 CloudFront 内容生成签名 URL。如果您不想将内容分发到该位置,请将 HTTP 状态代码 403 (Forbidden) 返回给用户。或者,您可以配置 CloudFront 为返回自定义错误消息。有关更多信息,请参阅为特定 HTTP 状态代码创建自定义错误页面

    有关更多信息,请参阅您使用的地理定位服务的文档。

您可以使用 Web 服务器变量来获取正在访问您网站的用户的 IP 地址。请注意以下几点:

  • 如果您的 Web 服务器未通过负载均衡器连接到 Internet,您可以使用 Web 服务器变量来获取远程 IP 地址。但是,该 IP 地址并非始终为用户的 IP 地址。它还可以是代理服务器的 IP 地址,具体取决于用户如何连接到 Internet。

  • 如果您的 Web 服务器通过负载均衡器连接到 Internet,Web 服务器变量可能包含负载均衡器的 IP 地址,而不是用户的 IP 地址。在该配置中,建议您使用 X-Forwarded-For HTTP 标头中的最后一个 IP 地址。该标头通常包含多个 IP 地址,其中大部分是代理或负载均衡器的 IP 地址。列表中的最后一个 IP 地址是最有可能与用户的地理位置关联的 IP 地址。

如果您的 Web 服务器未连接至负载均衡器,建议您使用 Web 服务器变量,而不是 X-Forwarded-For 标头,以避免 IP 地址欺骗。