限制特定用户的存储桶列表

Posted

技术标签:

【中文标题】限制特定用户的存储桶列表【英文标题】:Restrict List of Buckets for a Specific User 【发布时间】:2013-07-19 00:05:05 【问题描述】:

我已经能够生成一个只允许访问特定存储桶的用户策略,但是在尝试了一切之后(包括这篇文章:Is there an S3 policy for limiting access to only see/access one bucket?)。

问题:我无法将存储桶的列表限制为一个存储桶。出于多种原因,我不希望列表显示指定的存储桶以外的任何存储桶。

我尝试了各种策略,但无济于事。这是我最新的政策 JSON,它在限制操作方面起作用,但未列出:


    "Statement": [
    
        "Effect": "Allow",
        "Action": [
            "s3:ListAllMyBuckets",
            "s3:ListBucket",
            "s3:GetBucketLocation"
        ],
        "Resource": "arn:aws:s3:::*"
    ,
    
        "Effect": "Deny",
        "Action": [
            "s3:ListBucket"
        ],
        "NotResource": [
            "arn:aws:s3:::acgbu-acg",
            "arn:aws:s3:::acgbu-acg/*"
        ]
    ,
    
        "Effect": "Allow",
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "arn:aws:s3:::acgbu-acg",
            "arn:aws:s3:::acgbu-acg/*"
        ]
    
]

任何帮助将不胜感激。我开始怀疑这是否可能。

【问题讨论】:

相关:Is there an S3 policy for limiting access to only see/access one bucket? & How to provide a user to access only a particular bucket in AWS S3? 【参考方案1】:

目前无法将存储桶列表限制为仅显示一个存储桶。

AWS 控制台依赖 ListAllMyBuckets 操作来获取用户拥有的存储桶列表,但返回的列表不能使用 Amazon 资源名称(或 ARN;@987654324 允许的唯一 ARN @ 是arn:aws:s3:::*)。

官方 AWS 文档中没有明确解释此限制,但 ListAllMyBuckets 是服务级别 API 调用(在 REST API 中也称为 GET 服务),而不是存储桶级别 API 调用及其在IAM 策略是指 S3 服务而不是特定的存储桶。

有关可能的解决方法,请参阅 *** 上的 this answer:

【讨论】:

感谢您的回答。我看过那个帖子——我真的深入研究了很多。我们选择了客户看不到他们自己的存储桶的选项,这很可惜,但考虑到我们的主要担忧,这是最好的选择。 This answer 也有非常有用的信息。 我们也遇到了这个问题。在我看来,这不应该是我们正常接受的事情。我们运行了几个项目,如果我希望员工在进入 S3 部分时只看到一个存储桶,那么这应该是可能的。【参考方案2】:

免费的“S3 浏览器”(适用于我的版本 3-7-5)允许具有适当权限的用户为帐户“添加外部存储桶”,他们只需要知道存储桶的名称即可。这允许他们“看到”他们的桶和内容(以及他们在该桶中获得的任何能力),他们不会看到任何其他桶。

为了让存储桶与 S3 浏览器行为“配合得很好”,我建议用户或组采用以下 IAM 策略:


  "Statement": [
    
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:GetBucketAcl"
      ],
      "Resource": "arn:aws:s3:::acgbu-acg"
    ,
    
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:GetObjectAcl",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::acgbu-acg/*"
    
  ]

这是一种变通方法,如果用户只需要执行一次就可以了。但是,如果您的用户正在访问的存储桶发生了很大变化,那么这种解决方法就不太实用了。

【讨论】:

这个答案的“添加外部存储桶”部分是“S3 浏览器”的真正解决方案,我建议精心设计 IAM 策略部分而不是复制。例如,我复制了 S3ReadOnly Action 的块;)【参考方案3】:

我来这里是为了寻找如何将存储桶的访问权限限制为一个(或一组)用户。也许,帖子标题不明确?

不管怎样,它似乎有谷歌的青睐,所以让我们稍微丰富一下: 如果您需要限制某些用户访问存储桶,请按照以下步骤操作:

