¿Por qué puedo cargar a AWS S3 desde mi host local, pero no desde mi instancia de AWS Elastic BeanStalk?
Estoy usando AWS Credentials * para conectarme a mi AWS S3.
final AmazonS3 s3 = new AmazonS3Client(
new AWSStaticCredentialsProvider(new BasicAWSCredentials("accessKey*",
"secretKey")));
s3.setRegion(Region.US_West.toAWSRegion());
s3.setEndpoint("s3-us-west-1.amazonaws.com");
Desde mi servidor local, puedo cargar imágenes y, dado que tengo habilitado el control de versiones, obtengo versionId para la siguiente línea.
versionId = s3.putObject(new PutObjectRequest("bucketName", name, convFile)).getVersionId();
PS 3: el código de arriba está envuelto en un bloque try-catch y el bloque catch imprime esto
You failed to upload fileName => fileName.jpeg (Permission denied)
Pero si ejecuto el mismo código de mi ElasticBeanStalk, obtengo versionId = null y la imagen no se carga en S3.
No veo excepciones de credenciales.
Cuando busqué la clave de acceso en Usuarios (bajo IAM), me di cuenta de que no estaba asignada a ningún usuario.Después de leer todos los documentos, creé dos usuarios. Uno bajo un grupo que creé, otro sin un grupo.
Usé accessKey de esos usuarios y todavía no puedo cargar la imagen en S3.
Así es como se ve mi política de depósito Después de crear los dos usuarios
{
"Version": "2012-10-17",
"Id": "Policy1",
"Statement": [
{
"Sid": "Stmt1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::someNumnber:user/username"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::bucketName"
}
]
}
Antes de crear dos usuarios (y la siguiente configuración estaba en su lugar cuando localhost carga correctamente la imagen en S3)
{
"Version": "2012-10-17",
"Id": "Policy15",
"Statement": [
{
"Sid": "Stmt1",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bcktName",
"arn:aws:s3:::bcktName/*"
]
}
]
}
Estoy totalmente impresionado con este tema durante 4 noches. Por favor, ayúdame. No uso boto ni ninguna otra cosa. Es un archivo de guerra directo cargado en Tomcat, que tiene que subir imágenes a S3. Funciona en localhost, pero no en S3.
PD: así es como se ve mi configuración CORS
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<MaxAgeSeconds>20000</MaxAgeSeconds>
<ExposeHeader>ETag</ExposeHeader>
<ExposeHeader>x-amz-server-side-encryption</ExposeHeader>
<ExposeHeader>x-amz-request-id</ExposeHeader>
<ExposeHeader>x-amz-id-2</ExposeHeader>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
PS 2:
¿Debo hacer algo en la lista de control de acceso? A partir de ahora, veo que la cuenta del propietario es la misma que el nombre de usuario de mi AWS completo. Creo que la clave de acceso y la clave secreta que funciona desde local también están relacionadas con la cuenta del propietario.