通过 CloudFront 从 S3 转移

来自 Amazon S3 的转移作业可以使用 Amazon CloudFront 发行版作为出站路径。

与直接从 S3 传输数据相比,通过 CloudFront 进行数据传输的 AWS 出站流量费用可能会更低。如需了解详情,请参阅 CloudFront 价格S3 出站流量费用

使用 CloudFront 作为出站流量路径不会向公众公开 S3 对象。请参阅使用 CloudFront 是否会将我的对象公开?

概览

如需通过 CloudFront 转移 S3 数据,您必须按照以下步骤操作:

配置 IAM 权限

按照无代理传输权限中的说明授予所需的 Google Cloud 权限。

配置对 S3 存储桶的访问权限

按照“配置对来源的访问权限:Amazon S3”中的说明配置对 Amazon S3 中数据的访问权限。

为 S3 存储桶创建 CloudFront 发行版

  1. 在您的 AWS 帐号中,前往 CloudFront
  2. 点击创建 CloudFront 发行版
  3. 来源网域下,选择您的 S3 存储桶。
  4. 源路径必须留空。
  5. 接受系统自动填充的出发地名称或指定您自己的值。
  6. 来源访问权限部分,选择“公开”。此操作不会将您的存储桶设为公开;它指示 CloudFront 不应配置访问机制。
  7. 缓存键和源请求部分:
    1. 对于缓存政策,请选择“CachingDisabled”。CachingDisabled这样可以防止 CloudFront 缓存请求并将其传送给未经身份验证的查看者。
    2. 对于来源请求政策,请选择“AllViewerExceptHostHeader”。AllViewerExceptHostHeader这允许 CloudFront 将身份验证标头转发到 S3,以便 Storage Transfer Service 可以使用安全凭据访问您的存储桶。
  8. Web 应用防火墙 (WAF) 部分,选择“不启用”。
  9. (可选)选择价格类。Storage Transfer Service 根据来源存储桶所在的区域选择工作器池,因此该区域会产生 CloudFront 费用。若要获取最低价格,请确保您的来源存储桶位于美国或欧洲,或者选择“仅使用北美和欧洲”作为 CloudFront 中的 Price 类
  10. 点击创建 CloudFront 发行版

    成功创建后,系统会显示 CloudFront 发行版详情页面。

  11. 记下分发域名。例如 https://dy1h2n3l4ob56.cloudfront.net。如果详情页面未在分发域名前面包含 https:// 协议,则您需要在创建转移作业时自行添加该协议。

创建转移作业

Google Cloud 控制台和 REST API 支持通过 CloudFront 发行版进行转移。

请勿在转移作业名称中包含敏感信息,例如个人身份信息 (PII) 或安全数据。资源名称可能会传播到其他 Google Cloud 资源的名称,并且可能会向您项目之外的 Google 内部系统公开。

Google Cloud 控制台

如需使用 Google Cloud 控制台创建转移作业,请按照说明创建转移作业

当系统提示您输入 CloudFront 网域时,请输入您在上一部分中记下的分发域名。您还可以在 Amazon Web Services 控制台的 CloudFront 部分中找到此值。其格式为 https://dy1h2n3l4ob56.cloudfront.net

REST API

如需使用 REST API 创建转移作业,请按照创建转移作业页面上的示例进行操作。

指定分发域名作为 transferSpec.awsS3DataSource.cloudfrontDomain 字段的值:

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "cloudfrontDomain": "https://dy1h2n3l4ob56.cloudfront.net",
    "awsAccessKey": {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
  },
  ...
}

常见问题解答

使用 CloudFront 是否会向公众公开我的对象?

不会。如果您遵循了此页面上的配置步骤,您的对象不会公开。

  • CloudFront 无法直接访问您的 S3 对象。
  • 如果用户尝试直接访问或通过 CloudFront(如果您的存储桶不公开)访问您的对象,则会收到 permission denied 错误。
  • Storage Transfer Service 使用您在转移作业中提供的凭据对向 CloudFront 发出的请求签名,这使我们能够安全地下载您的对象,就像我们直接从 S3 下载一样。由于标头转发设置 AllViewerExceptHostHeader 的缘故,这一设置是有效的。