使用 Amazon S3 配置AWS DataSync传输 - AWS DataSync

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon S3 配置AWS DataSync传输

要向 S3 存储桶传输数据或从您的 S3 存储桶传输数据,您必须创建AWS DataSync传输位置。DataSync可以将此位置用作传输数据的源或目的地。

重要

在创建位置之前,请确保阅读以下部分:

访问 S3 存储桶

DataSync需要访问 Amazon S3 桶。为此,请扮DataSync演具有 IAM 策略和 AWS Identity and Access Management () 信任关系的 AWS Security Token Service (IAMAWS STS) 角色。该策略决定角色可以执行哪些操作。

DataSync可以为您创建此角色,但在某些情况下您可能需要手动创建角色。有关更多信息,请参阅使用 IAM 策略访问您的 S3 存储桶

Amazon S3 传输的存储类注意事项

DataSync可以将对象直接传输到您在创建 Amazon S3 位置时指定的 Amazon S3 存储类中。有些存储类别的行为会影响您的 Amazon S3 存储成本。有关更多信息,请参阅 Amazon S3 定价

重要

复制到 S3 存储桶的新对象使用您在创建 Amazon S3 位置时指定的存储类进行存储。DataSync不会更改存储桶中现有对象的存储类别(即使该对象是在源位置修改的)。

Amazon S3 存储类 注意事项
S3 Standard 选择 S3 Standard 以冗余方式将您经常访问的文件存储在地理上分隔的多个可用区中。如果您没有指定存储类别,则这是默认设置。
S3 Intelligent-Tiering

选择 S3 Intelligent-Tiering (S3 智能分层),可通过自动将数据移动到最具成本效益的存储访问层来优化存储成本。

对于存储在 S3 Intelligent-Tiering 存储类中的对象,您需要按月付费。这项 Amazon S3 费用包括监控数据访问模式和在层间移动对象。

S3 Standard-IA

选择 S3 Standard-IA,将您不经常访问的对象以冗余方式存储在地理上分隔的多个可用区中。

存储在 S3 Standard-IA 存储类中的对象可能会因覆盖、删除或检索而产生额外费用。考虑这些对象的更改频率,计划保留这些对象的时间以及需要访问的频率。对对象数据或元数据的更改等同于删除一个对象并创建一个新对象来替换它。这会导致存储在 S3 Standard-IA 存储类中的对象产生额外费用。

在 S3 Standard-IA 存储类中,小于 128 KB 的对象小于每个对象的最低容量费用。这些对象存储在 S3 标准存储类中。

S3 One Zone-IA

选择 S3 单区 — IA 将您不常访问的对象存储在单个可用区中。

存储在 S3 One Zone-IA 存储类中的对象可能会因覆盖、删除或检索而产生额外费用。考虑这些对象的更改频率,计划保留这些对象的时间以及需要访问的频率。对对象数据或元数据的更改等同于删除一个对象并创建一个新对象来替换它。这会导致存储在 S3 单区 — IA 存储类中的对象产生额外费用。

在 S3 单区 — IA 存储类中,小于 128 KB 的对象小于每个对象的最低容量费用。这些对象存储在 S3 标准存储类中。

S3 Glacier 即时检索

选择 S3 Glacier 即时检索可存档很少访问但需要在毫秒内检索的对象。

与 S3 Standard-IA 存储类别相比,存储在 S3 Glacier Instant Retrieval 存储类中的数据可以节省成本。但是 S3 Glacier 即时检索的数据访问成本高于 S3 Standard-IA。

存储在 S3 Glacier 即时检索中的对象可能会因覆盖、删除或检索而产生额外费用。考虑这些对象的更改频率,计划保留这些对象的时间以及需要访问的频率。对对象数据或元数据的更改等同于删除一个对象并创建一个新对象来替换它。这会导致存储在 S3 Glacier 即时检索存储类中的对象产生额外费用。

小于 128KB 的对象小于 S3 Glacier Instant Retrieval 存储类中每个对象的最低容量费用。这些对象存储在 S3 标准存储类中。

S3 Glacier Flexible Retrieval

选择 S3 Glacier Flexible Retrieval

存储在 S3 Glacier Flexible Retrieval 中的对象会因覆盖、删除或检索而产生额外费用。考虑这些对象的更改频率,计划保留这些对象的时间以及需要访问的频率。对对象数据或元数据的更改等同于删除一个对象并创建一个新对象来替换它。这会导致存储在 S3 Glacier Flexible Retrieval 存储类中的对象产生额外费用。

小于 40 KB 的对象小于 S3 Glacier Flexible Retrieval 存储类中每个对象的最低容量费用。这些对象存储在 S3 标准存储类中。

