如何为多个 IAM 用户设置 S3 策略,以便每个人只能访问他们的个人存储桶文件夹?
Posted
技术标签:
【中文标题】如何为多个 IAM 用户设置 S3 策略,以便每个人只能访问他们的个人存储桶文件夹?【英文标题】:How to set up S3 Policies for multiple IAM users such that each individual only has access to their personal bucket folder? 【发布时间】:2016-09-28 22:54:07 【问题描述】:我有两个用户 User1 和 User2,每个用户在 AWS 中都有一个 IAM 账户。我有一个 s3 存储桶“external_bucket.frommycompany.com”。在该存储桶中是每个用户帐户“User1”和“User2”的文件夹。我只想授予对 User1 对 User1 文件夹的 R/W 访问权限和对 User2 对 User2 文件夹的 R/W 访问权限。我不希望他们能够在 external_bucket.frommycompany.com 的根目录中看到彼此的文件夹。有没有办法设置他们的 IAM 政策,这样才有可能?
我的目标是让我们的用户能够从 Cloudberry 等 S3 浏览器应用程序连接到 S3 存储桶,这样他们就可以仅将文件上传和下载到他们的文件夹中。
欢迎任何关于最佳设计的建议。
【问题讨论】:
与我们使用 AD Bridge 与 Drive cloudberrylab.com/ad-bridge.aspx 工作的情况完全相同,它允许您拥有 1 个用于用户交换数据的通用文件夹和 1 个个人文件夹。他们不会看到其他用户的文件夹。 【参考方案1】:这是您的问题的official answer。
示例:允许每个 IAM 用户访问存储桶中的文件夹
在此示例中,您希望两个 IAM 用户 Alice 和 Bob 拥有访问权限 到您的存储桶 examplebucket,以便他们可以添加、更新和删除 对象。但是,您希望将每个用户的访问权限限制为单个 存储桶中的文件夹。您可以创建名称匹配的文件夹 用户名。
【讨论】:
“您可以编写一个使用 策略变量 的单一策略,并将该策略附加到一个组”。感谢分享!【参考方案2】:如果您今天不这样做,policy variables 的使用真的会改变游戏规则。
请参阅S3 policy examples 中的此示例:
不过,除了将策略附加到单个用户之外,您还可以 编写使用策略变量的单个策略并附加 对组的策略。您首先需要创建一个组并添加两者 爱丽丝和鲍勃加入小组。以下示例策略允许一组
examplebucket/$aws:username
文件夹中的 Amazon S3 权限。 评估策略时,策略变量$aws:username
为 替换为请求者的用户名。例如,如果 Alice 发送一个 请求放置一个对象,只有当 Alice 是允许的操作 将对象上传到examplebucket/Alice
文件夹。"Version":"2012-10-17", "Statement":[ "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::examplebucket/$aws:username/*" ]
【讨论】:
很好的例子!这为我简化了 100 倍的文件夹支持。【参考方案3】:来自here
这样的事情应该可以让 User1 只访问 User1 的文件夹:
"Version":"2012-10-17",
"Statement": [
"Sid": "AllowUserToSeeBucketListInTheConsole",
"Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"]
,
"Sid": "AllowRootAndHomeListingOfCompanyBucket",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::my-company"],
"Condition":"StringEquals":"s3:prefix":["","/"],"s3:delimiter":["/"]
,
"Sid": "AllowListingOfUserFolder",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::my-company"],
"Condition":"StringLike":"s3:prefix":["user1/*"]
,
"Sid": "AllowAllS3ActionsInUserFolder",
"Effect": "Allow",
"Action": ["s3:*"],
"Resource": ["arn:aws:s3:::user1/*"]
]
将其作为 User1 的策略应用,他们应该只能访问 user1/
文件夹。 "s3:prefix":["","/"]...
部分可能可以更改,但我对策略语言不够熟悉,不知道如何更改。
如果您在 User2 的策略中将 user2 替换为 user1,则 User2 应该只能访问 user2/
文件夹,依此类推。
【讨论】:
感谢您提供此解决方案。这接近我所需要的,但它并不完全是解决方案。我需要阻止 User1 查看存在的其他存储桶以及我已授予他访问权限的单个存储桶中的其他文件夹。有什么想法可以更改此策略文件以启用它吗? 可以去掉AllowUserToSeeBucketListInTheConsole
语句防止列出其他bucket,去掉AllowRootAndHomeListingOfCompanyBucket
语句防止列出其他文件夹。
米利农,这解决了我的问题。非常感谢您的帮助!以上是关于如何为多个 IAM 用户设置 S3 策略,以便每个人只能访问他们的个人存储桶文件夹?的主要内容,如果未能解决你的问题,请参考以下文章
Amazon Web Service S3 Access Denied with 看似不错的 IAM 策略