本教程介绍了如何使用 Storage Transfer Service 和 VPC 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 服务之间的通信(除非两个项目都位于受控边界内)。
目标
- 配置 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 资源之外,本教程还使用以下 Amazon Web Services (AWS) 资源,这些资源可能会产生费用:
准备工作
- 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能。
-
启用 Access Context Manager, Cloud Storage, and Storage Transfer Service API。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能。
-
启用 Access Context Manager, Cloud Storage, and Storage Transfer Service API。
-
在 Google Cloud 控制台中,激活 Cloud Shell。
Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。
- 在 Google Cloud 控制台中,转到 IAM 和管理页面,向您的帐号授予 Storage Admin 和 Access Context Manager Admin 角色。
前往“IAM 和管理”页面 firebase.projects.get
resourcemanager.projects.get
resourcemanager.projects.list
storage.buckets.*
storage.objects.*
accesscontextmanager.accessLevels.*
accesscontextmanager.accessPolicies.*
accesscontextmanager.accessPolicies.setIamPolicy
accesscontextmanager.accessPolicies.update
accesscontextmanager.accessZones.*
accesscontextmanager.policies.*
accesscontextmanager.servicePerimeters.*
resourcemanager.organizations.get
Storage Admin 角色具有以下权限:
Access Context Manager Admin 角色具有以下权限:
配置 AWS 访问权限
在本教程中,您将与现有 AWS Identity and Access Management (AWS IAM) 用户协作,以创建与 StorageTransfer Service 关联的 AWS IAM 政策。您需要这些政策和用户以验证与 Google Cloud 的连接,并帮助保护传输中的数据。本教程要求您具有一个用于从中转移数据的 Amazon S3 存储桶;您可以使用现有 Amazon S3 存储桶,也可以创建一个新的存储桶。 您可以使用测试或沙箱 AWS 帐号来避免影响同一帐号中的生产资源。
为 Storage Transfer Service 创建 AWS IAM 政策并将其应用于您的存储桶
- 在 AWS Management Console 中,转到 IAM 页面。
- 点击 Policies(政策),然后点击 Create Policy(创建政策)。
- 在可视化编辑器中,点击 IAM Policy(IAM 政策)。
- 点击 S3。
选择以下 Access Level(访问权限级别)复选框:
- List(列出)
- Read(读取)
- Write(写入)
在 Resources(资源)窗格中,点击 Specific(特定)。
在 Bucket(存储桶)窗格中,点击 Add ARN(添加 ARN)。
在 Bucket Name(存储桶名称)字段中,输入要从中转移数据的存储桶的名称。
点击 Review Policy(评价政策),然后输入一个名称,例如
transfer-user-policy
。点击 Create Policy(创建政策)。
将 AWS IAM 用户添加到您的 AWS IAM 政策
- 在 AWS Management Console 中,转到 IAM 页面。
- 点击 Users(用户),然后点击 Add User(添加用户)。
- 在名称字段中,输入
transfer-user
。 - 对于 Access Type(访问类型),点击 Programmatic Access(程序化访问),并附加您为该用户创建的
transfer-user-policy
。 - 创建用户后,请记下您的访问 ID 和密文密钥对,因为本教程稍后将会用到它们。
- 点击保存。
创建 Cloud Storage 存储桶
您需要先创建 Cloud Storage 存储桶,然后才能启用 VPC Service Controls 边界。
在 Google Cloud 控制台中,转到 Cloud Storage 浏览器。
点击创建存储桶。
在名称字段中,输入一个名称,例如
project-id-destination-bucket
,其中project-id
表示您的 Google Cloud 项目 ID。对于存储桶的默认存储类别,点击 Regional 存储空间。
在位置下拉列表中,点击存储桶数据所在的区域。
点击创建。
查找转移操作服务帐号的名称
Storage Transfer Service 使用 Google 管理的服务帐号与您项目中的 Cloud Storage 和 Pub/Sub 资源进行通信。您需要确定您的服务帐号的名称,因为本教程稍后将会用到它。如果您之前未使用过 Storage Transfer Service,则以下步骤会为您创建 Storage Transfer Service 服务帐号。如需详细了解 Google 管理的服务帐号,请参阅服务帐号。
- 如需确定您的服务帐号的名称,请转到 Storage Transfer Service API 页面。
在字符串字段中,输入您的 Google Cloud 项目 ID。
服务帐号的名称通常为以下格式:
project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com
在 Access Context Manager 中创建访问权限政策
访问权限政策收集您为组织创建的服务边界和访问权限级别。一个组织只能有一个访问权限政策。
在 Google Cloud 控制台中,转到设置页面。
记下您的 Google Cloud 项目 ID 和组织名称。
在 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 边界时,首先不允许任何流量进入。然后,应创建一个明确的访问权限级别,以允许转移操作将数据发送到受控边界。
在 Google Cloud Console 中,转到 VPC Service Controls 页面。
点击新建边界。
在名称字段中,输入边界的名称,例如
data-transfer-perimeter
。保持选中常规边界。
点击添加项目,将您通过本教程创建的项目添加到要保护的项目的列表中。
点击 Cloud Storage API。
保持访问权限级别为默认值。
点击保存。
在访问权限政策中创建访问权限级别
在本部分中,您将通过服务帐号限制对 VPC 的访问。
在 Cloud Shell 中,创建一个名为
conditions.yaml
的 YAML 文件,该文件列出了您希望向其提供访问权限的主账号:- members: - serviceAccount:project-project-number@storage-transfer-service.iam.gserviceaccount.com - user:sysadmin@example.com
创建访问权限级别:
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
在 Google Cloud 控制台中,转到 VPC Service Controls。
对于 VPC Service Control,点击修改。
点击访问权限级别,然后选择
trusted-identity-ingest
访问权限级别。点击保存。
现在,受控边界内允许的唯一操作来自您定义的服务帐号。
开始转移
在 Google Cloud 控制台中,转到转移页面。
点击创建转移作业。
点击 Amazon S3 存储桶。
在 Amazon S3 存储桶字段中,输入 AWS Management Console 中显示的来源 Amazon S3 存储桶名称。
输入与 Amazon S3 存储桶相关联的访问密钥 ID 和密钥。您在本教程的开头已复制了这些值。
在选择目标中,输入您在边界内创建的存储桶的名称,例如
project-id-destination-bucket
。对于配置转移作业,请将您的转移作业计划为立即运行。
可选:修改转移作业名称。
对于说明,请使用唯一的描述性名称,以帮助您日后识别转移作业。
点击创建。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 帐号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
删除项目
- 在 Google Cloud 控制台中,转到管理资源页面:
- 在项目列表中,选择要删除的项目,然后点击删除。
- 在对话框中输入项目 ID,然后点击关闭以删除项目。
后续步骤
- 探索有关 Google Cloud 的参考架构、图表和最佳做法。查看我们的 Cloud Architecture Center。
- 查看有关使用 Access Context Manager 启用访问权限级别的更高级方法