我有两个用户User1和User2,每个用户在AWS中都有一个IAM帐户。我有一个s3桶"external_bucket.frommycompany.com"。在该存储桶中是每个用户帐户"User1"one_answers"User2"的文件夹。我想授予用户1对User1文件夹的R/W访问权限,并授予用户2对User2文件夹的R/W访问权限。我不希望他们能够在external_bucket.frommycompany.com的根目录中看到彼此的文件夹。是否有一种方法来设置他们的IAM策略,这样这是可能的?
我的目标是使我们的用户能够从S3浏览器应用程序(如cloudberry)连接到S3桶,这样他们就可以上传和下载文件到他们的文件夹。
这是你问题的官方答案。
示例:允许每个IAM用户访问桶中的一个文件夹
在本例中,您希望两个IAM用户Alice和Bob具有访问权限到您的bucket examplebucket,以便它们可以添加、更新和删除对象。但是,您希望将每个用户的访问限制为单个文件夹在桶中。您可以创建名称匹配的文件夹用户名
策略变量的使用是真正的游戏规则改变者,如果你今天不这样做的话。
参见S3策略示例中的示例:
但是,您可以将策略附加到单个用户编写使用策略变量的单个策略,并附加策略到组。首先需要创建一个组,并将两者都添加进去爱丽丝和鲍勃到小组。下面的示例策略允许一组
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}/*" } ] }
从这里
这样做应该允许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/
文件夹,以此类推。