【发布时间】:2021-11-06 19:42:40
【问题描述】:
我正在为我的 nodejs 应用程序使用 elasticbeanstalk。我正在尝试将对象上传到 S3 存储桶并尝试读取对象,但我收到了 AccessDenied 错误。
有线的事情是,我可以从我的本地执行这些操作。所以我认为问题不在于 IAM 用户。但是有了桶里的政策,我却不确定。
我在存储桶中添加了一个策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddCannedAcl",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::000000000000:user/myuser",
"arn:aws:iam::000000000000:role/aws-elasticbeanstalk-service-role"
]
},
"Action": "*",
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
],
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "public-read"
}
}
}
]
}
但仍然无法使其工作。我还公开了所有内容(我不想要的)只是为了测试,即使这样也无法上传或读取对象。
谁能帮我解决这个问题。我发现 AWS 中的角色和政策真的很难理解。还有任何教程或指南可以在那里学习,这样我就可以提高我在这个主题上的技能?我总是在 aws 中遇到权限问题。
错误:
Error: AccessDenied: Access Denied
async uploadFileToS3(params: any) {
try {
const s3UploadResult = await this.s3.upload(params).promise();
return s3UploadResult;
} catch (error) {
throw new Error(error);
}
}
const params = {
Bucket: 'my-bucket',
Key: `${new Date()}.pdf`,
Body: req.files ? req.files.file.data : file.buffer,
ACL: 'public-read'
};
const result = await this.awsService.uploadFileToS3(params);
非常感谢!
【问题讨论】:
-
您究竟是如何测试访问权限的?您是否使用过 AWS CLI?它的形式是什么?
-
mm 我不知道你测试访问是什么意思。我只是想上传图像。在这种情况下,我没有使用 aws cli。我更新了 aws 控制台上的政策。
-
你的资源应该是
"arn:aws:s3:::my-bucket/*" -
是的,我有这样的。我用那个更新了我的问题
标签: amazon-web-services amazon-s3 amazon-elastic-beanstalk amazon-iam