本博客是使用了Headless CMS框架Strapi作为后台,Markdown作为博客源格式。然后不可避免会遇到使用图片等静态资源的问题。目前的解决方案是S3+CloudFront。所以把使用CloudFront的方法以及感受记录下来。
需要注意的是,AWS国际版的CloudFront在国内是被墙的。而AWS中国区必须得公司注册,所以考虑使用迁移到阿里云的CDN上。
什么是CloudFront
CloudFront是AWS提供的一个CDN服务,通过AWS的边缘站点(edge location)来分发静态和动态的资源。
当用户读取一个资源的时候,请求会被路由到最低延迟的边缘站点,如果对象已经存在则立马返回给用户,否则CloudFront会从源请求对象返回给用户并且缓存以便下次调用。
配置CloudFront
- 首先创建一个S3桶。
- 登录CloudFront控制台创建。
- 源域名下拉框会列出所有的S3桶的,选择第一步创建的S3桶(xxxxxxx.s3.amazonaws.com)
- 源路径可以设置为S3桶下特定文件夹路径或者为空。
- 源ID设置唯一ID
- 限制桶访问选择是。这样用户只能通过CloudFront去访问S3对象,而不可以通过S3的URL去访问。(OAI)
- OAI可以创建一个新的,然后更新桶策略。
- 剩下的都可以选择默认,或者根据实际需求去配置。
更新的S3策略如下:
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity xxxxxx"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket-name/*"
}
]
}
其他
- CloudFront可以无缝集成WAF, Shield, Route53预防攻击
- CloudFront默认提供SSL(*.cloudfront.net), 也可以导入ACM里面的证书
- 通过GEO-限制基于区域添加白名单或者黑名单。
- 通过Orgin Group实现故障转移,添加多个源,当主源挂掉之后可以把请求转移到备份源中
- 使用自定义SSL证书 (1. SNI Custom SSL 2. Dedicated IP Custom SSL)
