为什么此政策无效?它允许所有资源上的所有命令,但不能拒绝所选文件夹!我该如何解决这类问题?
markers 'XXX' and 'YYY' --> therefore i want to extract 78665786 and 6866
['XXX78665786YYYjajk', 'XXX6866YYYz6767'....]
答案 0 :(得分:1)
以下是使用Deny
的示例。 (我没有对此进行测试!)
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::agdstorage"
],
"Condition": {
"StringNotLike": {
"s3:prefix": [
"Storage_WK/Agedi Monaco/Banca/*",
"Storage_WK/Agedi Monaco/Bilanci/*",
"Storage_WK/Agedi Monaco/Contenziosi/*",
"Storage_WK/Agedi France/Affari societari/*"
]
}
}
},
{
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::agdstorage/*"
]
},
{
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Effect": "Deny",
"Resource": [
"arn:aws:s3:::agdstorage/Storage_WK/Agedi Monaco/Banca/*",
"arn:aws:s3:::agdstorage/Storage_WK/Agedi Monaco/Bilanci/*",
"arn:aws:s3:::agdstorage/Storage_WK/Agedi Monaco/Contenziosi/*",
"arn:aws:s3:::agdstorage/Storage_WK/Agedi France/Affari societari/*"
]
}
]
}
请注意,ListBucket
是通过Prefix
控制的,因此只需使用StringNotLike
。
对于GetObject
和PutObject
,它使用的是您列出的资源。
答案 1 :(得分:0)
ListBucket
命令在存储桶级而非对象级进行操作。
以下是仅授予特定文件夹访问权限的策略示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::mybucket"],
"Condition": {"StringLike": {"s3:prefix": ["David/*"]}}
},
{
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::mybucket/David/*"]
}
]
}
请注意,ListBucket
引用了存储桶,但通过指定Prefix
来限制访问。
这与GetObject
和PutObject
不同,可以通过在Resource
中提供路径来限制它们。
要了解每个命令的工作方式,请查阅Actions, Resources, and Condition Keys for Amazon S3 - AWS Identity and Access Management并参考资源类型列。
如果可能,请尝试避免使用Deny
,因为否定逻辑有时不太明显(就像这句话一样)。最好仅授予所需的权限,而不是授予所有内容,然后拒绝某些权限。例如,问题中显示的策略实际上授予删除指定文件夹之外的对象的权限(例如,在根级别),甚至删除存储桶本身(如果为空)。
如果您只是想授予用户对其拥有文件夹的访问权限,则可以使用IAM Policy Elements: Variables and Tags:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::mybucket"],
"Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}}
},
{
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::mybucket/${aws:username}/*"]
}
]
}
这会根据用户名自动调整策略,以便他们可以根据用户名访问文件夹。