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.