利用Cloudflare Workers将Google Drive转换成S3兼容存储
本文阅读体验最佳的方式为网页端,请前往原文阅读:https://musenxi.com/post/GDtoS3
起因是收到了Google One的邮件提示免费升级到了5T的Google Drive.
秉持着免费到底的原则,有没有一种办法能够既能将Google Drive转化为S3兼容存储又能实现国内流畅访问容器内的文件内容呢?我想到了利用Cloudflare的Workers服务,碰巧的是三个月前就有开发者开源了,就不用自己动手从零开始。
我在此仓库的基础上添加了允许公开读取容器的选项,更加适合作为普通图床的存储容器。
那么就开始这篇教程。
获取API Token#
该项目利用rclone获取Google Drive的API,rclone官网有详细的步骤 根据官网的步骤在Google API控制台进行操作
- 新建一个项目,接着点击启用API和服务

启用API和服务 - 搜索google drive api,点击进入选择启用

启用API - 在左侧栏选择凭证,如果显示的跟下面一样则点击进入配置

配置界面 
受众群体选择外部 - 在OAuth权限请求页面内点击数据访问,点击添加或移除范围。

数据访问 - 在弹出的右侧栏内找到底部的
手动添加范围在文本框内填入https://www.googleapis.com/auth/docs,https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/drive.metadata.readonly,点击添加到表并更新 - 点击目标对象,在下方的测试用户内点击
Add users输入自己的Google账号。 - 在左侧栏选择概览,创建OAuth客户端,应用类型选择桌面应用,点击创建。
- 记住弹出的界面中的客户端 ID和客户端密钥,或者直接点击下载JSON
- 点击目标对象,发布应用
接着下载安装rclone或是直接brew install rclone / scoop install rclone
在终端中打开输入rclone config
新建remote,输入一个名称回车后选择Google Drive对应的数字。输入刚刚记录的客户端 ID和客户端密钥。
Scope选择第一个Full access
service_account_file直接留空回车
Edit advanced config选择No
Use web browser因为我们有浏览器所以选择Yes

全部结束后终端会直接显示rclone的配置文件,或者输入rclone config file获取文件的路径再打开。
配置Cloudflare Worker#
登录Cloudflare仪表盘,在存储和数据库下进入Workers KV。新建两个KV,记住这两个KV的Namespace ID。
打开仓库下载
打开根目录下的wrangler.jsonc编辑,name字段自定义这是创建的Worker的名字,下方AUTH_KV和FOLDER_CACHE对应的id填入上一步创建的两个KV的Namespace ID。
在终端中打开文件夹,
# 1. S3 客户端用的密钥
pnpx wrangler secret put ACCESS_KEY
# 输入一个Access Key,例如:mygdrive123
pnpx wrangler secret put SECRET_KEY
# 输入一个Secret Key,例如:SuperStrongPassw0rd!@#456
pnpx wrangler secret put REGION
# 建议直接输入 auto (或诸如 us-east-1 其他的都可以)
# 2. Google 凭证(从rclone 配置里复制)
pnpx wrangler secret put GOOGLE_CLIENT_ID
# 粘贴 client_id 的值
pnpx wrangler secret put GOOGLE_CLIENT_SECRET
# 粘贴 client_secret 的值
pnpx wrangler secret put GOOGLE_REFRESH_TOKEN
# 粘贴 refresh_token 的值(只粘贴 1// 开头的那一长串)
# 3. 允许的 Bucket(非常重要!)
pnpx wrangler secret put ALLOWED_BUCKETS
# 输入你想使用的 bucket 名,用英文逗号分隔,例如:backup,photos,documents
pnpx wrangler secret put PUBLIC_READ_BUCKETS
# (可选)输入你想公开读取的 bucket 名,用英文逗号分隔,例如:backup,photos,documents全部完成之后输入pnpx wrangler deploy发布。
然后就可以在Cloudflare的Workers中看到新发布的Worker了。
至此所有的创建流程就结束了。对应的workers.dev地址就是自定义 Endpoint
访问对应的地址显示Access denied to this bucket则说明配置成功。
成功后会自动在Google Drive内创建和bucket同名的文件夹
Worker优选IP#
因为workers.dev的地址在国内不能访问,而套上自己的域名则速度不怎么理想,这就需要使用优选IP。 Worker配置优选IP非常简单,在我们创建的Worker内的设置界面,点击添加域和路由,添加路由,输入对应的域名后添加/*
进入DNS记录,添加DNS记录,对应域名CNAME到优选域名,记得代理状态选择仅DNS。



比较著名的社区优选域名是
配置CORS#
如果要在前端调用则需要配置CORS 进入域名内的规则→ 概述→ 响应标头转换规则内创建规则
选择自定义筛选表达式,当主机名 等于之前设置的自定义域名
设置新标头内添加静态标头 然后添加对应的所需标头就行
到这里所有工作就完全结束了,不过要注意的是免费版的Workers单账号限制100000次日请求。



