Obtendo arquivos de um bucket s3 usando credenciais de função do IAM

5

Eu estou tentando recuperar alguns arquivos de um bucket s3 privado para uma instância ec2 do beanstalk de localização do sistema de arquivos, mas sem sucesso.

Eu criei um bloco chamado dev-config contendo um arquivo chamado local.properties .

Eu criei uma política do IAM

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::dev-config",
                "arn:aws:s3:::dev-config/*"
            ]
        }
    ]
}

E associou essa política a uma função do IAM, que por sua vez está associada à instância do EC2. Confirmei que posso buscar arquivos do bucket s3 usando o aws-cli sem fornecer credenciais adicionais. isto é      aws s3 ls s3: //dev-config/local.properties

Para o meu projeto, adicionei o seguinte arquivo:

.ebextensions / 01_files.config

"/usr/share/tomcat7/lib/local.properties" :
    mode: "000777"
    owner: ec2-user
    group: ec2-user
    source: http://s3.amazonaws.com/dev-config/local.properties

Eu também tentei algumas variações do URL de origem

    source: http://dev-config.s3.amazonaws.com/dev-config/local.properties
    source: http://dev-config.s3.amazonaws.com/local.properties
    source: s3://dev-config/local.properties

E eu também tentei adicionar um atributo authentication sem sucesso (parece não haver documentação sobre possíveis valores para autenticação).         autenticação: S3Access

Nenhuma das abordagens funcionou até agora.

Em alguns casos, recebo mensagens de acesso negado nos registros:

    <?xml version="1.0" encoding="UTF-8"?>
      <Error><Code>AccessDenied</Code><Message>Access Denied</Message>
      <RequestId>blahblah</RequestId>
      <HostId>blahblah</HostId>
    </Error>

Em outros casos, tive mensagens de erro no próprio arquivo local.properties                                  %código%              O intervalo que você está tentando acessar deve ser endereçado usando o terminal especificado. Por favor, envie todas as solicitações futuras para este endpoint.              dev-config              dev-config.s3.amazonaws.com
             blahlblah              blahlblah           

Conseguiu fazer isso funcionar?

    
por diffa 13.03.2015 / 11:37

2 respostas

4

Depois de dar uma olhada nesta resposta para Usando propriedades do ambiente com arquivos nos arquivos de configuração do beanstalk elástico Adicionei a seguinte seção ao .ebextensions/01_files.config

Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Access:
          type: S3
          roleName: aws-elasticbeanstalk-ec2-role
          buckets: dev-config

e atualizou o URL do s3 para incluir o nome do intervalo no host, para que o arquivo final fosse assim:

"/usr/share/tomcat7/lib/local.properties" :
    mode: "000777"
    owner: ec2-user
    group: ec2-user
    source: https://dev-config.s3.amazonaws.com/local.properties

Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Access:
          type: S3
          roleName: aws-elasticbeanstalk-ec2-role
          buckets: dev-config

Isso permitiu que a instância do ecnel beanstalk ec2 usasse a função do IAM associada a ela para acessar o bucket s3 contendo os arquivos.

PS: para que essa configuração funcione, verifique se você concedeu acesso ao intervalo do S3 em questão para o aws-elasticbeanstalk-ec2-role principal. Você pode obter o ARN do console do IAM.

    
por 25.03.2015 / 01:15
1

Tente com este IAM. Isso funciona para mim.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::dev-config",
                "arn:aws:s3:::dev-config/*"
            ]
        }
    ]
}

Se você precisa ter permissões de leitura / gravação / exclusão, precisa de algo assim:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                 "arn:aws:s3:::dev-config",
                 "arn:aws:s3:::dev-config/*"
            ]
        }
    ]
}

Atenciosamente.

    
por 23.03.2015 / 16:24