4

我想使用 Datasync 将数据从一个账户中的单个 S3 存储桶复制到另一个账户中的单个 S3 存储桶。我正在关注这个官方 AWS Datasync 博客:https : //aws.amazon.com/blogs/storage/how-to-use-aws-datasync-to-migrate-data-between-amazon-s3-buckets/第二部分“跨帐户复制对象”。

我已经设置了源存储桶和目标存储桶,并完成了“创建新的 IAM 角色并为源 S3 存储桶位置附加新的 IAM 策略”和“将以下信任关系添加到 IAM 角色”的初始步骤(您可以通过搜索引号中的字符串来查看我在博客中的意思)但我现在对使用哪个帐户来“打开源 S3 存储桶策略并应用以下策略来授予 IAM 角色访问objects”以及使用哪个账户来运行 AWS CLI 命令“aws sts get-caller-identity”,然后直接运行“aws datasync create-location-s3”命令。我是在源帐户还是目标帐户上执行这些操作?该博客在这些具体步骤上有点混乱和不清楚,我可以'

4

4 回答 4

2

不工作!- https://aws.amazon.com/blogs/storage/how-to-use-aws-datasync-to-migrate-data-between-amazon-s3-buckets/

1) 目标角色

  • 在目标S3 存储桶所在的账户中创建必要的 IAM 角色
  • 登录到目标账户并为 AWS DataSync 创建一个 IAM 角色
  DESTINATION-ROLE:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Action:
              - sts:AssumeRole
            Effect: Allow
            Principal:
              Service:
                - datasync.amazonaws.com
      Path: '/'
      RoleName: DESTINATION-ROLE
  DESTINATION-POLICY:
    Type: AWS::IAM::Policy
    Properties:
      PolicyName: DESTINATION-POLICY
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Action:
              - s3:GetBucketLocation
              - s3:ListBucket
              - s3:ListBucketMultipartUploads
            Effect: Allow
            Resource: arn:aws:s3:::SOURCEBUCKET
          - Action:
              - s3:AbortMultipartUpload
              - s3:DeleteObject
              - s3:GetObject
              - s3:ListMultipartUploadParts
              - s3:PutObjectTagging
              - s3:GetObjectTagging
              - s3:PutObject
            Effect: Allow
            Resource: arn:aws:s3:::SOURCEBUCKET/*
      Roles:
        - Ref: DESTINATION-ROLE

2) 来源 S3 政策

  • “复制您为源 S3 存储桶位置创建的 IAM 角色的 ARN。
  • 现在,登录到帐户。
  • 打开源 S3 存储桶策略并应用以下策略为 IAM 角色授予权限
Version: '2012-10-17'
Statement:
  - Sid: BucketPolicyForDataSync
    Effect: Allow
    Principal:
      AWS:
        - arn:aws:iam::DEST-ACCOUNT-ID:role/DESTINATION-ROLE
    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:::SOURCEBUCKET
      - arn:aws:s3:::SOURCEBUCKET/*

3) CLI 调用

  • 现在,启动 AWS CLI(从源账户)...
aws datasync create-location-s3                       \
    --s3-bucket-arn    'arn:aws:s3:::SOURCEBUCKET'    \
    --region           'us-east-1'                    \
    --s3-config '
        {
            "BucketAccessRoleArn":
                "arn:aws:iam::DEST-ACCOUNT-ID:role/DESTINATION-ROLE"
        }
    '

3.1) 错误来源账户

An error occurred (AccessDeniedException) when calling the CreateLocationS3 operation: Cross-account pass role is not allowed.

3.2) 错误目的地账户

An error occurred (InvalidRequestException) when calling the CreateLocationS3 operation: Please provide a bucket in the us-east-1 region where DataSync is currently used.
于 2021-09-03T15:05:04.957 回答
0

源 S3 存储桶策略附加到源 S3 存储桶,因此您需要登录到源帐户才能对其进行编辑。

接下来的步骤必须从 CLI 完成。措辞有点模棱两可,但关键短语是“确保您使用在上一步中创建的源 S3 存储桶策略中指定的相同 IAM 身份”。示例 S3 存储桶策略中引用的 IAM 身份,arn:aws:iam::DEST-ACCOUNT-ID:role/DEST-ACCOUNT-USER因此您需要通过 CLI 步骤的目标账户进行身份验证。该aws sts get-caller-identity命令仅返回用于执行命令的身份,因此它可以确认您使用的是预期身份,而不是设置数据同步位置的严格要求。

教程中没有明确提及,但目标账户中的用户当然需要适当的 IAM 权限才能创建数据同步位置和任务。

这样想可能会有所帮助:您需要允许目标账户中的角色访问源账户中的存储桶,然后在目标账户中设置 Datasync 位置和任务。因此,与 Datasync 配置相关的任何事情都需要在目标帐户中进行。

于 2021-08-18T00:17:23.020 回答
0

我遇到了同样的问题并得到了修复,但我收到了同样的错误消息

“调用 CreateLocationS3 操作时发生错误 (InvalidRequestException):请提供当前使用 DataSync 的 us-east-2 区域中的存储桶”。

您需要传递 --region 标志并放置源存储桶所在的区域。因此,查看源存储桶视图并获取区域。

于 2021-09-04T15:56:12.540 回答
0

我看到的作品是:

  1. 在目标账户中运行 CLI 命令
  2. 当您运行 CLI 命令时,您应该确保运行 CLI 命令的用户/botocore 会话的 ARN 可以访问源存储桶,正如 @gph 所说,至少具有 s3:ListBucket。我发现棘手的问题:如果您不使用用户运行 CLI 命令,而是使用某些角色,则需要确保在假定源帐户中的角色后授予对 botocore 会话的权限。当然,权限与 botocore 会话持续时间一样短暂,但如果您不想使用 IAM 用户登录,它至少可以帮助您创建位置。
于 2022-01-05T14:24:14.990 回答