IAM AWS S3 限制为特定子文件夹



我正在使用 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",
                    ]
                }
            }
        }
    ]
}

是否可以限制以下规则但授予特定的文件夹访问权限?我不希望用户看到特定存储桶中的目录名称/文件夹名称。

自动列出存储桶的根(如果用户看到目录名称,对我来说没关系)

最新更新