AWS ElasticBeanstalk - S3。拒绝访问
AWS ElasticBeanstalk - S3. Access Denied
我正在为我的 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"
}
}
}
]
}
但还是不行。我也做了一切public(我不想要的)只是为了测试,甚至不能上传或读取对象。
谁能帮我解决这个问题。我发现 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);
非常感谢!
仔细检查所有策略操作,当您删除时:
"Resource": "arn:aws:s3:::mybuild"
您允许对存储桶本身执行操作,
而不是“在里面”或“在里面的物体上”
要允许在存储桶内执行操作,您应该使用:
"Resource": "arn:aws:s3:::mybuild/*"
如果两者都需要,您可以将保单更新为:
"Resource": ["arn:aws:s3:::mybuild","arn:aws:s3:::mybuild/*"]
存储桶策略典型用例的几个示例:
https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-policies-s3.html
为了学习,我强烈推荐这些文章:
我正在为我的 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"
}
}
}
]
}
但还是不行。我也做了一切public(我不想要的)只是为了测试,甚至不能上传或读取对象。
谁能帮我解决这个问题。我发现 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);
非常感谢!
仔细检查所有策略操作,当您删除时:
"Resource": "arn:aws:s3:::mybuild"
您允许对存储桶本身执行操作,
而不是“在里面”或“在里面的物体上”
要允许在存储桶内执行操作,您应该使用:
"Resource": "arn:aws:s3:::mybuild/*"
如果两者都需要,您可以将保单更新为:
"Resource": ["arn:aws:s3:::mybuild","arn:aws:s3:::mybuild/*"]
存储桶策略典型用例的几个示例: https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-policies-s3.html
为了学习,我强烈推荐这些文章: