看懂一份AWS CloudFront(含Origin Shield)的CDN服务账单

一、背景

CloudFront Origin Shield功能是在CloudFront区域缓存之下的一层额外缓存。当被加速的源站不在AWS上的时候,开启这个功能和优化访问体验。当被加速的源站是AWS上的资源时候,对源站请求会汇聚到Origin Shield所在的区域,可以起到优化缓存的作用。

开启了CloudFront Origin Shield之后,产生的云费用账单会有数条,此时如何分析每一项费用的产生是否合理、如何进行优化?

Continue reading “看懂一份AWS CloudFront(含Origin Shield)的CDN服务账单”

部署你的第一个边缘函数 Lambda@Edge并查看运行日志

一、背景

AWS的CDN服务CloudFront在Edge端(边缘侧)具有一定的算力,可运行简单程序满足应用交互需要,这些场景包括:

  • 身份验证
  • 无须连接源站(ALB/EC2/S3)的情况下进行业务逻辑运算给源站卸载(Offload)压力
  • 按访问者的环境(如浏览器)、或访问设备等信息定制输出结果
  • 为静态源站(S3)增加处理能力
  • 防爬虫等应用层防护(可与ALB/WAF搭配防护)

实现这些场景,可通过Edge的边缘侧算力实现。具体实现又有两个产品:Lambda@Edge和CloudFront Function。

Continue reading “部署你的第一个边缘函数 Lambda@Edge并查看运行日志”

使用CloudFront发布EC2上的应用并使用Managed prefix功能限制EC2只接受CloudFront回源流量

一、背景

CloudFront使用的一般场景是发布ALB上的应用,而ALB又是发布一组EC2应用。CloudFront也支持直接发布EC2不使用ALB。当然这是不推荐的,因为ALB会提供了更好的多机流量调度,通过目标组实现健康检查,确保要发布的应用正常对外提供服务,并具备水平扩展能力。

此前,如果希望对ALB和EC2做限制,使其只允许来自CloudFront回源流量,并且不再接受其他互联网访问,那么这个需求常见的解决方案是:

Continue reading “使用CloudFront发布EC2上的应用并使用Managed prefix功能限制EC2只接受CloudFront回源流量”

CloudFront签名上手:使用CloudFront做S3存储桶的私有内容分发

本文的效果演示Demo视频参考这里

一、背景

1、传统企业与内容分发

以往,私有内容分发一直是数字原生的互联网行业的技术需求,广泛用于经过会员体系验证的版权内容分发,包括但不限于视频播放、音频播放、游戏下载、软件分发等。

如今,随着传统企业的数字化转型越来越普遍,大量企业内部应用技术栈全面互联网化,许多企业的应用系统已经突破了传统的VPN内网概念,转而在互联网上运行。企业日常运营产生各种流程文档、数据文件、日志等需要被分发给员工和第三方合作伙伴。这种场景下如何能有保护地企业私有内容的安全分发,就成为了企业数字化转型的安全关键。

Continue reading “CloudFront签名上手:使用CloudFront做S3存储桶的私有内容分发”

使用WAF检查Referer Header对外部引用进行干预

一、背景

在CloudFront的控制台上,提供了一个TOP Refer的报表,这个报表用于显示本站的用户来源是来自哪个原始网站。这个机制是如何工作的呢?

假设如下的场景:

  • 主网站名为 https://www.abc.com/index.html
  • 图片的域名为 https://image.abc.com/image01.png

当客户端浏览器打开主网站时候,浏览器会向图片域名image.abc.com服务器的发送一个图片访问请求,并包含一个特殊的HTTP Header名为Referer。Referer Header的内容就是之前所在页面的域名,即www.abc.com。因此,图片服务器只需要检查Referer域名,即可获知引用此图片的原始网址。Referer Header可以被WEB应用服务器获取,并在应用层代码做判断。更高效的办法,是从客户访问前端的CloudFront和WAF上进行干预,来判断是否是合法的引用。

