簡體   English   中英

訪問被拒絕錯誤 500 從 Lambda function 中刪除 S3 存儲桶中的 Object 使用 NodeJS 和 Z48C061E29CEAED2

[英]Access Denied Error 500 Deleting Object in S3 Bucket from Lambda function using NodeJS and Postman

我需要從 Lambda function 中刪除 S3 中的 object。 我已經嘗試了一切,這讓我發瘋,請幫助!

我有一個 lambda function 與來自 AWS 的 API GATEWAY 關聯。 當我在 Postman 中發出請求時,我收到一條帶有 500 內部服務器錯誤代碼的拒絕訪問消息。 CloudWatch 日志不顯示其他信息。

Postman 響應

當我使用 AWS CLI 時,我可以使用以下命令成功刪除 object:

aws s3api delete-object --bucket <<My-Bucket>> --key <<My-Key>>

此外,我可以使用 Postman 中的另一個請求將文件上傳到 S3,沒有任何問題。

但是當我使用上傳到Lambda的代碼時,它不起作用。 我正在使用 AWS SDK v3,但我已經嘗試過使用舊版本。 相關代碼如下:

const {S3Client, DeleteObjectCommand} = require("@aws-sdk/client-s3");
const client = new S3Client({region: process.env.AWS_REGION});
const command = new DeleteObjectCommand({
    Bucket: process.env.BUCKET_NAME, Key: `posts/${familyId}/${magazineId}/${postId}`
            });
await client.send(command);

我的 IAM 用戶擁有 S3 完全訪問權限。 IAM 用戶權限

存儲桶擁有者就是這個 IAM 用戶。 我的 S3 存儲桶的策略如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<<My-account-id>>:user/<<My-username>>"
            },
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::<<My-bucket>>"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<<My-account-id>>:user/<<My-username>>"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::<<My-bucket>>/*"
        }
    ]
}

我嘗試取消阻止公共訪問,但問題仍然存在。 命令:

aws configure list

顯示我期望的訪問密鑰、密鑰和區域。 任何想法將不勝感激,謝謝!

當我找到解決方案時回答自己:

我正在使用 AWS SAM 部署 lambda 功能(基礎設施即代碼)。 我缺少 template.yml 中所需的權限。 將此策略添加到 template.yml 中的 lambda function 並且它有效。

MyFunction:
    Type: AWS::Serverless::Function
    Properties:
          Policies:
            - S3CrudPolicy:
                BucketName: !Ref BucketName

查看這些文檔以解決其他訪問被拒絕錯誤: https://aws.amazon.com/premiumsupport/knowledge-center/s3-troubleshoot-403/

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM