AWS S3在帐户之间转移不起作用

时间:2017-10-12 16:05:06

标签: amazon-web-services amazon-s3

我正在尝试将一个帐户中的数据复制到一个帐户中,在该帐户中我可以访问IAM而不是管理员,访问另一个帐户中的存储桶,其中我是管理员,并且失败。我甚至不能ls源存储桶。

我已经按照AWS的指示和各种来源在线给自己列出/读取/获取源存储桶的权限,但没有成功。我可以提供详细信息(例如,存储桶策略json),但它是AWS文档和其他地方的内容。我已经完成的工作在我有管理员访问权限的两个帐户之间。

这是"多区域",在我在美国的意义上(主要是us-west-2),但存储桶位于eu-central-1。我在aws cli中指定了区域,并在eu-central-1中设置了目标存储区,但无论如何都无法列出。

2 个答案:

答案 0 :(得分:0)

我已经使用我的AWS账户完成了这几次。我猜您已经设置了跨帐户访问您的S3存储桶,但只需仔细检查,这是我为授予S3存储桶交叉帐户访问权限而做的。

帐户(A):   S3桶(testbucket)

帐户(B):   IAM用户(testuser)需要访问帐户(A)中的S3存储桶testbucket

以下是需要发生的事情:

在testbucket(A)上创建存储桶策略,以授予对测试存储区的读取/列表等访问权限。 例如:

{
"Version": "2012-10-17",
"Id": "BUCKETPOLICY",
"Statement": [
    {
        "Sid": "AllowS3ReadObject28",
        "Effect": "Allow",
        "Principal": {
            "AWS": [
                "arn:aws:iam::900000000:user/testuser"
            ]
        },
        "Action": "s3:GetObject",
        "Resource": [
            "arn:aws:s3:::testbucket",
            "arn:aws:s3:::testbucket/*"
        ]
    }
]

}

  1. 在testuser上创建一个IAM策略,该策略还授予对存储桶的读取,写入,列表等访问权限。

答案 1 :(得分:0)

您的情况似乎是:

  • 帐户A:广告管理系统A和用户A(具有有限的访问权限)
  • 帐户B :广告容器B和用户B(具有管理员权限)

您可以数据从帐户A推送到Bucket B,或者您可以从帐号B中提取来自Bucket A的数据。

从帐户A推送到Bucket B

让我们假设用户A可以访问Bucket A.所需要的只是授予用户A写入Bucket B的权限。这可以通过Bucket B上的存储桶策略完成:

{
  "Id": "PolicyB",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "GrantAccessToUserA",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::BUCKET-B",
        "arn:aws:s3:::BUCKET-B/*"
      ],
      "Principal": "arn:aws:iam::ACCOUNT-A:user/USER-A"
    }
  ]
}

这会在Bucket B上向用户A授予所有 s3权限。这太过分了,但可能只是暂时的。

然后,用户A将文件从Bucket A复制到Bucket B.例如:

aws s3 sync s3://BUCKET-A s3://BUCKET-B \
  --acl bucket-owner-full-control \
  --source-region SOURCE-REGION \
  --region DESTINATION-REGION

重要提示:复制文件时,请务必使用授予bucket-owner-full-control的访问控制列表。这意味着文件将由Bucket B的所有者拥有。如果您不这样做,文件仍由用户A拥有,并且用户B无法删除,即使使用admin权利!

使用帐户B从广告连播A中提取

为此,必须授予用户B访问Bucket A的权限。您需要在帐户A中有足够的访问权限才能在Bucket A上添加存储桶政策

{
  "Id": "PolicyA",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "GrantAccessToUserB",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::BUCKET-A",
        "arn:aws:s3:::BUCKET-A/*"
      ],
      "Principal": "arn:aws:iam::ACCOUNT-B:user/USER-B"
    }
  ]
}

然后,用户B可以复制文件:

aws s3 sync s3://BUCKET-A s3://BUCKET-B \
  --source-region SOURCE-REGION \
  --region DESTINATION-REGION

(您可能需要授予更多访问权限,我没有测试上述政策。)

存储桶位于不同区域这一事实不会影响权限,但它会影响发送命令的 。该命令被发送到目标区域,然后从源区域拉出。

请参阅:AWS CLI s3 sync command