![](/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.