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

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