AWS ElasticBeanstalk - S3。拒绝访问
Posted
技术标签:
【中文标题】AWS ElasticBeanstalk - S3。拒绝访问【英文标题】:AWS ElasticBeanstalk - S3. Access Denied 【发布时间】: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/*"
是的,我有这样的。我用那个更新了我的问题
【参考方案1】:
当您取消保修时,请仔细检查所有政策操作:
"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
为了学习,我强烈推荐这些文章:
https://hamzahabdulla1.medium.com/aws-iam-identity-vs-resource-policy-abfe099e14d1 https://jayendrapatil.com/aws-iam-roles-vs-resource-based-policies/ https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html【讨论】:
感谢您的回复!我在资源中添加了 /*,但仍然出现相同的错误。我将使用传递给方法上传和方法的参数更新我的问题,也许这会有所帮助。 好吧,我遗漏了一些东西,最后我需要添加“资源”:[“arn:aws:s3:::mybuild”,“arn:aws:s3:::mybuild/* "]。非常感谢!!以上是关于AWS ElasticBeanstalk - S3。拒绝访问的主要内容,如果未能解决你的问题,请参考以下文章
Elastic Beanstalk 拒绝 AWS S3 存储权限
通过 ElasticBeansStalk 上托管的 API Gateway 在 AWS S3 上上传图像
如何在 Elasticbeanstalk 环境中运行的 docker 容器中承担 AWS 角色?