在不同 AWS 账户上的 S3 存储桶之间同步时访问被拒绝

在不同 AWS 账户上的 S3 存储桶之间同步时访问被拒绝

我正在尝试在不同的 AWS 账户上的两个存储桶之间设置同步。

我开始cp与以下人员合作:

@ubuntu:~$ s3cmd cp -v s3://src/dir/ s3://dest/folder --recursive

我是拥有的用户/src/dir并添加了:

{
"Version": "2012-10-17",
"Id": "Policy1477299702471",
"Statement": [
    {
        "Sid": "Stmt1477299696163",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::awsid:user/name"
        },
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::bucket/*"
    }
]}

到测试存储桶上的存储桶权限策略。

现在我要开始aws sync工作了,因为s3 cp不建议与 cron 一起使用。

我试过

user@ubuntu:~$ aws s3 sync --dryrun s3://src/ s3://dest/ --region eu-central-1

但我的访问被拒绝:

致命错误:调用 ListObjects 操作时发生错误(AccessDenied):访问被拒绝

如果这是拥有存储桶的用户,我该如何拒绝访问并运行同步?

答案1

导致错误的原因ListObjects是您分配了访问内容您的存储桶(arn:aws:s3:::bucket/*)但您没有授予权限到桶本身arn:aws:s3:::bucket)。该ListObjects命令需要访问存储桶。

为了测试这一点,我做了以下事情:

  • 使用两个 AWS 账户:账户 A、账户 B
  • bucket-a在帐户 A 中创建
  • bucket-b在帐户 B 中创建
  • user-a在账户 A 中创建具有访问权限的IAM 用户bucket-a
  • 添加了存储桶策略至bucket-b

    {
      "Id": "CopyBuckets",
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "Stmt1",
          "Action": "s3:*",
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::bucket-b",
            "arn:aws:s3:::bucket-b/*"
          ],
          "Principal": {
            "AWS": [
              "arn:aws:iam::<account-a-id>:user/user-a"
            ]
          }
        }
      ]
    }
    

user-a然后我使用帐户 A触发同步:

aws s3 sync s3://bucket-a s3://bucket-b --profile user-a

它成功运行了。

相关内容