配置对来源的访问权限:Microsoft Azure Storage

您可以使用共享访问签名 (SAS) 配置对 Microsoft Azure Storage 中源数据的访问权限。

支持的区域

Storage Transfer Service 能够转移来自以下 Microsoft Azure Storage 区域的数据:
  • 美洲:美国东部、美国东部 2、美国西部、美国西部 2、美国西部 3、美国中部、美国中北部、美国中南部、美国中西部、加拿大中部、加拿大东部、巴西南部
  • 亚太地区:澳大利亚中部、澳大利亚东部、澳大利亚东南部、印度中部、印度南部、印度西部、东南亚、东亚、日本东部、日本西部、韩国南部、韩国中部
  • 欧洲、中东、非洲 (EMEA):法国中部、德国中西部、挪威东部、瑞典中部、瑞士北部、北欧、西欧、英国南部、英国西部、卡塔尔中部、阿联酋北部,南非北部

配置访问权限

如需配置对 Microsoft Azure Storage 容器的访问权限,请按以下步骤操作:

  1. 创建或使用现有的 Microsoft Azure Storage 用户来访问 Microsoft Azure Storage Blob 容器的存储账号。

  2. 在容器级层创建一个 SAS 令牌。有关说明,请参阅使用共享访问签名授予对 Azure Storage 资源的有限访问权限

    1. 允许的服务必须包含 Blob

    2. 允许的资源类型部分,选择容器对象

    3. 允许的权限必须包含读取列出。如果转移作业配置为从来源删除对象,则还必须包含删除权限。

    4. SAS 令牌的默认到期时间为 8 小时。设置合理的到期时间,以便成功完成转移。

    5. 请勿在允许的 IP 地址字段中指定任何 IP 地址。Storage Transfer Service 使用各种 IP 地址,并且不支持 IP 地址限制。

    6. 允许的协议应为仅限 HTTPS

  3. 创建令牌后,记下返回的 SAS 令牌值。使用 Storage Transfer Service 配置转移作业时,您需要用到此值。

在 Secret Manager 中保存您的 Microsoft 凭据

Secret Manager 是用于存储和管理密码等敏感数据的安全服务。它使用强大的加密、基于角色的访问权限控制和审核日志记录来保护您的 Secret。

Storage Transfer Service 可以利用 Secret Manager 保护您的 Azure 凭据。Storage Transfer Service 支持 Secret Manager 中的共享访问签名 (SAS) 令牌和 Azure 共享密钥

指定共享密钥时,Storage Transfer Service 使用该密钥生成服务 SAS,该服务 SAS 的范围限制为转移作业中指定的 Azure 容器。

启用该 API

启用 Secret Manager API。

启用 API

配置其他权限

用户权限

创建 Secret 的用户需要以下角色:

  • Secret Manager Admin (roles/secretmanager.admin)

了解如何授予角色

服务代理权限

Storage Transfer Service 服务代理需要以下 IAM 角色:

  • Secret Manager Secret Accessor (roles/secretmanager.secretAccessor)

如需向您的服务代理授予角色:

Cloud 控制台

  1. 按照说明检索您的服务代理电子邮件

  2. 在 Google Cloud 控制台中,转到 IAM 页面。

    转到 IAM

  3. 点击授予使用权限

  4. 新的主账号文本框中,输入服务代理电子邮件地址。

  5. 选择角色下拉列表中,搜索并选择 Secret Manager Secret Accessor

  6. 点击保存

gcloud

使用 gcloud projects add-iam-policy-binding 命令将 IAM 角色添加到服务代理。

  1. 按照说明检索您的服务代理电子邮件

  2. 从命令行中,输入以下命令:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:SERVICE_AGENT_EMAIL' \
      --role='roles/secretmanager.secretAccessor'
    

创建 Secret

使用 Secret Manager 创建 Secret:

Cloud 控制台

  1. 转到 Google Cloud 控制台中的 Secret Manager 页面。

    转到 Secret Manager

  2. 点击创建密钥

  3. 输入名称。

  4. Secret 值文本框中,按以下格式之一输入您的凭据。

    {
      "sas_token" : "SAS_TOKEN_VALUE"
    }
    

    或:

    {
      "access_key" : "ACCESS_KEY"
    }
    
  5. 点击创建密钥

  6. 创建 Secret 后,请记下 Secret 的完整资源名称:

    1. 选择概览标签页。

    2. 复制资源 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 防火墙和虚拟网络中的说明进行操作。