【问题标题】:restrict access to AWS buckets in account while still allowing access to public buckets in other accounts限制对账户中的 AWS 存储桶的访问,同时仍允许访问其他账户中的公共存储桶
【发布时间】:2020-02-12 08:31:18
【问题描述】:

对于给定的 IAM 用户,我只想允许该用户访问我们账户中的一个特定存储桶(称为 foo-bucket)。

但是,这似乎具有禁止访问我们帐户之外的任何公共存储桶的效果,这不是我想要的。我希望用户仍然可以访问另一个帐户中的任何公共存储桶,例如broad-references。我当然可以明确授予对特定公共存储桶的访问权限,但是世界上有无数的公共存储桶,我不想限制对其中任何一个的访问。

这是现有政策。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "economycloud",
            "Action": [
                "s3:List*",
                "s3:Get*",
                "s3:DeleteObject*",
                "s3:Abort*",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectTagging",
                "s3:RestoreObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::foo-bucket/*",
                "arn:aws:s3:::foo-bucket"
            ]
        },
        {
            "Sid": "AllowListing",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::*"
            ]
        }
    ]
}

有人可以建议一个 IAM 策略来执行以下操作:

  • 限制访问,使用户只能访问帐户中的此特定存储桶,如上述策略中所述,但
  • 可以访问任何其他帐户中的任何公共存储桶。

【问题讨论】:

  • 您能否分享您的实际 IAM 政策以供参考? (显然没有共享实际的存储桶名称/帐户)
  • 只是为了澄清您的问题,您希望该用户有权访问此 ONE 存储桶,并访问该帐户中公开的任何存储桶?
  • 已编辑以响应两个 cmets。
  • 我认为这实际上是不可能的,因为没有办法引用“特定帐户中的所有 S3 存储桶”。通常,这将通过 ARN 通配符完成,但 S3 ARN 似乎不允许 account-id 作为通配符。
  • 我很困惑。您是说此政策具有阻止访问其他存储桶的效果吗?

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


【解决方案1】:

丹,

这就是你实现这一目标的方法:

  • 明确拒绝用户访问specific account 中除特定存储桶 (foo-bucket) 之外的所有存储桶。
  • 明确允许用户访问该特定存储桶 (foo-bucket)。
  • 明确允许来自所有帐户的存储桶。

【讨论】:

  • 第一步似乎很复杂(我们的账户中有数百个桶)。最后一步违反了我的最后一个要点 - 用户应该能够访问任何帐户中的任何公共存储桶,而该存储桶不必在策略中。
  • 第一步:您只需要拒绝用户访问的帐户 arn。
  • 第二步:你需要在资源中使用通配符“*”而不是所有桶的名称。
猜你喜欢
  • 2021-06-28
  • 1970-01-01
  • 2019-04-23
  • 2018-05-19
  • 2011-04-27
  • 2021-06-04
  • 2018-11-26
  • 2021-04-25
  • 2013-10-31
相关资源
最近更新 更多