配置对来源的访问权限: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 同时支持 共享访问签名 (SAS) 令牌和 Azure 共享密钥 在 Secret Manager 中运行。

在您指定共享密钥后,Storage Transfer Service 使用该密钥生成 服务 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. 密钥值文本框中,在下列任一位置输入您的凭据: 以下格式。

    {
      "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 防火墙和虚拟网络