必须先恢复在此存储类中存档的对象,然后DataSync才能读取它们。有关信息,请参阅 Amazon S3 用户指南中的处理存档对象

使用 S3 Glacier 灵活检索时,选择 “仅验证传输的数据” 任务选项,以便在传输结束时比较数据和元数据校验和。您不能使用此存储类的 “验证目标中的所有数据” 选项,因为它需要从目标检索所有现有对象。

S3 Glacier Deep Archive

选择 S3 Glacier Deep Archive 来存档您的对象,以实现长期数据保留和数字保存,每年访问一次或两次数据。

存储在 S3 Glacier Deep Archive 中的对象可能会因覆盖、删除或检索而产生额外费用。考虑这些对象的更改频率,计划保留这些对象的时间以及需要访问的频率。对对象数据或元数据的更改等同于删除一个对象并创建一个新对象来替换它。这会导致存储在 S3 Glacier Deep Archive 存储类中的对象产生额外费用。

小于 40 KB 的对象小于 S3 Glacier Deep Archive 存储类中每个对象的最低容量费用。这些对象存储在 S3 标准存储类中。

必须先恢复在此存储类中存档的对象,然后DataSync才能读取它们。有关信息,请参阅 Amazon S3 用户指南中的处理存档对象

使用 S3 Glacier Deep Archive 时,选择 “仅验证传输的数据” 任务选项,以便在传输结束时比较数据和元数据校验和。您不能使用此存储类的 “验证目标中的所有数据” 选项,因为它需要从目标检索所有现有对象。

S3 Outposts 基地

Amazon S3 on Outposts 的存储类。

使用时评估 S3 请求成本 DataSync

使用 Amazon S3 站点时,您会产生与发出 S3 API 请求相关的费用DataSync。本部分可以帮助您了解这些请求的DataSync使用方式以及它们可能如何影响您的 Amazon S3 成本

由 S3 发出的 S3 请求 DataSync

下表描述了当您将数据复制到 Amazon S3 位置或从 Amazon S3 位置复制数据时DataSync可能发出的 S3 请求。

S3 请求 怎么DataSync用

ListObjectV2

DataSync对每个以正斜杠 (/) 结尾的对象发出至少一个LIST请求,以列出以该前缀开头的对象。此请求是在任务的准备阶段调用的。

HeadObject

DataSync在任务的准备验证阶段发出检索对象元数据的HEAD请求。每个对象可能有多个HEAD请求,具体取决于您DataSync要如何验证其传输的数据的完整性

GetObject

DataSync在任务的传输阶段发出从对象读取数据的GET请求。可以有多个对大型对象的GET请求。

PutObject

DataSync在任务的传输阶段发出在目标 S3 存储桶中创建对象的PUT请求。由于DataSync使用 Amazon S3 分段上传功能,因此可能会有多个对大型对象的PUT请求。

CopyObject

DataSync只有在对象的元数据发生变化时,才会COPY请求创建该对象的副本。如果您最初使用其他未传送其元数据的服务或工具将数据复制到 S3 存储桶,则可能会发生这种情况。

与成本相关的注意事项

DataSync每次运行任务时都会在 S3 存储桶上发出 S3 请求。在某些情况下,这可能会导致费用增加。例如:

  • 您经常将对象从 S3 存储桶转移或从 S3 存储桶传出。

  • 您可能没有传输太多数据,但是您的 S3 存储桶中有很多对象。在这种情况下,您仍然会看到高额费用,因为DataSync会对存储桶的每个对象发出 S3 请求。

  • 您在 S3 存储桶之间传输,在源和目标上发出 S3 请求DataSync也是如此。

为了帮助最大限度地减少与相关的 S3 请求成本DataSync,请考虑以下几点:

我使用的是哪些 S3 存储类?

S3 请求费用可能因对象使用的 Amazon S3 存储类别而异,尤其是归档对象的类(例如 S3 Glacier Instant Retrieval、S3 Glacier Flexible Retrieval 和 S3 Glacier Deep Archive)

以下是存储类在使用时会影响 S3 请求费用的一些场景DataSync:

  • 每次运行任务时,都会DataSync发出检索对象元数据的HEAD请求。即使你没有移动任何物体,这些请求也会产生费用。这些请求对账单的影响程度取决于您的对象使用的存储类以及DataSync扫描的对象数量。

  • 如果您将对象移至 S3 Glacier 即时检索存储类(直接或通过存储分段生命周期配置),则对该类中对象的请求比其他存储类中的对象更昂贵。

  • 如果您将DataSync任务配置为验证源位置和目标位置是否完全同步,则所有存储类别(S3 Glacier 灵活检索和 S3 Glacier Deep Archive 除外)中的每个对象都会GET收到请求。

  • GET请求外,您还会为 S3 Standard-IA、S3 One Zone-IA 或 S3 Glacier Instant Retrieval 存储类中的对象产生数据检索费用。

