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

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

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

我可以列出存储桶中的所有文件,但是当我尝试使用我认为正确的策略下载它们时,我收到 botocore.exceptions.ClientError: An error returned (403) when call the HeadObject操作:禁止

然后,当我尝试添加适用于 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代码,但是这个问题似乎足够长,而且代码非常简单

最佳答案

似乎我只需要一些橡皮鸭调试,答案是我认为违反直觉,但很简单:

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/*"
        ]
    }]
}

正如我所说,它可以控制存储桶本身,没有星号,以及斜杠后面的任何内容。

关于python - 为什么此 AWS IAM 策略仅适用于资源上的星号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45108097/

相关文章:

python - 将标签列插入数据框中的列内容

python - 在 'read-only' 基本安装中使用 Conda 环境

Python Pandas 数据框 : find max for each unique values of an another column

python - 要求已经满足 psutil

.net - 防止 Amazon S3 上不必要的 'If-Modified-Since' 请求和 304 响应

amazon-web-services - 带有 cloudformation 输出变量的 Serverless.yml 自定义堆栈

amazon-web-services - 使用签名 URL 从客户端上传文件时如何设置 S3 putObject 选项

amazon-web-services - ECR 中的 Docker 图像标记

java - Amazon AWA - 未发现类 Def 异常

sql-server - 权限错误,将 parquet 文件从 AWS S3 加载到 SQL Server 2022 时遇到问题