example - s3client putobject java
Subir archivo a S3 en instancia EC2-permiso denegado (2)
El enlace al código de muestra que proporcionó utiliza ProfileCredentialsProvider , que vende AWSCredentials desde el archivo de configuración de perfil para el perfil predeterminado ( lea más ).
Tendrá que (1) copiar el archivo de configuración de su máquina local a la instancia de EC2 o (2) usar otro método para proporcionar las credenciales de AWS al SDK. Consulte Trabajar con credenciales de AWS , por ejemplo.
Por lo tanto, en mi aplicación, los usuarios podrán subir sus fotos al almacenamiento S3, y luego persistiré la URL devuelta a la base de datos.
El problema que tengo es que, cuando implemente la aplicación en mi entorno Elastic Beanstalk, ya no puedo almacenar fotos en el almacenamiento S3 debido a este error que encontré en el registro de catalina.out:
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)
¿Cómo puedo establecer el permiso para que pueda solucionar este error?
[EDITAR] Cuando ejecuto la aplicación en el servidor local, entonces podré subir el archivo al depósito S3. Usé este código de muestra en este enlace como plantilla de implementación para cargar el archivo.
Aquí está el código que utilizo para convertir un archivo de varias partes en un archivo:
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;
}
En su aplicación, no agregue las credenciales de aws. Cree un rol de IAM que debe tener permiso para AWS S3. Al iniciar la aplicación con Elastic Beanstalk, adjunte esta función IAM a una instancia de EC2.
Su aplicación utiliza la función IAM para autenticar a AWS S3 para cargar las imágenes. Es una práctica recomendada adjuntar el rol de IAM con permisos específicos para iniciar la instancia EC2 a través del grupo AutoScaling o Elastic Beanstalk o directamente desde el panel EC2.