【问题标题】:s3 bucket object URL is not privates3 存储桶对象 URL 不是私有的
【发布时间】:2018-05-30 11:13:14
【问题描述】:

我的存储桶文件夹是私有的,但是当我将单个对象的 URL 复制到浏览器中时(当我退出时),我仍然可以下载/查看文件。

如何防止这种情况发生?

这是我的存储桶政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowPublicRead",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "NotResource": "arn:aws:s3:::my-bucket/backup/*"
        }
    ]
}

我想要实现的目标:将每个文件夹设为私有,但名为 mediastatic 的 2 个文件夹除外(我希望对其进行公共读取访问)。

【问题讨论】:

  • 如果您删除存储桶策略,是否仍可访问各个对象?您希望从这项政策中获得什么——我从未见过带有 NotResource 的存储桶政策?
  • 我正在尝试将每个文件夹设为私有,但名为 mediastatic 的两个文件夹除外
  • 如果您删除存储桶策略,是否仍可访问各个对象?当你说一个对象仍然可以访问时,它在哪个文件夹中?
  • 通过阅读此页面上的答案和 cmets,您的实际目标似乎存在混淆。随意编辑您的问题,说明您实际想要实现的目标,而不是仅仅说“这不起作用”。
  • 我的错误,我在编辑中添加了我的目标。当我删除存储桶策略时,我的所有文件夹都是私有的,无法访问。

标签: amazon-web-services amazon-s3


【解决方案1】:

在您的政策中,您明确告诉它允许匿名公共 GET 访问。

您必须将其更改为如下所示。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:*"
            ],
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::ACCOUNT_ID:user/USERNAME_A",
                    "arn:aws:iam::ACCOUNT_ID:user/USERNAME_B",
                    "arn:aws:iam::ACCOUNT_ID:user/USERNAME_C",
                    "arn:aws:iam::ACCOUNT_ID:role/ROLE_A",
                    "arn:aws:iam::ACCOUNT_ID:role/ROLE_B",
                    "arn:aws:iam::ACCOUNT_ID:role/ROLE_C"
                ]
            },
            "Resource": [
                "arn:aws:s3:::BUCKET_NAME",
                "arn:aws:s3:::BUCKET_NAME/*"
            ]
        }
    ]
}

在此处参阅更多政策examples

【讨论】:

  • 我还想公开两个名为 mediastatic 的文件夹 - 这会更改您发布的配置吗?
  • 好的,是的,你可以做到。请参阅我提供的 URL 的 Restricted LIST & PUT/DELETE access to specific path within a bucket 部分并将 LIST/PUT/DELETE 更改为 GetObject
【解决方案2】:

我认为您正在寻找类似的东西。

    {
  "Version":"2012-10-17",
  "Statement": [
    {
       "Sid": "AllowAllS3ActionsInOtherFolders",
       "Action":["s3:*"],
       "Effect":"Allow",
       "Resource": ["arn:aws:s3:::my-bucket"],
       "Condition":{"StringLike":{"s3:prefix":
                  [
                       "backup/media/*"
                       "backup/static/*"
                  ]
               }
        }
    }
  ]
}

更多详情请参考Grant Access to User-Specific Folders in an Amazon S3 Bucket

【讨论】:

  • 不建议授予s3:* 权限。这意味着世界上任何人都可以在没有这些允许的路径的情况下做任何事情(包括列出文件、删除文件和上传 TB 的数据,您需要为此付费)。
【解决方案3】:

此政策授予公共GetObject 访问这两个文件夹的权限。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ReadAccess",
            "Action": [
                "s3:GetObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::jr-enc/media/*",
                "arn:aws:s3:::jr-enc/static/*"
            ],
            "Principal": "*"
        }
    ]
}

请注意,GetObject 仅授予访问/下载对象的权限。它确实允许列出存储桶/文件夹的内容。

【讨论】:

    猜你喜欢
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 2019-01-25
    • 2017-03-19
    相关资源
    最近更新 更多