跳至内容

如何使用 DataSync 将数据传入或传出跨账户 Amazon S3 位置?

3 分钟阅读
0

我想使用 AWS DataSync 将数据传入或传出跨账户 Amazon Simple Storage Service (Amazon S3) 存储桶。

简短描述

AWS DataSync 完全支持跨账户 S3 传输。您可以在 DataSync 控制台中监控任务执行情况。

**注意:**如果您的存储桶已加密,并且使用采用客户自主管理型 AWS Key Management Service (AWS KMS) 密钥 (SSE-KMS) 的服务器端加密,则需要进行额外配置

解决方法

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

在源账户中创建 IAM 角色

您的源账户需要具备两组权限才能进行跨账户传输:

  • 允许用户使用 DataSync 并创建 DataSync 位置、角色和任务的用户权限。
  • 允许 DataSync 将数据传输到您的目标账户存储桶的 DataSync 权限。

要向创建 IAM 角色的源账户授予用户权限,请将以下策略附加到 IAM 角色:

{  
    "Version": "2012-10-17",  
    "Statement": [  
        {  
            "Sid": "SourceUserRolePermissions",  
            "Effect": "Allow",  
            "Action": [  
                "datasync:CreateLocationS3",  
                "datasync:CreateTask",  
                "datasync:DescribeLocation*",  
                "datasync:DescribeTaskExecution",  
                "datasync:ListLocations",  
                "datasync:ListTaskExecutions",  
                "datasync:DescribeTask",  
                "datasync:CancelTaskExecution",  
                "datasync:ListTasks",  
                "datasync:StartTaskExecution",  
                "iam:CreateRole",  
                "iam:CreatePolicy",  
                "iam:AttachRolePolicy",  
                "iam:ListRoles",  
                "s3:GetBucketLocation",  
                "s3:ListAllMyBuckets"  
            ],  
            "Resource": "*"  
        },  
        {  
            "Effect": "Allow",  
            "Action": [  
                "iam:PassRole"  
            ],  
            "Resource": "*",  
            "Condition": {  
                "StringEquals": {  
                    "iam:PassedToService": [  
                        "datasync.amazonaws.com"  
                    ]  
                }  
            }  
        }  
    ]  
}

要在源账户中创建具有必要权限的 Datasync IAM 角色,请将以下策略附加到 IAM 角色:

{  
    "Version": "2012-10-17",  
     "Statement": [  
         {  
             "Action": [  
                 "s3:GetBucketLocation",  
                 "s3:ListBucket",  
                 "s3:ListBucketMultipartUploads"  
              ],  
             "Effect": "Allow",  
             "Resource": "arn:aws:s3:::destination-bucket"  
             "Condition": {  
                 "StringEquals": {  
                  "aws:ResourceAccount": "123456789012"  
                 }  
             }  
         },  
         {  
             "Action": [  
                 "s3:AbortMultipartUpload",  
                 "s3:DeleteObject",  
                 "s3:GetObject",  
                 "s3:GetObjectTagging",  
                 "s3:GetObjectVersion",  
                 "s3:GetObjectVersionTagging",  
                 "s3:ListMultipartUploadParts",  
                 "s3:PutObject",  
                 "s3:PutObjectTagging"  
               ],  
             "Effect": "Allow",  
             "Resource": "arn:aws:s3:::destination-bucket/*"  
             "Condition": {  
                 "StringEquals": {  
                     "aws:ResourceAccount": "123456789012"  
                 }  
             }  
         }  
     ]  
}

**注意:**请将 ResourceAccount 替换为您在策略中指定的 Amazon S3 存储桶所属账户的账户 ID。

向 DataSync IAM 角色添加以下信任关系:

{  
  "Version": "2012-10-17",  
  "Statement": [  
    {  
      "Effect": "Allow",  
      "Principal": {  
        "Service": "datasync.amazonaws.com"  
      },  
      "Action": "sts:AssumeRole"  
    }  
  ]  
}

更新目标存储桶策略

要授予对源账户中 IAM 角色的访问权限,请修改目标账户的 S3 存储桶策略:

{  
  "Version": "2012-10-17",  
  "Statement": [  
    {  
      "Sid": "DataSyncCreateS3LocationAndTaskAccess",  
      "Effect": "Allow",  
      "Principal": {  
        "AWS": "arn:aws:iam::source-account-id:role/datasync-role-name"  
      },  
      "Action": [  
        "s3:GetBucketLocation",  
        "s3:ListBucket",  
        "s3:ListBucketMultipartUploads",  
        "s3:AbortMultipartUpload",  
        "s3:DeleteObject",  
        "s3:GetObject",  
        "s3:ListMultipartUploadParts",  
        "s3:PutObject",  
        "s3:GetObjectTagging",  
        "s3:PutObjectTagging"  
      ],  
      "Resource": [  
        "arn:aws:s3:::destination-bucket",  
        "arn:aws:s3:::destination-bucket/*"  
      ]  
    }  
  ]  
}

