我正在使用 AWS S3 组件来存储文件。
我有一个名为"mybucket"的存储桶,其中包含以下文件夹:
+---Mybucket
---toto1
---toto2
+---toto3
| --- subfolder
| ---subsubfolder
---toto4
我有AWS控制台用户只需要访问"toto3"文件夹。
我试图限制对此文件夹的访问,但用户必须有权列出存储桶的根目录。如果我对根文件夹的访问设置了额外的权限,用户可以浏览"toto1"和"toto2"文件夹,而我不想要。
我想配置这样的东西:
- 授权列出我的 S3 账户的所有存储桶(列出所有存储桶策略)
- 自动列出存储桶的根(如果用户看到目录名称,对我来说没关系)
- 拒绝所有不同于"toto3"的前缀存储桶的访问
- 自动执行 toto3 文件夹中用户的每个操作
- 我不想写一个包容性的规则
我尝试了这个IAM策略,但没有成功:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:GetObject"
],
"Resource": ["arn:aws:s3:::mybucket/toto3/*"]
},
{
"Sid": "Stmt1457617383000",
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": ["arn:aws:s3:::mybucket"]
},
{
"Sid": "Stmt1457617230000",
"Effect": "Deny",
"Action": ["s3:*"],
"Condition": {
"StringNotLike": {
"s3:prefix": "toto3*"
}
},
"Resource": [
"arn:aws:s3:::mybucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": [
"*"
]
}
]
}
您的策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::mybucket/toto3/*"
]
},
{
"Sid": "Stmt1457617230000",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"",
"toto3/"
]
}
},
"Resource": [
"arn:aws:s3:::mybucket*"
]
}
]
}
详:
- 控制台需要
ListAllMyBuckets
。它显示所有存储桶的列表。 toto3/
路径中允许的任何操作。- 存储桶根目录和
toto3/
路径中允许的ListBucket
(检索对象列表)。
我成功地测试了这个解决方案。
AWS 文档参考:允许用户访问 Amazon S3 中的个人"主目录"
我编辑您的代码以具有以下内容,它可以工作!谢谢!!
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::mybucket/toto3/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::mybucket",
"Condition": {
"StringLike": {
"s3:prefix": [
"",
"toto3/",
"toto3*"
]
}
}
}
]
}
我只需要授予外部供应商对存储桶 (!!) 下的文件夹下的子文件夹的访问权限。像这样:
存储桶/文件夹/子文件夹
以下是我完成它的方式:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket",
"s3:DeleteObject",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::bucket/*",
"arn:aws:s3:::bucket"
]
"Condition": {
"StringLike": {
"s3:prefix": [
"bucket/folder/subfolder/*",
"bucket/folder/subfolder/",
"bucket/folder/subfolder",
"folder/subfolder/*",
"folder/subfolder/",
"folder/subfolder",
]
}
}
}
]
}
是否可以限制以下规则但授予特定的文件夹访问权限?我不希望用户看到特定存储桶中的目录名称/文件夹名称。
自动列出存储桶的根(如果用户看到目录名称,对我来说没关系)