有关更多信息,请参阅 Amazon S3 定价

我需要多久传输一次数据?

如果您需要定期移动数据,请考虑运行的任务不会超过您的需求的时间表

您也可以考虑限制您的转账范围。例如,您可以配置DataSync为专注于某些前缀中的对象或筛选传输的数据。这些选项可以帮助减少每次运行DataSync任务时发出的 S3 请求数量。

使用 Amazon S3 传输的其他注意事项

将 Amazon S3 与配合使用时DataSync,请记住以下几点:

  • 对对象数据或元数据的更改等同于删除和替换对象。在以下情况下,这些更改会导致额外费用:

    • 使用对象版本控制时-对对象数据或元数据的更改会创建对象的新版本。

    • 当使用的存储类可能会因覆盖、删除或检索对象而产生额外费用时,更改对象数据或元数据会产生此类费用。有关更多信息,请参阅Amazon S3 传输的存储类注意事项

  • 在 Amazon S3 中使用对象版本控制时,运行一次DataSync任务可能会创建 Amazon S3 对象的多个版本。

  • DataSync如果对象的名称中有非标准字符,则可能不会传输该对象。有关更多信息,请参阅 Amazon S3 用户指南中的对象密钥命名指南

  • 为了帮助最大限度地降低您的 Amazon S3 存储成本,我们建议使用生命周期配置来停止未完成的分段上传。有关更多信息,请参阅 Amazon S3 用户指南

  • 最初将数据从 S3 存储桶传输到文件系统(例如,NFS 或 Amazon FsX)后,后续运行的同一DataSync任务将不包括已修改但大小与第一次传输时相同的对象。

创建您的 Amazon S3 传输地点

要创建位置,您需要现有 S3 桶。如果您没有,请参阅 Amazon S3 用户指南中的 Amazon S3 入门

提示

如果您的 S3 存储桶包含具有不同存储类别的对象,请了解这些存储类别是如何DataSync使用的,以及它会如何影响您的AWS账单

创建 Amazon S3 位置
  1. 通过 https://console.aws.amazon.com/datasync/ 打开AWS DataSync主机。

  2. 在左侧导航窗格中,展开 “数据传输”,然后选择 “位置” 和 “创建位置”。

  3. 对于位置类型,选择 Amazon S3

  4. 对于 S3 桶,请选择要用作位置的桶。(稍后创建DataSync任务时,您可以指定此位置是源位置还是目标位置。)

    如果您的 S3 存储桶位于AWS Outposts资源上,则必须指定 Amazon S3 接入点。有关更多信息,请参阅 Amazon S3 用户指南中的使用 Amazon S3 访问点管理数据访问。

  5. 对于 S3 存储类别,请选择您希望对象使用的存储类别。

    有关更多信息,请参阅Amazon S3 传输的存储类注意事项:DataSync默认情况下,Outposts 在 Amazon S3 中使用 S3 Outposts 存储类。

  6. (仅限Outposts 站上的 Amazon S3)对于代理,请指定 Outpos DataSync t 上代理的 Amazon 资源名称 (ARN)。

    有关更多信息,请参阅在上部署您的代理 AWS Outposts

  7. 对于文件夹,请在 S3 存储桶中输入DataSync读取或写入内容的前缀(具体视存储桶是源位置还是目标位置而定)。

    注意

    前缀不能以斜杠(例如/photos)开头,也不能包含连续的斜杠,例如photos//2006/January

  8. 对于 IAM role (IAM 角色),执行以下操作之一:

    • 选择 “自动生成” DataSync 以自动创建具有访问 S3 存储桶所需权限的 IM 角色。

      如果DataSync之前为此 S3 存储桶创建了 IAM 角色,则默认情况下会选择该角色。

    • 选择您创建的自定义 IAM 角色。有关更多信息,请参阅手动创建 IAM 角色以访问 Amazon S3 桶

  9. (可选)选择添加标签来标记您的 Amazon S3 位置。

    标签 是帮助您管理、筛选和搜索位置的键值对。

  10. 选择创建地点

使用 IAM 策略访问您的 S3 存储桶

根据您的 S3 存储桶的安全设置,您可能需要创建允许DataSync访问该存储桶的自定义 IAM 策略。

手动创建 IAM 角色以访问 Amazon S3 桶

虽然DataSync您可以使用所需的 S3 存储桶权限为您创建 IAM 角色,但您也可以自己配置角色。

