繁体   English   中英

boto3具有正确权限的拒绝访问S3 put_object

[英]boto3 Access Denied S3 put_object with correct permissions

第一次使用boto3用户。

我有一个使用ACL S3FullAccess的用户,并使用以下代码尝试上传文件; 它使用pandas DataFrame作为源。

        s3_client = boto3.client('s3')
        io = StringIO()
        df.to_csv(io)
        response = s3_client.put_object(
            Bucket=self.bucket,
            Body=io,
            Key=self.filename
        )

这导致了这种回应

botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the PutObject operation: Access Denied

因此,我检查了boto3从我的〜/ .aws / credentials文件中获取了秘密密钥和访问密钥,它们位于boto3中client.py的第604行上-request_signer = self._request_signer

因此,我在这里对SO进行了研究,似乎很多人都必须添加一个Policy文档,所以我这样做如下:

{
"Version": "2012-10-17",
"Id": "Policyxxx",
"Statement": [
    {
        "Sid": "Stmtx1",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::<12 digit id>:root"
        },
        "Action": [
            "s3:GetObject",
            "s3:PutObject"
        ],
        "Resource": "arn:aws:s3:::<my-bucket>/*"
    },
    {
        "Sid": "Stmtx6",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::<12 digit id>:root"
        },
        "Action": "s3:ListBucket",
        "Resource": "arn:aws:s3:::<my-bucket>"
    }
]
}

我仍然遇到相同的错误,因此我将其添加到put_object调用中,因为S3存储桶使用AES-256加密,我认为该加密仅是服务器端的,但是没有足够的想法,因此值得尝试。

            SSECustomerKey=os.urandom(32),
            SSECustomerAlgorithm='AES256',

接下来,我删除了与SSE密钥相关的那些术语,意识到AES-256加密是服务器端的,不应影响我的访问。

然后,我尝试生成一对新的访问密钥,并使用它们来替代相同的结果。

是否有人知道我接下来会看什么,数百页的AWS文档中缺少什么?

这只是在创建用户时将他们添加到几个组中的一种情况。 管理员和EC2MFA。 我没有意识到这一点的含义,但是假设EC2MFA组阻止了API或CLI访问。 我假设用户和S3端的Policy组合足够安全。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM