本指南介绍了使用 Drive API 构建自定义工具来批量导入客户端加密 (CSE) 文件的最佳实践。
考虑使用桌面版云端硬盘进行自助迁移
用户可以使用 桌面版云端硬盘 客户端从本地机器导入文件。它完全支持客户端加密功能 并允许用户自行加密和上传文件。只有在进行大规模、无人值守或多用户批量导入时,才需要按照本指南中的说明构建自定义工具。
准备工作
您必须了解如何管理单个客户端加密文件。请查看 管理单个 CSE 文件,了解 加密、上传/下载和解密的基本步骤,包括 生成令牌和与密钥访问控制列表服务 (KACLS) 交互。
使用服务账号进行身份验证
与 Drive API 交互时,请使用具有全网域 授权 的服务账号。这样,您的应用就可以模拟用户,以便您以编程方式遍历用户并直接代表他们上传文件。
重新创建目录结构
将导入工具设计为以递归方式遍历源文件和文件夹,以将现有目录结构镜像到云端硬盘。大致流程如下:
- 为每个源目录创建一个对应的云端硬盘文件夹。
- 加密目录的文件并将其上传到创建的云端硬盘文件夹中。
- 对子目录重复此过程。
将文件上传到正确的位置
始终将文件上传到正确用户的“我的云端硬盘”或可访问的共享云端硬盘。如需查找共享云端硬盘或文件夹 ID,请从云端硬盘网址中静态查找,或使用 drives.list 和 files.list 方法动态查找。
防止重复
云端硬盘允许同一文件夹中的多个文件共享完全相同的文件名。请在上传文件 之前 为其生成 ID。您可以使用 Drive API files.generateIds 方法来完成此操作。
通过存储这些预生成的 ID,导入工具可以尝试将每个文件上传到其特定 ID。如果具有该 ID 的文件已存在,您的工具可以安全地跳过该文件。使用预生成的 ID 有助于您的工具从崩溃中恢复。
在每次上传之前请求 CSE 令牌
在密钥封装和文件上传之前,立即为每个文件调用 generateCseToken。此方法可确保令牌准确反映关联元数据的当前状态,而元数据可能会发生变化。
对大型文件使用可续传上传
使用 Drive API 可续传 上传 来迁移大型文件。可续传上传允许导入工具在网络中断期间重试失败的数据块,而不是重新开始整个文件上传。
恢复共享权限
如果您的批量导入工具需要保留共享权限,请先加密并上传文件,然后调用 permissions.create 方法。
在文件上传期间,不会应用共享权限。
处理令牌过期
对于长时间运行的操作,您的脚本可能会因令牌过期而遇到身份验证错误。实现自动刷新访问 令牌 和重试上传的逻辑。如需了解详情,请参阅演示如何加密和上传单个文件的开源 示例。
彻底验证导入的文件
批量导入后,请执行彻底验证。Google 无法在服务器端解密和验证您的文件。“验证导入的文件”部分详细介绍了多种用于抽查单个文件的方法。
另一种大规模验证方法(在批量 导入后尤其有用)是使用官方解密 工具。 首先,使用 Google 导出功能从云端硬盘下载加密的内容。然后,尝试使用解密工具进行解密。此过程有助于识别任何无法解密的文件,从而指出导入工具的加密或密钥封装逻辑中可能存在的问题。
了解限制和配额
客户端加密文件受标准云端硬盘限制和配额的约束。请注意共享云端硬盘 限制、一般文件和 文件夹 限制、 以及如何管理配额。 此外,您的导入工具必须处理来自密钥访问控制列表服务 (KACLS) 和身份提供方 (IdP) 的速率限制。