我正在尝试实施IAM策略,其中用户也只能访问他有权访问的文件夹。我从亚马逊文档中获取了此代码
允许用户仅列出公司存储桶中其主目录中的对象
此示例以前一个为Bob提供主目录的示例为基础。为了让Bob能够列出其主目录中的对象,他需要访问ListBucket。但是,我们希望结果只包含其主目录中的对象,而不是桶中的所有内容。为了限制他的访问方式,我们使用名为s3:prefix的策略条件键,其值设置为home / bob / 。这意味着只有具有前缀home / bob / 的对象才会在ListBucket响应中返回。
{
"Statement":[{
"Effect":"Allow",
"Action":"s3:ListBucket",
"Resource":"arn:aws:s3:::my_corporate_bucket",
"Condition":{
"StringLike":{
"s3:prefix":"home/bob/*"
}
}]
}
这对我不起作用。当我运行我的代码时,我能够看到所有文件夹和子文件夹。我修改过的代码看起来像这样:
{
"Statement":[{
"Effect":"Allow",
"Action":"s3:ListBucket",
"Resource":"arn:aws:s3:::Test-test",
"Condition":{
"StringLike":{
"s3:prefix":"Test/*"
}
}]
}
当我使用附加到上述策略的用户凭据在c#中运行我的代码时,我得到所有文件夹而不仅仅是“Test”下的文件夹... 真的很感激一些帮助!
答案 0 :(得分:7)
我终于开始工作了。虽然我认为AWS管理控制台中存在一个错误,但至少它就像是一个错误。问题是我的策略一直都是正确的,但是当我通过AWS管理控制台访问它时,它的行为会有所不同,然后像CloudBErry这样的软件。我必须修改的一件事是对象和存储桶的ACL设置。如果AWS控制台正常工作,那么之前也会这样做。无论如何,这是我的政策:
{
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "arn:aws:s3:::*",
"Condition": {}
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:ListBucketVersions"
],
"Resource": "arn:aws:s3:::pa-test",
"Condition": {
"StringLike": {
"s3:prefix": "test/*"
}
}
},
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "arn:aws:s3:::pa-test/test/*",
"Condition": {}
}
]
}
1)问题是当我通过AWS控制台访问此IAM用户的管理控制台时,当我点击我的存储桶时,我被拒绝访问但是当我通过Cloudberry登录时,我可以看到我的文件夹。 2)我必须修改我的存储桶和对象(文件夹)的ACL设置 对于我的水桶: 所有者:完全控制 经过身份验证的用户:Readonly
对于我的文件夹: 所有者:完全控制
现在的问题是您无法在AWS控制台中为文件夹(对象)设置ACl设置。您可以为文件(对象)设置它们。例如,如果右键单击存储桶中的文件夹(对象),然后单击属性,则不会显示权限选项卡。但是,如果您右键单击存储桶或文件(Say test.html)并单击属性,它将显示权限选项卡。 我不确定是否其他人注意到了这个问题。无论如何这是我的剧本,它现在正在运作。
答案 1 :(得分:2)
你期望从listBucket获得的结果不是那样的。 因为策略只允许您根据存储桶策略访问对象的允许和拒绝。 ListBucket将列出所有对象,但您只能访问前缀文件夹及其内容。
如果您只想列出文件夹,那么您必须为读取IAM策略编写代码,然后获取前缀字符串,然后使用该前缀列出,那么您将只获得所需的文件夹。因为直到现在亚马逊s3都没有这样的选择。