手动创建 IAM 角色以访问 Amazon S3 桶
  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在左侧导航窗格的 “访问管理” 下,选择 “角色”,然后选择 “创建角色”。

  3. “选择可信实体” 页面上,为 “可信实体类型” 选择AWS 服务

  4. 对于用例DataSync在下拉列表中选择并选择 DataSync-S3 位置。选择下一步

  5. 添加权限页面上,FullAccess为中的 S3 存储桶选择 Amazon S3。AWS 区域选择下一步

    您可以手动创建比 AmazonS3 FullAccess 更严格的政策。示例如下:

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetBucketLocation", "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Effect": "Allow", "Resource": "YourS3BucketArn" }, { "Action": [ "s3:AbortMultipartUpload", "s3:DeleteObject", "s3:GetObject", "s3:ListMultipartUploadParts", "s3:GetObjectTagging", "s3:PutObjectTagging", "s3:PutObject" ], "Effect": "Allow", "Resource": "YourS3BucketArn/*" } ] }

    对于 Amazon S3 on Outposts,使用以下策略:

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "s3-outposts:ListBucket", "s3-outposts:ListBucketMultipartUploads" ], "Effect": "Allow", "Resource": [ "s3OutpostsBucketArn", "s3OutpostsAccessPointArn" ], "Condition": { "StringLike": { "s3-outposts:DataAccessPointArn": "s3OutpostsAccessPointArn" } } }, { "Action": [ "s3-outposts:AbortMultipartUpload", "s3-outposts:DeleteObject", "s3-outposts:GetObject", "s3-outposts:ListMultipartUploadParts", "s3-outposts:GetObjectTagging", "s3-outposts:PutObjectTagging" ], "Effect": "Allow", "Resource": [ "s3OutpostsBucketArn/*", "s3OutpostsAccessPointArn" ], "Condition": { "StringLike": { "s3-outposts:DataAccessPointArn": "s3OutpostsAccessPointArn" } } }, { "Effect": "Allow", "Action": [ "s3-outposts:GetAccessPoint" ], "Resource": "s3OutpostsAccessPointArn" } ] }
  6. 为您的角色命名,然后选择创建角色

  7. 通过 https://console.aws.amazon.com/datasync/ 打开AWS DataSync主机。

  8. 选择 IAM 角色设置旁边的刷新按钮,然后选择您刚刚创建的角色。

防范跨服务混淆代理问题

为防止跨服务混淆副手问题,我们建议在您的 IAM 角色的信任策略中使用aws:SourceArnaws:SourceAccount全局条件上下文密钥。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "datasync.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" }, "StringLike": { "aws:SourceArn": "arn:aws:datasync:us-east-2:123456789012:*" } } } ] }

使用服务器端加密访问 S3 桶

DataSync可以将数据复制到使用服务器端加密的 S3 存储桶或从中复制数据。存储桶使用的加密密钥类型可以决定您是否需要DataSync允许访问存储桶的自定义策略。

DataSync与使用服务器端加密的 S3 存储桶一起使用时,请记住以下几点:

  • 如果您的 S3 存储桶使用AWS托管密钥加密,则在所有资源都位于相同的情况下,默认情况下DataSync可以访问该存储桶的对象AWS 账户。

  • 如果您的 S3 存储桶使用客户管理 AWS Key Management Service (AWS KMS) 密钥 (SSE-KMS) 进行加密,则密钥的策略必须包含DataSync用于访问存储桶的 IAM 角色。

  • 如果您的 S3 存储桶是使用客户管理的 SSE-KMS 密钥加密的,则DataSync需要权限才能访问另一个AWS 账户存储段中的存储桶。AWS 账户您可以通过执行以下操作进行设置:

  • 如果您的 S3 存储桶已使用客户提供的加密密钥 (SSE-C) 进行加密,则DataSync无法访问此存储桶。

以下示例是客户管理的 SSE-KMS 密钥的密钥策略。该策略与使用服务器端加密的 S3 存储桶关联。以下值特定于您的设置:

  • 您的帐户—您的. AWS 账户

  • your-admin-role— 可以管理密钥的 IAM 角色。

  • your-datasync-role— 允许在访问存储桶时DataSync使用密钥的 IAM 角色。

{ "Id": "key-consolepolicy-3", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::your-account:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::your-account:role/your-admin-role" }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::your-account:role/your-datasync-role" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::your-account:role/your-datasync-role" }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } } ] }

在不同的 S3 存储桶之间转移或从中转出 AWS 账户

借DataSync助,您可以将数据移入或移出不同的 S3 存储桶AWS 账户。有关更多信息,请参阅以下教程: