您可以使用共享访问签名 (SAS) 配置对 Microsoft Azure Storage 中源数据的访问权限。
支持的区域
Storage Transfer Service 能够转移来自以下 Microsoft Azure Storage 区域的数据:- 美洲:美国东部、美国东部 2、美国西部、美国西部 2、美国西部 3、美国中部、美国中北部、美国中南部、美国中西部、加拿大中部、加拿大东部、巴西南部
- 亚太地区:澳大利亚中部、澳大利亚东部、澳大利亚东南部、印度中部、印度南部、印度西部、东南亚、东亚、日本东部、日本西部、韩国南部、韩国中部
- 欧洲、中东、非洲 (EMEA):法国中部、德国中西部、挪威东部、瑞典中部、瑞士北部、北欧、西欧、英国南部、英国西部、卡塔尔中部、阿联酋北部,南非北部
配置访问权限
如需配置对 Microsoft Azure Storage 容器的访问权限,请按以下步骤操作:
创建或使用现有的 Microsoft Azure Storage 用户来访问 Microsoft Azure Storage Blob 容器的存储账号。
在容器级层创建一个 SAS 令牌。请参阅 使用共享访问签名授予对 Azure Storage 资源的有限访问权限 了解相关说明。
允许的服务必须包含 Blob。
在允许的资源类型部分,选择容器和对象。
允许的权限必须包含读取和列出。如果转移作业配置为从来源删除对象,则还必须包含删除权限。
SAS 令牌的默认到期时间为 8 小时。设置合理的到期时间,以便成功完成转移。
请勿在允许的 IP 地址字段中指定任何 IP 地址。Storage Transfer Service 使用各种 IP 地址,并且不支持 IP 地址限制。
允许的协议应为仅限 HTTPS。
创建令牌后,记下返回的 SAS 令牌值。使用 Storage Transfer Service 配置转移作业时,您需要用到此值。
在 Secret Manager 中保存您的 Microsoft 凭据
Secret Manager 是用于存储和管理密码等敏感数据的安全服务。它使用强大的加密、基于角色的访问权限控制和审核日志记录来保护您的 Secret。
Storage Transfer Service 可利用 Secret Manager 保护您的 Azure 凭据。Storage Transfer Service 同时支持 共享访问签名 (SAS) 令牌和 Azure 共享密钥 在 Secret Manager 中运行。
在您指定共享密钥后,Storage Transfer Service 使用该密钥生成 服务 SAS 限制在转移作业中指定的 Azure 容器范围内 作业。
启用 API
Enable the Secret Manager API.
配置其他权限
用户权限
创建 Secret 的用户需要以下角色:
- Secret Manager Admin (
roles/secretmanager.admin
)
了解如何授予角色。
服务代理权限
Storage Transfer Service 服务代理需要以下 IAM 角色:
- Secret Manager Secret Accessor (
roles/secretmanager.secretAccessor
)
如需向您的服务代理授予角色:
Cloud 控制台
按照说明检索您的服务代理电子邮件。
在 Google Cloud 控制台中,转到 IAM 页面。
点击授予使用权限。
在新的主账号文本框中,输入服务代理电子邮件地址。
在选择角色下拉列表中,搜索并选择 Secret Manager Secret Accessor。
点击保存。
gcloud
使用 gcloud projects add-iam-policy-binding
命令将 IAM 角色添加到服务代理。
按照说明检索您的服务代理电子邮件。
从命令行中,输入以下命令:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:SERVICE_AGENT_EMAIL' \ --role='roles/secretmanager.secretAccessor'
创建 Secret
使用 Secret Manager 创建 Secret:
Cloud 控制台
转到 Google Cloud 控制台中的 Secret Manager 页面。
点击创建密钥。
输入名称。
在密钥值文本框中,在下列任一位置输入您的凭据: 以下格式。
{ "sas_token" : "SAS_TOKEN_VALUE" }
或:
{ "access_key" : "ACCESS_KEY" }
点击创建密钥。
创建 Secret 后,请记下 Secret 的完整资源名称:
选择概览标签页。
复制资源 ID 的值。它使用以下格式:
projects/1234567890/secrets/SECRET_NAME
gcloud
如需使用 gcloud 命令行工具创建新 Secret,请将 JSON 格式的凭据传递给 gcloud secrets create
命令:
printf '{
"sas_token" : "SAS_TOKEN_VALUE"
}' | gcloud secrets create SECRET_NAME --data-file=-
或:
printf '{
"access_key" : "ACCESS_KEY"
}' | gcloud secrets create SECRET_NAME --data-file=-
检索 Secret 的完整资源名称:
gcloud secrets describe SECRET_NAME
请记下响应中 name
的值。它使用以下格式:
projects/1234567890/secrets/SECRET_NAME
如需详细了解如何创建和管理 Secret,请参阅 Secret Manager 文档。
将 Secret 传递给作业创建命令
将 Secret Manager 与 Storage Transfer Service 要求使用 REST API 创建转移作业。
将 Secret Manager 资源名称作为 transferSpec.azureBlobStorageDataSource.credentialsSecret
字段的值传递:
POST https://storagetransfer.googleapis.com/v1/transferJobs
{
"description": "Transfer with Secret Manager",
"status": "ENABLED",
"projectId": "PROJECT_ID",
"transferSpec": {
"azureBlobStorageDataSource": {
"storageAccount": "AZURE_SOURCE_NAME",
"container": "AZURE_CONTAINER",
"credentialsSecret": "SECRET_RESOURCE_ID",
},
"gcsDataSink": {
"bucketName": "CLOUD_STORAGE_BUCKET_NAME"
}
}
}
IP 限制
如果使用 Azure Storage 防火墙限制对 Azure 资源的访问, 您必须将 Storage Transfer Service 工作器使用的 IP 地址范围添加到 允许的 IP。
由于这些 IP 范围可能会发生变化,因此我们会将当前值以 JSON 文件的形式发布到下面的永久地址:
https://www.gstatic.com/storage-transfer-service/ipranges.json
向文件添加新范围后,我们至少会等待 7 天,之后才会使用该范围处理来自 Storage Transfer Service 的请求。
我们建议您至少每周从本文档中提取一次数据,以确保您的安全配置保持最新。如需查看从 JSON 文件提取 IP 范围的示例 Python 脚本,请参阅 Virtual Private Cloud 文档中的这篇文章。
要将这些范围添加为允许的 IP,请按照 Microsoft Azure 文章:配置 Azure Storage 防火墙和虚拟网络。