Como os arquivos secretos devem ser enviados para um aplicativo Ruby on Rails do EC2 (na AWS)?

2

Como os arquivos secretos devem ser enviados para um aplicativo Ruby on Rails do EC2 usando serviços da Web da Amazon com seu beanstalk elástico?

Eu adiciono os arquivos a um repositório git, e eu envio para o github, mas eu quero manter meus arquivos secretos fora do repositório git. Estou implantando para o aws usando:

git aws.push

Os seguintes arquivos estão no .gitignore:

/config/database.yml
/config/initializers/omniauth.rb
/config/initializers/secret_token.rb

Seguindo este link, tentei adicionar um arquivo S3 à minha implantação: link

Citando a partir desse link:

Example Snippet

The following example downloads a zip file from an Amazon S3 bucket and unpacks it into /etc/myapp:

sources:  
    /etc/myapp: http://s3.amazonaws.com/mybucket/myobject 

Seguindo essas instruções, enviei um arquivo para um bucket do S3 e adicionei o seguinte a um arquivo private.config no diretório .elasticbeanstalk .ebextensions:

sources:
  /var/app/current/: https://s3.amazonaws.com/mybucket/config.tar.gz

Esse arquivo config.tar.gz será extraído para:

/config/database.yml
/config/initializers/omniauth.rb
/config/initializers/secret_token.rb

No entanto, quando o aplicativo é implementado, o arquivo config.tar.gz no host S3 nunca é copiado ou extraído. Ainda recebo erros que o database.yml não pôde ser localizado e o log do EC2 não possui registro do arquivo de configuração, aqui está a mensagem de erro:

Error message:
  No such file or directory - /var/app/current/config/database.yml
Exception class:
  Errno::ENOENT
Application root:
  /var/app/current
    
por nikc 18.12.2012 / 04:58

4 respostas

3

Cheira como um erro de digitação.

As instruções que você vinculou para dizer, na parte relevante:

Customizing your AWS Elastic Beanstalk environment when you deploy your application requires two steps:

  1. Create a configuration file with the extension .config and place it in an .ebextensions top-level directory of your source bundle. You can have multiple configuration files in your .ebextensions directory. These files are executed in alphabetical order. For example, .ebextensions/01run.config is executed before .ebextensions/02do.config.

No entanto, você disse que colocou o arquivo .config em um diretório .elasticbeanstalk . Tente corrigir o nome do diretório.

    
por 18.12.2012 / 05:06
2

É possível (e fácil) armazenar arquivos confidenciais no S3 e copiá-los para suas instâncias do Beanstalk automaticamente.

Quando você cria um aplicativo do Beanstalk, um bucket do S3 é criado automaticamente. Este intervalo é usado para armazenar versões de aplicativos, registros, metadados, etc.

O aws-elasticbeanstalk-ec2-role padrão atribuído ao seu ambiente do Beanstalk tem acesso de leitura a este intervalo.

Portanto, tudo o que você precisa fazer é colocar seus arquivos confidenciais nesse intervalo (na raiz do intervalo ou em qualquer estrutura de diretórios desejada) e criar um arquivo .ebextension config para copiá-los para suas instâncias do EC2 .

Aqui está um exemplo:

# .ebextensions/sensitive_files.config

Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Auth:
          type: "s3"
          buckets: ["elasticbeanstalk-us-east-1-XXX"] # Replace with your bucket name
          roleName: 
            "Fn::GetOptionSetting": 
              Namespace: "aws:autoscaling:launchconfiguration"
              OptionName: "IamInstanceProfile"
              DefaultValue: "aws-elasticbeanstalk-ec2-role" # This is the default role created for you when creating a new Beanstalk environment. Change it if you are using a custom role

files:
  /etc/pki/tls/certs/server.key: # This is where the file will be copied on the EC2 instances
    mode: "000400" # Apply restrictive permissions to the file
    owner: root # Or nodejs, or whatever suits your needs
    group: root # Or nodejs, or whatever suits your needs
    authentication: "S3Auth"
    source: https://s3-us-west-2.amazonaws.com/elasticbeanstalk-us-east-1-XXX/server.key # URL to the file in S3

Isso está documentado aqui: link

    
por 29.09.2016 / 17:11
1

Você pode executar um script bash e ter todos os arquivos dos quais você precisa fazer o download do S3 usando um utilitário de linha de comando, como o s3cmd.

Eu escrevi uma série de artigos que abordam a personalização do AWS Elastic Beanstalk.

Para obter detalhes sobre o download de arquivos do S3, consulte link

    
por 11.04.2013 / 12:54
0

Tente definir a origem das fontes para /var/app/ondeck . IIRC, o script é executado lá e, depois que tudo estiver pronto, a pasta é renomeada para /var/app/current , então você provavelmente está descompactando a compilação que está prestes a ser substituída.

    
por 28.02.2014 / 05:23