调用 PutObject 操作时 Lambda 函数出现问题:访问被拒绝

问题描述 投票:0回答:1

我需要您就这个问题提供帮助,在经过更多解决方案调整后,我总是遇到问题。

我尝试通过以下链接上发布的答案来解决此问题,但对我来说没有任何效果:

使用桶级权限调用PutObject操作时拒绝访问 https://bobbyhadz.com/blog/aws-s3-access-denied-when-calling-putobject

正在开发部署为 docker 镜像的 lambda 函数,该函数必须将一些数据保存在 S3 上的文件中。

IAM 策略具有

ListBucket
GetObject
PutObject
的权限,但在生产中这不起作用:我尝试在存储桶上应用策略,但得到了相同的结果(以下问题)。我最终决定将这个桶公开,不幸的是这也没有成功。

桶政策:

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

你能帮我解决这个问题吗?

谢谢你。

python-3.x amazon-s3 aws-lambda boto3 amazon-iam
1个回答
0
投票

首先,修复存储桶策略:您允许任何经过身份验证的 AWS 主体对您的存储桶的内容执行任何操作。如果我知道它的名字,我现在就可以删除你的所有数据。 “Principal”字段应仅命名您需要访问存储桶的那些主体。

对于你原来的问题,我怀疑你的Bucket是使用KMS CMK加密的?在这种情况下,您的调用者也需要获得使用 CMK 的权限。在您的 CMK 密钥策略中添加类似的内容,以允许您写入存储桶:

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

“资源”:“*” }

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

© www.soinside.com 2019 - 2024. All rights reserved.