当前位置: 首页 > 知识库问答 >
问题:

允许管理员访问s3存储桶中的sub_文件夹。保持所有其他文件夹为公共文件夹

李捷
2023-03-14

假设我有下面的s3结构

company_folder
  folder1
  folder2
  folder3
    sub_folder1 
    sub_folder2

我目前拥有以下权限,可以访问每个文件夹、子文件夹和文件。这是一个网络应用程序。

"Effect": "Allow",
"Principal": {
  "AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::company_folder/*"

使用管理员IAM访问密钥id:ABCD我可以使用carrierwave将图像放入子文件夹。我使用一个cloudfront根url从各种“文件夹”和“子文件夹”发送图像

发送到sub_folder2的图像不会显示在html" target="_blank">网站上,它们是高分辨率的。他们不应该被任何人访问,除了管理员。

我如何在company_folder的桶策略中更改对sub_folder2的限制

我需要拒绝GET和PUT访问'sub_folder2'的每个人,除了管理员,同时保持在'company_folder'中的所有其他内容的公共读取。

我认为“company_文件夹”需要保持公开,因为我的cloudfront url指向该文件夹。

这是编辑bucket策略的简单解决方案吗?

共有1个答案

彭硕
2023-03-14

像下面这样的桶策略应该适用于您。诀窍是显式拒绝访问您不想要的资源/操作,然后允许访问您想要的资源/操作。小心桶策略、IAM策略和对象ACL之间的交互。还请确保您使用可信顾问来警告您世界可读的存储桶。

{
    "Id": "Policy1429934459265",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1429934187436",
            "Action": [
                "s3:GetObject"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::company_folder/*",
            "Principal": "*"
        },
        {
            "Sid": "Stmt1429934452272",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectTorrent",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl",
                "s3:GetObjectVersionTorrent",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectVersionAcl",
                "s3:RestoreObject"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::company_folder/folder3/sub_folder2/*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::888888888888:user/youruser"
                ]
            }
        },
        {
            "Sid": "Stmt1429934245711",
            "Action": "s3:GetObject",
            "Effect": "Deny",
            "Resource": "arn:aws:s3:::company_folder/folder3/sub_folder2/*",
            "Principal": "*"
        }
    ]
}
 类似资料:
  • 我有一个Amazon S3存储桶,所有设置都处于默认模式。当我转到我的Bucket权限选项卡并查看Public access/Everyone部分时,所有选项都为空,因此所有内容都是私有的。 现在我制作一个带有很长随机sha1-hash的文件夹,我在这个文件夹中上传一些文件和子文件夹,并将整个文件夹公开。是否可以检测(列出)此文件夹? 看起来不错。但也许还有其他方法可以检测我的公用文件夹?

  • 问题内容: 我需要列出S3存储桶中某个文件夹中包含的所有文件。 文件夹结构如下 我有与用户有关的文件和与某个用户的联系人有关的文件。我需要同时列出两者。 要列出文件,我使用以下代码: 要列出某个用户的文件,我使用以下前缀: 并且我正确地获得了除子目录之外的目录中的所有文件,例如: 要列出某个用户联系人的文件,我使用以下前缀: 但是在这种情况下,我还将目录本身作为返回的对象: 为什么我会得到这种行为

  • 问题内容: 我有一个s3结构,如下所示: 我需要做的就是给定s3bucket的名称和一个第一级密钥的条目,我需要位于第一级密钥下的所有第二级密钥的名称。因此,从本质上来说,如果我们将其视为一个文件夹,则将获得的名称(即)和其子文件夹之一的名称,我想列出其中的所有文件夹。虽然只是名称,而不是完整的路径。 有人可以指出如何使用亚马逊的Java SDK在Java中做到这一点吗? 谢谢 问题答案: 我做了

  • 问题内容: 如何使用Java将所有文件从一个文件夹移动到另一文件夹?我正在使用此代码: 但它仅适用于一个特定文件。 谢谢!!! 问题答案: 如果对象指向文件夹,则可以遍历其内容

  • 我正在制作一个soundboard应用程序,当长按按钮1时,我需要共享sound1。我可以用以下代码创建共享菜单: 我可以与whatsapp和Google Drive完美共享音频文件,但其他应用程序不起作用。我听说您必须将文件复制到外部存储,并从那里共享它们。我已经搜索了将近两天,但我找不到这样做的方法。Stack上的其他文章也帮不了我:/ 如何在外部存储器中创建目录,将文件(sound1.ogg

  • Inno Setup:动态添加文件夹中的所有文件并添加组件标签,因此在运行设置期间,用户可以选择自定义设置并选择要复制的文件。 我想创建一个Inno安装文件,将抓取文件夹中的文件,用户可以放在那里,而不必每次添加新文件时修改Inno安装文件。同时,我需要安装文件的用户能够选择要复制的文件。 如果我做了这样的事情: 自定义设置仅显示复制或不复制整个文件夹的选项。