Por que posso fazer upload para o AWS S3 do meu host local, mas não da minha instância do AWS Elastic BeanStalk?

Estou usando as credenciais da AWS * para me conectar ao meu 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");

No meu host local, consigo fazer upload de imagens e, como tenho o controle de versão ativado, recebo o versionId de volta para a linha seguinte.

versionId = s3.putObject(new PutObjectRequest("bucketName", name, convFile)).getVersionId();

PS 3: O trecho de código acima está envolto em um bloco try-catch e o bloco catch imprime isso

 You failed to upload fileName => fileName.jpeg (Permission denied)

Mas se eu executar o mesmo código do meu ElasticBeanStalk, obtenho versionId = null e a imagem não é carregada no S3.

Não vejo exceção de credenciais.

Quando pesquisei a accessKey em Usuários (no IAM), percebi que ela não estava atribuída a nenhum usuário.

Depois de ler todos os documentos, criei dois usuários. Um em um grupo que eu criei, outro sem um grupo.

Usei o accessKey desses usuários e ainda não consigo carregar a imagem no S3.

É assim que minha política de bucket se parece Depois de criar os dois usuários

{
    "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 criar dois usuários (e a configuração a seguir estava em vigor quando o host local carrega com êxito a imagem no S3)

{
    "Version": "2012-10-17",
    "Id": "Policy15",
    "Statement": [
        {
            "Sid": "Stmt1",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bcktName",
                "arn:aws:s3:::bcktName/*"
            ]
        }
    ]
}

Estou totalmente impressionado com esta questão por 4 noites. Por favor me ajude. Eu não uso boto ou qualquer outra coisa. É um arquivo de guerra direto enviado para o tomcat, que precisa enviar imagens para o S3. Funciona no host local, mas não no S3.

PS: É assim que minha configuração do CORS se parece

<?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:

Devo fazer alguma coisa na lista de controle de acesso? A partir de agora, vejo que a conta do proprietário é igual ao nome de usuário de toda a minha AWS. Eu acho que a chave de acesso e a chave secreta que funciona no local também estão relacionadas à conta do proprietário.

questionAnswers(1)

yourAnswerToTheQuestion