使用 VPC Service Controls 和 Storage Transfer Service 将数据从 Amazon S3 转移到 Cloud Storage


本教程介绍了如何使用 Storage Transfer ServiceVPC Service Controls 边界安全强化从 Amazon Simple Storage Service (Amazon S3) 到 Cloud Storage 的数据传输。本教程适用于具有以下特征的数据所有者:拥有驻留在 Amazon S3 中的数据,希望处理这些数据或将这些数据安全迁移到 Google Cloud。

本教程假定您熟悉 Amazon Web Services (AWS) 并了解有关处理对象存储中数据的基础知识。本教程通过 Access Context Manager 应用基于服务账号的方法来控制访问权限。如需了解比基于服务账号的方法更高级的访问权限级别,请参阅创建访问权限级别

架构

下图展示了 VPC Service Controls 架构。

VPC Service Controls 的架构,其中,Google Cloud 服务之间的通信在受控边界之外遭到拒绝。

在上图中,VPC Service Controls 明确拒绝了 Google Cloud 服务之间的通信(除非两个项目都位于受控边界内)。

目标

  • 配置 AWS 访问权限。
  • 创建 VPC Service Controls 边界。
  • 使用 Access Context Manager 创建访问权限政策和访问权限级别。
  • 使用 Storage Transfer Service 在 Amazon S3 和 Cloud Storage 之间移动数据。
  • 计划 Storage Transfer Service 以按计划检索数据。

费用

在本文档中,您将使用 Google Cloud 的以下收费组件:

使用 Storage Transfer Service 不会产生任何额外费用,但需支付 Cloud Storage 价格以及外部提供方费用。

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理

除了 Google Cloud 资源之外,本教程还使用以下 Amazon Web Services (AWS) 资源,这些资源可能会产生费用:

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 启用 Access Context Manager, Cloud Storage, and Storage Transfer Service API。

    启用 API

  5. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  6. 确保您的 Google Cloud 项目已启用结算功能

  7. 启用 Access Context Manager, Cloud Storage, and Storage Transfer Service API。

    启用 API

  8. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  9. 在 Google Cloud 控制台中,转到 IAM 和管理页面,向您的账号授予 Storage Admin 和 Access Context Manager Admin 角色。
    前往“IAM 和管理”页面
  10. Storage Admin 角色具有以下权限:

    • firebase.projects.get
    • resourcemanager.projects.get
    • resourcemanager.projects.list
    • storage.buckets.*
    • storage.objects.*

    Access Context Manager Admin 角色具有以下权限:

    • accesscontextmanager.accessLevels.*
    • accesscontextmanager.accessPolicies.*
    • accesscontextmanager.accessPolicies.setIamPolicy
    • accesscontextmanager.accessPolicies.update
    • accesscontextmanager.accessZones.*
    • accesscontextmanager.policies.*
    • accesscontextmanager.servicePerimeters.*
    • resourcemanager.organizations.get

配置 AWS 访问权限

在本教程中,您将与现有 AWS Identity and Access Management (AWS IAM) 用户协作,以创建与 StorageTransfer Service 关联的 AWS IAM 政策。您需要这些政策和用户以验证与 Google Cloud 的连接,并帮助保护传输中的数据。本教程要求您具有一个用于从中转移数据的 Amazon S3 存储桶;您可以使用现有 Amazon S3 存储桶,也可以创建一个新的存储桶。 您可以使用测试或沙箱 AWS 账号来避免影响同一账号中的生产资源。

为 Storage Transfer Service 创建 AWS IAM 政策并将其应用于您的存储桶

  1. 在 AWS Management Console 中,转到 IAM 页面。
  2. 点击 Policies(政策),然后点击 Create Policy(创建政策)。
  3. 在可视化编辑器中,点击 IAM Policy(IAM 政策)。
  4. 点击 S3
  5. 选择以下 Access Level(访问权限级别)复选框:

    • List(列出)
    • Read(读取)
    • Write(写入)
  6. Resources(资源)窗格中,点击 Specific(特定)。

  7. Bucket(存储桶)窗格中,点击 Add ARN(添加 ARN)。

  8. Bucket Name(存储桶名称)字段中,输入要从中转移数据的存储桶的名称。

  9. 点击 Review Policy(评价政策),然后输入一个名称,例如 transfer-user-policy

  10. 点击 Create Policy(创建政策)。

将 AWS IAM 用户添加到您的 AWS IAM 政策

  1. 在 AWS Management Console 中,转到 IAM 页面。
  2. 点击 Users(用户),然后点击 Add User(添加用户)。
  3. 名称字段中,输入 transfer-user
  4. 对于 Access Type(访问类型),点击 Programmatic Access(程序化访问),并附加您为该用户创建的 transfer-user-policy
  5. 创建用户后,请记下您的访问 ID 和密文密钥对,因为本教程稍后将会用到它们。
  6. 点击保存

创建 Cloud Storage 存储桶

