【问题标题】:Cross Account S3 Access for a public buket公共 buket 的跨账户 S3 访问
【发布时间】:2020-05-09 14:52:29
【问题描述】:

存储桶政策

{
    "Version": "2012-10-17",
    "Id": "Policy1589032691178",
    "Statement": [
        {
            "Sid": "Stmt1589032265458",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::<BUCKET>/*"
        }
    ]
}

这将允许所有用户读取对象。

在 AWS 账户 1 中附加到用户 ABC 的 IAM 策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::<BUCKET>"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::<BUCKET>/*"
        }
    ]
}

有了这个设置,任何人都可以公开读取对象

并且 IAM 策略附加到用户 ABC,因此 ABC 可以访问列表、放置、获取、删除

现在的问题是 如果 AWS 账户 2 中的某个人创建了用户 XYZ 并附加了与上述相同的 IAM 策略 AWS 账户 2 中的 XYZ 用户能否列出、获取、放置、删除?

【问题讨论】:

  • 不,当然不是。如果授予访问权限,假设您知道 AWS 上的任何资源的 ARN,就可以访问它。那将是非常糟糕的。请参阅下面米兰的答案。
  • 跨账户策略评估逻辑解释here。长话短说,您需要双方(即资源和原则)都同意。

标签: amazon-web-services amazon-s3 amazon-iam


【解决方案1】:

您发布的内容看起来像resource-based &amp; IAM policies 跨帐户访问。

为了允许账户 2 中的用户 XYZ 对账户 1 中的存储桶执行上述操作,除了您为用户 XYZ 指定的策略外,您还需要在存储桶的策略中额外指定用户 XYZ 允许的操作。

另一种方法是允许跨账户 IAM 角色承担,其中账户 2 中的用户可以承担账户 1 中的角色,授予对账户 1 中 S3 存储桶的所需访问权限。

更多示例信息请访问https://aws.amazon.com/premiumsupport/knowledge-center/cross-account-access-s3/

【讨论】:

  • 与第一种方法相反,使用假设角色有什么好处?
  • @jellycsc 角色假设可能更有益,例如当您需要允许访问多个 S3 存储桶时。然后您不需要单独修改每个存储桶的存储桶策略,而是只修改允许对多个存储桶进行操作的单个策略。此外,在某些 AWS 服务上,无法配置基于资源的策略,因此只有角色假设选项可用于跨账户访问。
猜你喜欢
  • 2021-06-21
  • 2018-12-20
  • 1970-01-01
  • 2021-03-14
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
  • 2018-11-26
  • 2021-01-01
相关资源
最近更新 更多