Conceder acesso de leitura da função EC2 IAM ao bucket S3

10

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-rolefunçã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?

digno
fonte

Respostas:

6

Na sua instância do EC2, você também precisará recuperar as credenciais temporárias nos metadados da instância:

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<your-iam-role-name>

Você deve usar o acesso fornecido e a chave secreta para acessar seu bucket do S3.

Alain CELESTE
fonte
1
Quando você faz isso através dos SDKs da AWS para o idioma específico de um aplicativo, o SDK cuida internamente do SDK para obter as credenciais temporárias e atualizá-las com base em intervalos de tempo específicos.
whokares
2
Como você usa a chave secreta e de acesso para acessar o bucket S3? Você tem um exemplo? Cheers
Céline Aussourd 19/03/2015
0

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/environmentou~/.aws/credentials

Efren
fonte