授权访问亚马逊S3存储桶中的子目录以进行读取

4
我以前从未使用过AWS S3。我们用它来自动备份客户的通话录音。为了审计目的,我们的一个客户需要访问他们的录音。
我使用CyberDuck客户端来访问这些文件。
我想只给他们访问他们自己的文件的权限。
我们的文件结构如下:
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/*"
            ]
        }
    ]
}

这可能会有所帮助:http://docs.aws.amazon.com/AmazonS3/latest/dev/walkthrough1.html#walkthrough-grant-user1-permissions,还有这个:http://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html。 - kosa
1个回答

8
您只给了他们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策略变量创建规则来代替他们的用户名。请参考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}/*"
            ]
        }
    ]
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接