首先,获取您要授予权限的用户的 ID。 这可以使用 awscli 命令aws iam list-users 来实现 这些 ID 如下所示:“AIDAIFKYAC9DNJXM2CRD”或“AIDAZ362UEKJCJMFFXCL” 如果它在网络控制台中可用,请发表评论。

一旦您获得了必须授予访问权限的 ID,请在您要保护的存储桶上设置策略。 要使用网络控制台执行此操作: -> 打开 S3 -> 打开您的存储桶 -> 选择“属性”选项卡 -> 点击“编辑存储桶策略”

要使用 awscli 应用策略,请创建一个包含策略内容的文件,然后使用以下命令将其放在您的存储桶中: aws s3api put-bucket-policy --bucket NAME_OF_YOUR_BUCKET --policy file:///path/to/policyFile.json 当然,将 YOUR_BUCKET_NAME 和文件路径设置为您的值,但不要删除文件名之前的 file:// 前缀

警告:此拒绝策略将覆盖用户可能拥有的默认“访问 s3”。这意味着您可以拒绝访问您的 OWN 用户。 谨慎使用! 我什至担心您可以使存储桶完全无法访问。 出于好奇,我尝试使用我们帐户的 root 用户进行访问,但我没有授予访问权限,实际上也无法访问。 必须要求这个支持,并希望更新这个答案。

无论如何,我相信你会足够小心,所以这里有一个示例政策。 只需将存储桶的名称替换为您的名称,将 userId 替换为您要授权访问的名称即可。


  "Version": "2012-10-17",
  "Statement": [
    
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::your-bucket-name",
        "arn:aws:s3:::your-bucket-name/*"
      ],
      "Condition": 
        "StringNotLike": 
          "aws:userId": [
            "AIDAXAXAXAXAXAXAXAXAX",
            "AIDAOXOXOXOXOXOOXOXOX",
            "AIDAXIXIXIXIXIXIXIXIX"
          ]
        
      
    
  ]

有关更具体的内容,或者如果您想使用角色而不是用户,请参阅AWS post explaining in detail how to restrict access to a buckets

希望对你有帮助

【讨论】:

逻辑是倒退的。除了所选用户之外,您正在限制所有其他用户。 @Kevin 你能准确点吗?除了被允许的人之外,拒绝所有人似乎是对我应用安全性的正常方式。顺便说一句,您还可以将此策略应用于多个存储桶。我没有对这个 atm 进行更深入的了解,但如果我做错了什么,我会很感激更多细节。 原发帖人询问的是用户政策。这将附加到特定用户,而其他用户可能有更多的 leineint 策略(或没有策略)应用于他们。一个典型的用例是您只想限制一个用户,其凭据需要在最高信任组之外共享。用户政策是实现这一目标的方法。【参考方案4】:

原始发帖人询问的是用户政策。这将附加到特定用户,而其他用户可能有更多的 leineint 策略(或没有策略)应用于他们。一个典型的用例是您只想限制一个用户,其凭据需要在最高信任组之外共享。用户政策是实现这一目标的方法..

【讨论】:

感谢发帖。这可能是什么样子的示例? @cale_b 抱歉 - 我的意思不是要把我的评论作为答案。我正在回答 cmets 中的一个问题以获得最后一个答案。因此,在这种情况下,它可能更有意义。我同意你接受的答案,你不能限制看到的桶列表。要么全有,要么全无。但是,您可以将存储桶中的对象列表限制为特定的存储桶。如果你想要一个例子,我可以在这里分享。

以上是关于限制特定用户的存储桶列表的主要内容,如果未能解决你的问题,请参考以下文章

AWS:将 IAM 用户限制在 S3 存储桶中的特定文件夹

Amazon S3 存储桶:拒绝列表、读取、写入特定文件夹

如何将 IP 限制添加到已经有用户限制的 s3 存储桶(在存储桶策略中)

AWS IAM 策略:按用户/角色限制存储桶/文件夹访问?

谷歌云存储限制下载使用

AWS S3策略限制用户仅列出存储桶中的某些文件夹