通过 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”。这样可以防止 CloudFront 缓存请求并将其提供给未经身份验证的观看者。
    2. 对于来源请求政策,请选择“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 内部系统公开。 Google Cloud

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

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

如需使用 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