【问题标题】:Copy data from S3 bucket in one AWS account to S3 bucket in other AWS account将数据从一个 AWS 账户的 S3 存储桶复制到另一个 AWS 账户的 S3 存储桶
【发布时间】:2019-06-28 07:14:56
【问题描述】:

我正在尝试将 S3 存储桶对象从一个 AWS 复制到另一个 AWS 账户。我已关注此链接here 它适用于一个帐户 A,但当我将其与另一个帐户 B 一起使用时出现访问被拒绝错误。这可能是什么原因?是不是和一些防火墙或者安全问题有关,连源账号B的bucket都被公开了。 这是应用于源存储桶 B 的策略

{

  "Version": "2012-10-17",

  "Statement": [

    {

      "Sid": "DelegateS3Access",

      "Effect": "Allow",

      "Principal": {

        "AWS": "arn:aws:iam::12345678910:user/abc"

      },

      "Action": [

        "s3:ListBucket",

        "s3:GetObject"

      ],

      "Resource": [

        "arn:aws:s3:::sourceBucketB/*",

        "arn:aws:s3:::sourceBucketB"

      ]

    }

  ]

}

这是适用于目标帐户的政策

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::sourcebucket",
                "arn:aws:s3:::sourcebucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::destinationbucket",
                "arn:aws:s3:::destinationbucket/*"
            ]
        }
    ] }

[这里是账户B的bucket配置][1\

我正在使用以下命令从存储桶 B 复制到目标帐户(使用目标帐户配置文件)

aws s3 同步 s3://sourceBucket s3://destinationBucket

这是错误

致命错误:调用 ListObjectsV2 操作:拒绝访问

【问题讨论】:

  • 这很可能是权限问题。您是否配置了安全组?
  • 源账户 B 只给了我们凭据。不确切知道那里的安全基础设施。我已经附上了配置。是不是跟“请求者付费”的事情有关?
  • 我试过了。它适用于每个测试帐户,但实际需要连接的帐户除外。我认为问题是因为此帐户启用了“请求者付款”选项,或者可能是某些防火墙。因为它不允许匿名访问。

标签: amazon-web-services amazon-s3


【解决方案1】:

This documentation 包含您需要的确切政策和必要的步骤。

根据该文档,该政策应如下所示:

{
  "Version": "2012-10-17",
  "Statement": [
     {
        "Sid": "Example permissions",
        "Effect": "Allow",
        "Principal": {
           "AWS": "arn:aws:iam::AccountB-ID:root"
        },
        "Action": [
           "s3:GetBucketLocation",
           "s3:ListBucket"
        ],
        "Resource": [
           "arn:aws:s3:::sourcebucket"
        ]
     }
  ]
}

【讨论】:

  • 我在做相反的事情。我在存储桶 B 中添加了此策略,其中包含目标帐户的本金。我需要设置账户 B 的用户 id 吗?
  • 但是我采用的方法,对A账号效果很好,有什么区别。
  • 我链接的示例让账户 B 可以访问账户 A 的 S3 存储桶,如果这是您需要的,那么就这样做吧。如果您以其他方式附加策略,则账户 A 将有权访问账户 B(您现在拥有的方式),但账户 B 将无权访问账户 A。
  • 我试过了。它适用于每个测试帐户,但实际需要连接的帐户除外。我认为问题在于“请求者付款”选项。因为它不允许匿名访问。
【解决方案2】:

简单的方法(全部授予):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "*",
      "Principal": "*"
    }
  ]
}

这似乎是不必要的,并且可能会使事情复杂化(在您的第二个政策中):

{
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::sourcebucket",
                "arn:aws:s3:::sourcebucket/*"
            ]
        },

【讨论】:

  • 这可能会使事情顺利进行,但通常会造成安全漏洞。需要将权限仅限于相关资源。
猜你喜欢
  • 2020-07-05
  • 1970-01-01
  • 2017-07-21
  • 2020-01-03
  • 2019-01-15
  • 2016-08-12
  • 2019-10-25
  • 1970-01-01
  • 2020-12-28
相关资源
最近更新 更多