您需要先创建 Cloud Storage 存储桶,然后才能启用 VPC Service Controls 边界。

  1. 在 Google Cloud 控制台中,转到 Cloud Storage 浏览器

    转到“Cloud Storage 浏览器”页面

  2. 点击创建存储桶

  3. 名称字段中,输入一个名称,例如 project-id-destination-bucket,其中 project-id 表示您的 Google Cloud 项目 ID。

  4. 对于存储桶的默认存储类别,点击 Regional 存储空间

  5. 位置下拉列表中,点击存储桶数据所在的区域。

  6. 点击创建

查找转移操作服务账号的名称

Storage Transfer Service 使用 Google 管理的服务账号与您项目中的 Cloud Storage 和 Pub/Sub 资源进行通信。您需要确定您的服务账号的名称,因为本教程稍后将会用到它。如果您之前未使用过 Storage Transfer Service,则以下步骤会为您创建 Storage Transfer Service 服务账号。如需详细了解 Google 管理的服务账号,请参阅服务账号

  1. 如需确定您的服务账号的名称,请转到 Storage Transfer Service API 页面。
  2. 字符串字段中,输入您的 Google Cloud 项目 ID。

    服务账号的名称通常为以下格式:project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com

在 Access Context Manager 中创建访问权限政策

访问权限政策收集您为组织创建的服务边界和访问权限级别。一个组织只能有一个访问权限政策。

  1. 在 Google Cloud 控制台中,转到设置页面。

    转到“设置”页面

  2. 记下您的 Google Cloud 项目 ID 和组织名称。

  3. 在 Cloud Shell 中,创建一个政策:

    gcloud access-context-manager policies create \
        --organization organization-id --title policy-title
    
    • organization-id 是您之前发现的组织 ID。
    • policy-title 是边界的标题。例如 Example-Company-Access-Policy

    输出如下所示:

    Create request issued
    Waiting for operation [accessPolicies/policy-title/create/policy-number] to complete...done.
    Created.
    

    policy-number 表示分配给政策标题的唯一 ID。

创建 VPC Service Controls 边界

在创建 VPC Service Controls 边界时,首先不允许任何流量进入。然后,应创建一个明确的访问权限级别,以允许转移操作将数据发送到受控边界。

  1. 在 Google Cloud Console 中,转到 VPC Service Controls 页面。

    转到 VPC Service Controls 页面

  2. 点击新建边界

  3. 名称字段中,输入边界的名称,例如 data-transfer-perimeter

  4. 保持选中常规边界

  5. 点击添加项目,将您通过本教程创建的项目添加到要保护的项目的列表中。

  6. 点击 Cloud Storage API

  7. 保持访问权限级别为默认值。

  8. 点击保存

在访问权限政策中创建访问权限级别

在本部分中,您将通过服务账号限制对 VPC 的访问。

  1. 在 Cloud Shell 中,创建一个名为 conditions.yaml 的 YAML 文件,该文件列出了您希望向其提供访问权限的主账号:

     - members:
         - serviceAccount:project-project-number@storage-transfer-service.iam.gserviceaccount.com
         - user:sysadmin@example.com
     

  2. 创建访问权限级别:

    gcloud access-context-manager levels create name \
        --title title \
        --basic-level-spec ~./conditions.yaml \
        --combine-function=OR \
        --policy=policy-id
    
    • name 是访问权限级别的唯一名称,必须以字母开头,并且只包含字母、数字和下划线。
    • title 是政策独有的标题,例如 trusted-identity-ingest
    • policy-id 是您组织的访问权限政策的 ID(编号)。
    • combine-function 设置为 OR。默认值 AND 要求满足所有条件才能授予访问权限级别。即使不满足其他条件(例如 IP 地址或从其他必需访问权限级别继承的条件),OR 值也将为主账号提供访问权限。

    输出内容类似如下:

    Create request issued for: name
    Waiting for operation [accessPolicies/policy-id/accessLevels/name/create/access-level-number] to complete...done.
    Created level name.
    

    access-level-number 表示分配给访问权限级别的唯一 ID。

将访问权限级别绑定到 VPC Service Controls

  1. 在 Google Cloud 控制台中,转到 VPC Service Controls

    转到 VPC Service Controls 页面

  2. 对于 VPC Service Control,点击修改

  3. 点击访问权限级别,然后选择 trusted-identity-ingest 访问权限级别。

  4. 点击保存

现在,受控边界内允许的唯一操作来自您定义的服务账号。

开始转移

  1. 在 Google Cloud 控制台中,转到转移页面。

    转到“转移”页面

  2. 点击创建转移作业

  3. 点击 Amazon S3 存储桶

  4. Amazon S3 存储桶字段中,输入 AWS Management Console 中显示的来源 Amazon S3 存储桶名称。

  5. 输入与 Amazon S3 存储桶相关联的访问密钥 ID密钥。您在本教程的开头已复制了这些值。

  6. 选择目标中,输入您在边界内创建的存储桶的名称,例如 project-id-destination-bucket

  7. 对于配置转移作业,请将您的转移作业计划为立即运行

  8. 可选:修改转移作业名称。

  9. 对于说明,请使用唯一的描述性名称,以帮助您日后识别转移作业。

  10. 点击创建

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