【问题标题】:AWS ElasticBeanstalk - S3. Access DeniedAWS ElasticBeanstalk - S3。拒绝访问
【发布时间】: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


【解决方案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

为了学习,我强烈推荐这些文章:

【讨论】:

  • 感谢您的回复!我在资源中添加了 /*,但仍然出现相同的错误。我将使用传递给方法上传和方法的参数更新我的问题,也许这会有所帮助。
  • 好吧,我遗漏了一些东西,最后我需要添加“资源”:[“arn:aws:s3:::mybuild”,“arn:aws:s3:::mybuild/* "]。非常感谢!!
猜你喜欢
  • 2017-12-24
  • 2020-09-30
  • 1970-01-01
  • 2016-12-21
  • 1970-01-01
  • 1970-01-01
  • 2021-07-04
  • 2021-06-26
  • 2015-09-22
相关资源
最近更新 更多