限制特定用户的存储桶列表
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 中的一个问题以获得最后一个答案。因此,在这种情况下,它可能更有意义。我同意你接受的答案,你不能限制看到的桶列表。要么全有,要么全无。但是,您可以将存储桶中的对象列表限制为特定的存储桶。如果你想要一个例子,我可以在这里分享。以上是关于限制特定用户的存储桶列表的主要内容,如果未能解决你的问题,请参考以下文章