在EC2实例上将文件上传到S3 - 权限被拒绝

时间:2017-01-16 00:29:45

标签: java amazon-web-services amazon-s3 amazon-ec2

因此,在我的应用中,用户可以将他们的照片上传到S3存储,然后我会将返回的Url保留到数据库。

我遇到的问题是,当我将应用程序部署到我的Elastic Beanstalk环境时,由于我在catalina.out日志中发现的错误,我无法将照片存储到S3存储:

java.io.IOException: Permission denied
    at java.io.UnixFileSystem.createFileExclusively(Native Method)
    at java.io.File.createNewFile(File.java:1012)
    at com.common.util.file.FileUtil.convert(FileUtil.java:17)

如何设置权限以便我可以修复此错误?

[编辑] 当我在localhost上运行应用程序时,我就可以将文件上传到S3存储桶中。我在this link中使用此示例代码作为上传文件的实现模板。

以下是我用来将多部分文件转换为文件的代码:

public File convert(MultipartFile file) throws IOException {
    File convFile = new File(file.getOriginalFilename());
    convFile.createNewFile();                               // Cause IOException
    FileOutputStream fos = new FileOutputStream(convFile);
    fos.write(file.getBytes());
    fos.close();
    return convFile;
}

2 个答案:

答案 0 :(得分:2)

在您的应用程序中,请勿附加aws凭据。创建应具有AWS S3权限的IAM角色。使用Elastic Beanstalk启动应用程序时,请将此IAM角色附加到EC2实例。

您的应用程序使用IAM角色对AWS S3进行身份验证以上载映像。最佳做法是附加具有通过AutoScaling组或Elastic Beanstalk或直接从EC2仪表板启动EC2实例的特定权限的IAM角色。

答案 1 :(得分:0)

您提供的示例代码的link使用 ProfileCredentialsProvider ,它会从配置文件配置文件中为默认配置文件(read more)发布AWSCredentials。

您需要(1)将配置文件从本地计算机复制到EC2实例,或者(2)使用其他方法向SDK提供AWS凭据。例如,请参阅Working with AWS Credentials