![](/img/trans.png)
[英]Access Denied error while doing upload document to S3 bucket from POSTMAN
[英]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 日志不顯示其他信息。
當我使用 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.