python-3.x 调用PutObject操作时的Lambda函数问题:拒绝访问

9cbw7uwe  于 2023-11-20  发布在  Python
关注(0)|答案(1)|浏览(83)

我需要你的帮助,在这个问题上,我总是得到问题后,许多更多的解决方案适应。
我尝试通过以下链接解决此问题,但没有任何结果:
Getting Access Denied when calling the PutObject operation with bucket-level permissionhttps://bobbyhadz.com/blog/aws-s3-access-denied-when-calling-putobject的数据库
我正在开发部署为Docker映像的lambda函数,该函数必须在S3上的文件中保存一些数据。
IAM策略具有对ListBucketGetObjectPutObject的权限,但在生产中这不起作用:我尝试在存储桶上应用策略,但得到了相同的结果(下面的问题)。我最终决定将存储桶公开,不幸的是,这也不成功。


的数据
桶上的策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::bucket-xxx/*"
        }
    ]
}

字符串
你能帮我解决这个问题吗?
谢谢

5gfr0r5j

5gfr0r5j1#

首先,修复Bucket策略:您允许任何经过认证的AWS主体对您的Bucket的内容做任何事情。如果我知道它的名称,我可以立即删除您的所有数据。“Principal”字段应该只命名您需要访问Bucket的那些主体。
至于您最初的问题,我怀疑您的Bucket是使用KMS CMK加密的?那么您的调用者也需要CMK的使用权限。在CMK的密钥策略中添加这样的内容,以允许您写入Bucket:

{
  "Action": [
    "kms:GenerateDataKey"
  ],
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::123456789012:role/your_lambda_Role"
  },
  "Resource": "*"
}

字符串
请参阅https://repost.aws/knowledge-center/s3-bucket-access-default-encryption了解更多详细信息。

相关问题