logo of Shuibaco

用AWS S3做博客图床

2021. / 1,568字 / 3,409阅 / 0评

2023年4月20日更新:已根据官方指南「限制对 Amazon S3 源的访问」将CloudFront向S3发送身份验证的请求的方式从源访问身份(OAI)迁移到源访问控制(OAC)。


去年六月,因为Bitcron对于音频视频的限制,我把图床1搬到了Blot。Blot用的是AWS所以特别快,但是最近他们把图片全部搬回自己的主机了,别问理由,问就是太贵。我心想反正放静态文件,虽然当然用Dropbox同步仍旧是最轻松的方式,但文件类更改频率并不高,存放方式的差异也不大,那要不我自己直接放AWS好了。花了好些天查资料,终于跟上了时代的潮流,大概了解了对象储存是啥玩意儿,也终于知道大家口中的bucket的含义了。武装好理论知识后好像世界又变大了一些,对象储存真香!啥都能干!

其实很多大厂都有提供对象储存服务,比如阿里云OSS2、腾讯云COS3,还有今天我要说的亚马逊S34。我也想投入社会主义怀抱,网上攻略看来国内产品更贴心,但是无奈备案太繁琐,我也不想备案。又说S3是鼻祖被各种借鉴,那本着对第一个吃螃蟹的勇气的好感,我就先会一会S3吧!

图床要求

现在都是按需付费,用多少付多少,收费模式还是比较合理的。

搭建步骤

  1. S3
    1) 在S3创建存储桶bucket,命名为自定义域名,比如我的是cdn.shuiba.co,选择一个亚洲区域理论上会快一些(我选的是亚太地区 (东京) ap-northeast-1);
    2) 稍后会启用CDN,所以这里不需要关闭“阻止所有公有访问”,保持存储桶和对象不是公有的更安全。同理,存储桶策略也不需要修改;
    3) 上传静态文件,此时每个文件都会生成一个支持https的对象URL,例如https://s3-区域名.amazonaws.com/bucket名/文件名.jpg,但因为设置为非公开,所以无法访问。

  2. CloudFront
    1) 在CloudFront上创建Web分配;
    2) 源配置:源域名下拉选择对应S3 bucket;“限制存储桶访问”选择“是”并创建新身份;“授予对存储桶的读取权限”选择“是”的话会在bucket权限的“存储桶策略”中自动写入授权命令;
    3) 默认缓存行为设置:“查看器协议策略”选择“将 HTTP 重定向到 HTTPS”;
    4) 分配设置:“价格级别”选择“使用美国、加拿大、欧洲、亚洲、中东和非洲”能省点钱;先不写“备用域名(CNAMEs)”,“SSL 证书”选默认,稍后设置;
    5) 分配部署好之后,会指定一个一串数值.cloudfront.net域名,将此域名替换掉对象URL的前缀——https://一串数值.cloudfront.net/文件名.jpg——便能公开访问对象文件。

  3. AWS Certificate Manager (ACM)
    1) 打开刚刚在CloudFront上创建的分配,编辑“常规”;
    2) 在“SSL证书”下方点击“使用ACM请求或导入证书”,跳转到对应页面。这里注意区域一定要是美国东部 (弗吉尼亚北部) us-east-1,否则证书无效;
    3) 输入自定义域名,选择DNS验证,在域名商处按要求修改DNS,等待验证通过;
    4) 继续在域名商处为自定义域名创建CNAME指向一串数值.cloudfront.net
    5) 刷新CloudFront编辑页面,“备用域名(CNAMEs)”里填上自定义域名;选择“自定义SSL证书”,下拉选择刚刚生成的证书,保存修改;
    6) 现在你可以通过自定义域名来访问对象文件了,比如我的文件URL就变成了https://cdn.shuiba.co/文件名.jpg

遗留问题

记忆力好的旁友们相信已经发现了,咋没有防盗链呢?亚马逊官方提供的signed URL和signed cookie我一点看不懂,真的,为了能至少多那么一点儿理解力,我看了几个小时开发者文档,除了了解到机器翻译还不错这件事以外可以说颗粒无收了。总之我先用着,反正S3和CloudFront有一年免费期,到期后再转到Cloudflare吧。

2023年4月25日更新:研究了好久终于用AWS WAF给图床加上防盗链功能了,但Cloudflare似乎更经济实惠一些,正好我也想试试Cloudflare,准备改日转过去。

参考文章

「什么是对象存储?COS 能做什么?这里有份快速入门教程」
「国内自建图床指南」
「正确使用AWS S3的方式之打造自己的https图床」
「使用 AWS 云服务搭建 WordPress 博客 (上篇)」
「AWS S3 + CloudFront SSL 靜態網站架設教學」
「关于部署网站的那些事儿」
「AWS 静态网站“完美”搭建方案」
「开始使用 Amazon Route 53」
「使用源访问身份限制对 Amazon S3 内容的访问」
「您创建或更新分配时指定的值」


  1. 这里的图床指的是存放博客各类静态文件的地方。
  2. Object Storage Service
  3. Cloud Object Storage
  4. Simple Storage Service
855°
坡坡第一次看牙医
Comments
Write a Comment
点击加载Disqus