允许用户访问 S3 存储桶中的一个目录

Posted

技术标签:

【中文标题】允许用户访问 S3 存储桶中的一个目录【英文标题】:Allow user access to one directory in a S3 Bucket 【发布时间】:2017-07-05 20:00:51 【问题描述】:

我搜索了现有的问题,但找不到答案。

我想限制某个用户访问一个目录 S3 存储桶。例如,我有目录 my-bucket/test/123。我在这个目录中放了一些图像。其他用户不应访问此目录。 然后我创建了 Bucket 策略:


"Version": "2012-10-17",
"Statement": [
    
        "Sid": "AddPerm",
        "Effect": "Allow",
        "Principal": 
            "AWS": "arn:aws:iam::123456789000:user/some-user"
        ,
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::my-bucket/test/123/*"
    
]

但是当我尝试在浏览器中打开文件时,我收到“拒绝访问”消息。

我尝试使用 Deny 效果和 NotPrincipal。在这种情况下,这些文件可供其他用户使用。 请帮忙!

【问题讨论】:

“我试图在浏览器中打开文件”是什么意思?您是否使用了文件的完整 URL,例如http://s3.amazonaws.com/my-bucket/test/123/foo.txt?你是如何向 AWS 验证你是 some-user 的?您是否尝试通过 AWS Command-Line Interface (CLI) aws s3 cp 命令访问该对象? 是的,我使用完整的 URL。我确实使用 AWS 控制台的用户名和密码向 AWS 进行了身份验证。我也使用 php 代码进行了身份验证。 能否请您编辑问题并提供有关您在收到拒绝访问消息时如何连接到 Amazon S3 的更多详细信息。我们需要看看您是如何进行身份验证的。请提供您正在使用的代码,或说明您是如何连接和验证的。 【参考方案1】:

您还需要根前缀(文件夹)的存储桶列表权限,如本 AWS 文档 Writing IAM Policies: Grant Access to User-Specific Folders in an Amazon S3 Bucket 中所述:

虽然大卫应该只能访问他的主文件夹,但他需要 附加权限,以便他可以导航到他在 亚马逊 S3 控制台。 David 需要权限才能列出根目录下的对象 my-company 存储桶的级别和 home/ 文件夹中。

【讨论】:

以上是关于允许用户访问 S3 存储桶中的一个目录的主要内容,如果未能解决你的问题,请参考以下文章

如何只允许特定用户访问 Amazon S3 上的内容

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

通过 terraform 创建 IAM 用户并在 S3 存储桶中上传密钥和访问密钥

如何仅允许 IAM 用户完全访问存储桶中的特定路径? [关闭]

允许搜寻器访问其他帐户中的Amazon S3存储桶

限制对 S3 中对象的访问