¿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.

Respuestas a la pregunta(1)

Su respuesta a la pregunta