授予访问权限以读取Amazon S3存储桶中的子目录

时间:2017-05-01 12:41:38

标签: amazon-web-services amazon-s3 acl

我之前从未使用过AWS S3。我们使用它来自动备份客户的通话录音。我们的一个审计客户需要访问他们的录音。

我使用客户端Cyber​​Duck作为访问文件的方式。

我想让他们只访问他们的文件。

我们的文件结构如下:

recordings/12345/COMPANYNAMEHERE/

我刚刚了解到您根据脚本和策略构建和执行操作。所以我做了一些研究并尝试建立一个,但我在上市时获得了拒绝访问权限。

只是好奇我是否正确地解决了这个问题。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::recordings/12345/COMPANYNAMEHERE",
                "arn:aws:s3:::recordings/12345/COMPANYNAMEHERE/*"
            ]
        }
    ]
}

1 个答案:

答案 0 :(得分:5)

您仅向ListAllMyBuckets授予了他们的权限,这意味着他们只能列出您的存储桶的名称,并且无法执行任何操作。

如果您已经为他们创建了IAM用户,那么为他们提供此策略将允许他们列出并检索他们的文件,但只能从给定目录(或者更准确地说,使用给定的前缀):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::my-bucket"
            ],
            "Condition": {
                "StringLike": {
                    "s3:prefix": [
                        "recordings/123/*"
                    ]
                }
            }
        },
        {
            "Action": [
                "s3:GetObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::my-bucket/recordings/123/*"
            ]
        }
    ]
}

如果您经常与客户合作,那么您可以使用IAM Policy Variables创建替换其用户名的规则:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::my-bucket"
            ],
            "Condition": {
                "StringLike": {
                    "s3:prefix": [
                        "recordings/${aws:username}/*"
                    ]
                }
            }
        },
        {
            "Action": [
                "s3:GetObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::my-bucket/recordings/${aws:username}/*"
            ]
        }
    ]
}