如何将秘密文件推送到 EC2(在 AWS 上)Ruby on Rails 应用程序?

如何将秘密文件推送到 EC2(在 AWS 上)Ruby on Rails 应用程序?

如何使用带有弹性豆茎的亚马逊网络服务将秘密文件推送到 EC2 Ruby on Rails 应用程序?

我将文件添加到 git 存储库,并推送到 github,但我想将我的秘密文件保留在 git 存储库之外。我正在使用以下方式部署到 aws:

git aws.push

.gitignore 中有以下文件:

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

通过此链接,我尝试将 S3 文件添加到我的部署中: http://docs.amazonwebservices.com/elasticbeanstalk/latest/dg/customize-containers.html

引用该链接:

示例代码片段

以下示例从 Amazon S3 存储桶下载一个 zip 文件并将其解压到 /etc/myapp 中:

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

按照这些说明,我将文件上传到 S3 存储桶,并将以下内容添加到.elasticbeanstalk .ebextensions 目录中的 private.config 文件中:

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

该 config.tar.gz 文件将解压到:

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

但是,部署应用程序时,S3 主机上的 config.tar.gz 文件从未被复制或提取。我仍然收到无法找到 database.yml 的错误,并且 EC2 日志没有配置文件的记录,以下是错误消息:

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

答案1

闻起来像是打字错误。

您链接的说明在相关部分中指出:

部署应用程序时自定义 AWS Elastic Beanstalk 环境需要两个步骤:

  1. 创建带有扩展的配置文件.配置并将其放入.ebextensions源包的顶级目录中。您可以在源包中拥有多个配置文件.ebextensions目录。这些文件按字母顺序执行。例如,.ebextensions/01run.config 在 .ebextensions/02do.config 之前执行。

但是,您说您将.config文件放在了目录中.elasticbeanstalk。请尝试修复目录名称。

答案2

将敏感文件存储在 S3 中并自动将其复制到您的 Beanstalk 实例是可能的(并且很容易)。

创建 Beanstalk 应用程序时,会自动创建一个 S3 存储桶。此存储桶用于存储应用程序版本、日志、元数据等。

分配给您的 Beanstalk 环境的默认值aws-elasticbeanstalk-ec2-role具有对此存储桶的读取权限。

因此,您需要做的就是将敏感文件放入该存储桶(存储桶的根目录或您想要的任何目录结构),然后创建一个.ebextension配置文件将它们复制到您的 EC2 实例。

以下是一个例子:

# .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

此处记录了这一点:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/https-storingprivatekeys.html

答案3

您可以运行 bash 脚本并使用命令行实用程序(例如 s3cmd)从 S3 下载所需的所有文件。

我已经写了一系列文章,介绍了 AWS Elastic Beanstalk 的定制。

有关从 S3 下载文件的详细信息,请参阅http://www.hudku.com/blog/security-credentials-setup-customizing/#aws-credentials-setup.sh

答案4

尝试将您的源的源设置为/var/app/ondeck。IIRC,脚本在那里运行,一旦一切完成,文件夹将重命名为,/var/app/current因此您可能会解压到即将被替换的版本。

相关内容