主题
Google Drive 连接器把一个 Drive 文件夹(含子文件夹)同步进一个已连接文件夹。连接方式有两种,在 Add connection 里是两张独立的卡片:
| 卡片 | 以谁的身份登录 | 什么时候选它 |
|---|---|---|
| Google Drive | 你本人,经由 Google 登录弹窗 | 你想同步自己账号能打开的文件夹 |
| Google Drive Keys | 一个 service account,用它的 JSON 密钥文件 | 你不希望这个连接绑在某个人的账号上 |
两种都是只读。共享网盘(shared drive)与共享给该账号的文件夹都能用。
用登录方式连接 Google Drive
- 在 Files → Connections 上点击 Add connection,选择 Google Drive,再点击 Authorize。
- 在弹窗里登录 Google 并批准只读访问。
该连接能读的东西就是那个 Google 账号能读的东西。如果这是工作账号、而弹窗提示需要管理员批准这个应用,那属于你这侧的 Google Workspace 设置,请把审批请求发给你的 Workspace 管理员。
用 service account 密钥连接 Google Drive
service account 有自己的身份,只能看到共享给它的东西。本连接器不使用域级委派(domain-wide delegation),因此它不能冒充你 Workspace 里的其他用户。
- 在 Google Cloud 控制台里选择或新建一个 project,并启用 Google Drive API。
- 创建一个 service account,然后在 Keys 下添加一个 JSON 密钥并下载。Google 的指引见为 service account 创建凭据。
- 复制该 service account 的邮箱(以
.iam.gserviceaccount.com结尾),并把要同步的每个 Drive 文件夹共享给它。Viewer 权限即可。 - 在 Files → Connections 上点击 Add connection,选择 Google Drive Keys,把 JSON 密钥文件拖进去。表单读完文件后会显示该 service account 的邮箱。
- 点击 Connect。
表单会检查这个文件确实是 service account 密钥,而不是(例如)OAuth client secret —— 这是最常犯的搭配错误。但连接时它不会拿密钥去 Google 侧校验,所以一把已被删除或禁用的密钥,要到你用它的文件夹建文件夹时才会暴露出问题。
从 Google Drive 连接创建文件夹
在 Files → New folder → Connected folder 里选择你的 Drive 连接。
- 登录式连接: 会打开 Google 自己的文件夹选择器。选一个文件夹即可,其中全部内容都会同步,含子文件夹。
- service account 连接: 没有选择器,因为 service account 无法浏览你的 Drive。请粘贴该文件夹的链接(例如
https://drive.google.com/drive/folders/1AbCdEfGhIjK),或只粘贴末尾那段 ID。该文件夹必须先共享给这个 service account。
给文件夹命名并点击 Create folder。如果该连接看不到你填的 Drive 文件夹,在创建任何东西之前就会返回“not found”或“denied access”。对 service account 而言,这几乎总是意味着文件夹没有共享给它的邮箱。
Google Drive 连接器的同步方式
首次完整复制之后,每次同步只读取 Drive 的变更流(change feed),只处理有变化的部分。被编辑过的文件会重新下载;被删除、被移入回收站、或被移出同步范围的文件,会从你的 project 文件夹里移除。
Google Drive 连接器的故障排查
| 提示 | 该检查什么 |
|---|---|
| ”That file does not contain a service account key” 或 ”This looks like a different kind of credentials file” | 你上传的是 OAuth client 文件。请到该 service account 的 Keys 标签下载密钥。 |
| ”drive folder … not found” | 文件夹 ID 写错,或该文件夹没有共享给这个连接所用的账号。 |
| ”drive denied access to the resource” | 该账号能看到文件夹但读不了它,或者这个 service account 所在的 Google Cloud project 没启用 Drive API。 |