需要注意的是:检查Referer并不能完全阻断所谓的“盗链”和非法链接,因为攻击者可以简单去构造Referer Header来模拟一个正常请求。所以实施Referer检查的意义是可以避免图片等素材被其他网址的浏览器简单引用,可减少由此产生的外部流量等问题。如果需要100%的阻止外部访问且必须所有资源都经过身份验证,请参考CloudFront Signature签名功能。

下边介绍如何通过WAF检查Referer Header。

Continue reading “使用WAF检查Referer Header对外部引用进行干预”

将CloudFront对S3源站的访问授权从原有的OAI切换为最新的OAC

一、背景

CloudFront对S3源站保护功能之前采用源访问身份Origin Access Identity(简称OAI)机制。由于OAI的权限管理颗粒度较粗,且不支持需要AWS Signature V4签名的POST方法,不支持SSE-KMS集成等。由于这一系列的局限,2022年起被新的源访问控制功能Origin Access Control (OAC)所取代。

本文讲述如何切换配置。需要注意的是,对生产环境修改配置可能导致访问失效,请务必提前做好技术储备和测试,生产环境谨慎调整。

Continue reading “将CloudFront对S3源站的访问授权从原有的OAI切换为最新的OAC”

如何从CloudFront上获取客户端真实IP地址

一、背景

CloudFront CDN服务和ALB一样,会屏蔽掉最终用户的IP地址。获取真实IP地址,需要通过额外的HTTP Header来获得,在CloudFront CDN上这个Header的名称是 HTTP_CLOUDFRONT_VIEWER_ADDRESS 。因此只要先在CloudFront上配置好,然后从应用层打印这个Header即可获得客户端真实IP地址。

Continue reading “如何从CloudFront上获取客户端真实IP地址”

使用AWS WAF进行Captcha人机验证

一、背景

2021年的re-Invent大会发布了AWS WAF验证码功能即Captcha。Captcha是Completely Automated Public Turing test to tell Computers and Humans Apart(全自动区分计算机和人类的图灵测试)的首字母缩写,通常用于区分机器人和人类访客,以防止 Web 抓取、凭证填充和垃圾邮件等恶意活动。

Continue reading “使用AWS WAF进行Captcha人机验证”

在AWS中国区域启用WAF防护Log4J漏洞

一、背景

2021年12月爆出的高危漏洞 CVE-2021-44228 和CVE-2021-45045漏洞,彻底的防护措施是升级Log4J版本到官方指定版本,临时措施是通过WAF进行一定程度的防护。建议升级到Log4J 2.17版本才可以满足安全要求。

使用WAF防护的前提:

  • 中国区域和海外区域,已经使用EC2、ECS容器服务、EKS容器服务,且使用ALB作为发布点,此场景可使用WAF防护
  • 海外区域,没有使用ALB发布但是使用Cloudfront CDN加速,则可使用基于Cloudfront的WAF防护
  • 中国区域和海外区域的WAF都不支持直接对一个EC2的80、443、8080端口进行防护
  • 不支持NLB网络负载均衡器,NLB后可嵌套接入ALB(此为2021年新发布新特性)

如果您已经配置过WAF并启用了,请参考这里的changelog确认后续更新。如果还没有启用WAF,请参考如下Step-by-step配置说明如下。

Continue reading “在AWS中国区域启用WAF防护Log4J漏洞”

使用CLI创建ELB解决AWS中国区ACM集成问题

2020年3月AWS中国区正式上线ACM,用户可以申请由AWS颁发的公有证书用于自己的网站和服务,且ACM要求证书只能用于ELB、API Gateway、CloudFront等服务,不允许导出到其他地方部署。由于中国区上线后ELB集成ACM存在问题,在界面上无法直接看到新生成的证书,因此必须通过CLI创建ELB方可使用证书。

Continue reading “使用CLI创建ELB解决AWS中国区ACM集成问题”