为什么此AWS IAM策略仅适用于资源上的星号?

时间:2017-07-14 16:53:10

标签: python amazon-web-services amazon-s3 boto3 amazon-iam

我正在尝试使用一些Python代码下载我已经上传到S3的一些文件,但是我在尝试使用严格的策略时感到头疼。

我可以列出存储桶中的所有文件,但是当我尝试使用我认为正确的政策下载它们时,我得到botocore.exceptions.ClientError: An error occurred (403) when calling the HeadObject operation: Forbidden

然后,当我尝试添加一个适用于2个不同存储桶的不同策略时,我添加了部分存储桶的名称,然后添加了星号,并且由于某种原因,同样的确实可行。

有人能告诉我为什么会这样吗?

例如,这就像魅力一样:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1499955913000",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::THE-BEGINING-OF-THE-NAME*"
        }
    ]
}

但这不是:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1499955913000",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::THE-EXACT-COMPLETE-FULL-NAME"
        }
    ]
}

如果相关的话,我可以为下载添加python代码,但这个问题似乎足够长了,代码非常简单

1 个答案:

答案 0 :(得分:2)

似乎我只需要一些橡皮鸭调试,答案是我觉得反直觉,但很容易:

ARN似乎不仅是AWS资源本身的标识符,还包括它的内容。因此,在授予权限时,您需要授予"存储桶"列出它,"内容"下载它

这导致了这样的政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1499955913000",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::THE-EXACT-COMPLETE-FULL-NAME",
                "arn:aws:s3:::THE-EXACT-COMPLETE-FULL-NAME/*"
        }
    ]
}

正如我所说的那样,它可以控制铲斗本身,没有星号,而且任何东西都在斜杠之后