将数据转移到本地或私有云文件系统(例如 POSIX、NFS 或 SMB)时,您必须配置以下内容:
- 本地文件系统权限:向目标转移代理授予对目标目录的操作系统级写入权限。
- 中间存储桶权限(仅限文件到文件):在用于在文件系统之间暂存文件的中间 Cloud Storage 存储桶上授予 IAM 角色。
前提条件
- 用户权限:确保您的用户账号或用户代管式服务账号有权配置转移作业和代理池。请参阅所需的用户权限。
- 基于代理的项目级权限:确保您已为服务代理和转移代理账号配置了所需的项目级角色。请参阅基于代理的项目级权限。
本地目标文件系统权限
转移代理会将文件直接写入主机文件系统。如需启用成功写入,请执行以下操作:
操作系统用户权限:确保运行容器进程的操作系统用户对目标目录树具有读取、写入和执行权限。
装载目录:安装目标代理时,使用
--mount-directories标志将目标目录路径装载到容器中:gcloud transfer agents install --pool=DESTINATION_POOL_NAME \ --mount-directories=/path/to/destination/dir
中间存储桶权限(文件到文件转移作业)
在两个文件系统之间进行转移时,会使用中间 Cloud Storage 存储桶在转移期间暂存文件。
以下预定义角色可向服务代理授予对中间存储桶的所需访问权限:
- Storage Object Creator (
roles/storage.objectCreator) - Storage Object Viewer (
roles/storage.objectViewer) - Storage Legacy Bucket Reader (
roles/storage.legacyBucketReader)
以下角色可向转移代理账号授予对中间存储桶的所需访问权限:
- Storage Object User (
roles/storage.objectUser)
在中间存储桶上授予以下角色:
控制台
- 在 Google Cloud 控制台中,转到 Cloud Storage 存储桶页面。
- 点击中间存储桶的存储桶溢出菜单 (),然后选择编辑权限。
- 点击 + 添加主账号。
- 在新的主账号中,输入您的服务代理电子邮件地址。
- 从选择角色下拉菜单中选择
Storage Object Creator、Storage Object Viewer和Storage Legacy Bucket Reader。 - 再次点击 + 添加主账号。
- 输入用于来源和目标代理池的转移代理账号的邮箱。
- 从选择角色下拉菜单中选择
Storage Object User。 - 点击保存。
gcloud
向服务代理授予日志记录和元数据角色:
gcloud storage buckets add-iam-policy-binding gs://INTERMEDIATE_BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectCreatorgcloud storage buckets add-iam-policy-binding gs://INTERMEDIATE_BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectViewergcloud storage buckets add-iam-policy-binding gs://INTERMEDIATE_BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReader向源代理池和目标代理池的转移代理账号授予对象管理角色:
gcloud storage buckets add-iam-policy-binding gs://INTERMEDIATE_BUCKET_NAME \ --member=serviceAccount_OR_user:TRANSFER_AGENT_ACCOUNT --role=roles/storage.objectUser将
- INTERMEDIATE_BUCKET_NAME:中间暂存存储桶的名称。
- SERVICE_AGENT_EMAIL:服务代理邮箱。
- serviceAccount_OR_user:如果您的转移代理账号是服务账号,请指定
serviceAccount;如果您的代理是使用用户账号安装的,请指定user。 - TRANSFER_AGENT_ACCOUNT:运行转移代理的账号的邮箱。如果来源代理池和目标代理池使用不同的账号,请重复此命令。
REST API
生成访问令牌,以对您的请求进行身份验证。如果您使用的是
gcloudCLI,请运行:gcloud auth print-access-token
检索现有存储桶 IAM 政策 (
GET https://storage./storage/v1/b/<var>INTERMEDIATE_BUCKET_NAME</var>/iam),将以下绑定附加到其bindings数组,然后将合并后的政策保存为intermediate_policy.json:{ "bindings": [ { "role": "roles/storage.objectCreator", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.objectViewer", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.legacyBucketReader", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.objectUser", "members": ["serviceAccount_OR_user:TRANSFER_AGENT_ACCOUNT"] } ] }
将
- SERVICE_AGENT_EMAIL:服务代理邮箱。
- serviceAccount_OR_user:如果您的转移代理账号是服务账号,请指定
serviceAccount;如果您的代理是使用用户账号安装的,请指定user。 - TRANSFER_AGENT_ACCOUNT:安装了转移代理的账号的邮箱。如果源代理池和目标代理池使用不同的账号,请在
roles/storage.objectUser的members数组中添加这两个账号。
通过
curl更新中间存储桶政策:curl -X PUT --data-binary @intermediate_policy.json \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://storage./storage/v1/b/INTERMEDIATE_BUCKET_NAME/iam"将
- OAUTH2_TOKEN:第 1 步中生成的 OAuth 2.0 访问令牌。
- INTERMEDIATE_BUCKET_NAME:中间存储桶的名称。
如需详细了解文件到文件架构,请参阅文件系统到文件系统转移。
性能和优化
- 为了在转移到大型文件系统时最大限度地提高吞吐量,请在目标代理池中安装多个代理(建议至少安装 3 个)。请参阅转移代理的最佳实践。
- 对于文件到文件转移作业中的大型文件,请考虑启用向中间存储桶分段上传。使用 Storage Object User (
roles/storage.objectUser) 时,系统会自动包含所需的分段上传权限 (storage.multipartUploads.*)。
后续步骤
- 了解如何安装转移代理。
- 了解如何配置对来源的访问权限:文件系统。
- 了解如何配置对来源的访问权限:Cloud Storage。
- 了解如何在文件系统之间转移数据。