对于 Web 应用程序或由 Elastic Load Balancing 中的 ApplicationLoad Balancer 提供的其他内容,CloudFront 可以缓存对象并将它们直接提供给用户(查看者),从而减少 Application Load Balancer的负载。但是,如果用户可以绕过 CloudFront 并直接访问 Application Load Balancer,则无法获得这些益处。
但是,您可以配置 AmazonCloudFront 和 Application Load Balancer,以防止用户直接访问 Application Load Balancer。这使得用户只能通过 CloudFront 访问 Application Load Balancer,从而确保您获得使用 CloudFront 的益处。
要防止用户直接访问 Application Load Balancer 并仅允许通过 CloudFront 进行访问,请完成以下步骤:
1. 配置CloudFront的自定义 HTTP 标头。
2. 配置ApplicationLoad Balancer为仅转发包含此自定义 HTTP 标头的请求。
完成这些步骤后,用户只能通过 CloudFront 访问您的 ApplicationLoad Balancer。
步骤一:配置 CloudFront 的自定义 HTTP 标头
此使用案例依赖于对自定义标头名称和值保密。如果标头名称和值没有保密,其他 HTTP 客户端可能会将它们包含在直接发送到 Application Load Balancer 的请求中。这可能会导致 Application LoadBalancer 的行为看起来就好像请求来自 CloudFront,但实际上请求并非来自 CloudFront。为防止这种情况,请将自定义标头名称和值保密。
1. 登录您的AWS账号,转到CloudFront控制台中。
2. 使用源设置中的源自定义标题设置。
3. 输入标头名称( X-Custom-Header ) 及其值 ( random-value-0123456789) 。
本示例中的标头名称和值仅用于演示。在生产环境中,请使用随机生成的值。将标题名称和值视为安全凭证,如用户名和密码。因此,请定期轮换标头名称和值,并使用 HTTPS 进行源请求。
4. 修改之后,等待CloudFront的分配状态为Deployed,大概需要等待十分钟左右。
步骤二:配置Application Load Balancer为仅转发包含此自定义 HTTP 标头的请求
1、在Amazon EC2 控制台中打开负载均衡器页面。选择作为CloudFront 分配源的负载均衡器,然后选择侦听器选项卡;对于正在修改的侦听器,请选择查看/编辑规则。具体步骤如下图所示:
2、选择图标以添加规则,选择 InsertRule。
3、对于新规则,请执行以下操作:
选择添加条件,然后选择 Http 标头。输入在CloudFront中配置的 HTTP 标头名称和值。
选择添加操作,然后选择转发到。选择要转发请求的目标组。
选择保存以创建新规则。
4、选择图标以编辑规则,选择默认规则的编辑图标。
5、对于默认规则,请执行以下操作:
a. 删除默认操作。
b. 选择添加操作,然后选择返回固定响应。
c. 对于响应代码,输入 403。
d. 对于响应正文,输入 Access denied。
e. 选择更新以更新默认规则。
最后,可以通过向 CloudFront 分配发送请求和向 Application Load Balancer 发送一个请求来验证该解决方案是否有效。对CloudFront 的请求将返回您的Web 应用程序或内容;直接访问Application Load Balancer 的请求将返回403,并带有纯文本消息的响应Access denied。
测试情况:
访问ApplicationLoad Balancer 域名出现Accessdenied;
访问CloudFront 域名能正常访问。