Eu tenho um aplicativo AWS Elastic Beanstalk Rails que estou configurando por meio do script de configuração para extrair alguns arquivos de um bucket S3. Quando inicio o aplicativo, continuo recebendo o seguinte erro nos logs (o nome do bucket foi alterado por segurança ):
Failed to retrieve https://s3.amazonaws.com/my.bucket/bootstrap.sh: HTTP Error 403 : <?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message>
Arquivo de configuração:
packages:
yum:
git: []
files:
/opt/elasticbeanstalk/hooks/appdeploy/pre/01a_bootstrap.sh:
mode: "00755"
owner: root
group: root
source: https://s3.amazonaws.com/my.bucket/bootstrap.sh
O ambiente do Elastic Beanstalk é configurado com a aws-elasticbeanstalk-ec2-role
função IAM, como é a instância. Esta função tem a seguinte política:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:Get*",
"s3:List*"
],
"Resource": "arn:aws:s3:::my.bucket/*"
}
]
}
E o bucket S3 tem a seguinte política:
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "Stmt1371012493903",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<account #>:role/aws-elasticbeanstalk-ec2-role"
},
"Action": [
"s3:List*",
"s3:Get*"
],
"Resource": "arn:aws:s3:::my.bucket/*"
}
]
}
O que preciso alterar para conceder acesso às minhas instâncias do EC2 ao meu bucket S3?
Se o acesso for entre contas, verifique se não está relacionado aos cabeçalhos da ACL, conforme mencionado aqui: /programming//a/34055538/1736679 (mais informações neste segmento de problema: https://github.com/aws/aws -cli / Issues / 1674 )
Verifique também o ambiente / usuário do qual você está executando para ver se não há Chaves substituíveis (1AWS_ACCESS_KEY1, etc) em
/etc/environment
ou~/.aws/credentials
fonte