在目标存储桶上禁用 ACL

在目标账户中,完成以下步骤:

  1. 打开 Amazon S3 控制台
  2. 选择您的目标存储桶。
  3. Permissions(权限)选项卡的 Object Ownership(对象所有权)下,选择 Edit(编辑)。
  4. 选择 ACLs disabled (recommended)(ACL 已禁用(推荐))。
  5. 选择 Save changes(保存更改)。

创建 DataSync 位置

在源账户中,完成以下步骤:

  1. 打开 DataSync 控制台
  2. 在导航窗格中,展开 Data transfer(数据传输)。
  3. 选择 Locations(位置),然后选择 Create location(创建位置)。
  4. 对于 Location type(位置类型),选择 Amazon S3,然后选择 General purpose bucket(通用存储桶)。
  5. 对于 S3 URI,输入或选择要用于您所在位置的存储桶和前缀。
  6. 对于 S3 storage class when used as a destination(用作目标时的 S3 存储类),选择当 Amazon S3 作为传输目标时您希望对象使用的存储类。
  7. 选择您创建的自定义 IAM 角色。
  8. (可选)选择 Add new tag(添加新标签),为您的 Amazon S3 位置添加标签。
    **注意:**最佳做法是为您的位置创建名称标签。
  9. 选择 Create location(创建位置)。
  10. AWS CloudShell 或 AWS CLI 中运行以下命令,为目标存储桶创建位置:
aws datasync create-location-s3 \  
  --s3-bucket-arn arn:aws:s3:::destination-bucket \  
  --s3-config BucketAccessRoleArn=arn:aws:iam::source-account-id:role/datasync-role-name \  
  --region destination-bucket-region

**注意:**无法在 AWS DataSync 控制台中创建跨账户位置。

创建并运行 DataSync 任务

**注意:**对于跨区域传输,请在与目标存储桶位于同一 AWS 区域的源账户中创建任务。

完成以下步骤:

  1. 在您的源账户中打开 DataSync 控制台
  2. 在导航窗格中,展开 Data transfer(数据传输)。
  3. 选择 Tasks(任务),然后选择 Create task(创建任务)。
  4. 如果目标账户中的存储桶与源账户中的存储桶位于不同的区域,请选择目标存储桶所在的区域。
  5. Configure source location(配置源位置)页面上,执行以下操作。
    选择 Choose an existing location(选择现有位置)。
    (对于跨区域传输)在 Region(区域)下拉列表中,选择源存储桶所在的区域。
    对于 Existing locations(现有位置),选择要从中传输数据的 S3 存储桶的源位置,然后选择 Next(下一步)。
  6. Configure destination location(配置目标位置)页面上,执行以下操作。
    选择 Choose an existing location(选择现有位置)。
    对于 Existing locations(现有位置),选择要将数据传输到的 S3 存储桶的目标位置,然后选择 Next(下一步)。
  7. Configure settings(配置设置)页面上,选择 Task mode(任务模式)。
    **注意:**最佳做法是使用 Enhanced(增强)模式。有关详细信息,请参阅为数据传输选择任务模式
  8. 输入任务的名称并配置任何其他设置,例如 Amazon CloudWatch 日志组。
  9. 选择 Next(下一步)。
  10. Review(查看)页面上,查看您的设置,然后选择 Create task(创建任务)。
  11. 在任务的详细信息页面上,选择 Start(开始),然后选择以下选项之一:
    要在不进行修改的情况下运行任务,请选择 Start with defaults(从原定设置开始)。
    要在运行任务之前对其进行修改,请选择 Start with overriding options(从覆盖选项开始)。

相关信息

教程: 在跨 AWS 账户的 Amazon S3 存储桶之间传输数据

Transfer customer managed SSE-KMS encrypted objects across AWS accounts and Regions using AWS DataSync(使用 AWS DataSync 跨 AWS 账户和区域传输采用客户自主管理型 SSE-KMS 加密的对象)

How to use AWS DataSync to migrate data between Amazon S3 buckets(如何使用 AWS DataSync 在 Amazon S3 存储桶之间迁移数据

AWS 官方已更新 6 个月前