在AWS中将AWS密钥存储在哪里?

时间:2019-07-05 06:38:53

标签: ruby-on-rails aws-sdk

database.yml是从bashrc读取AWS密钥的正确位置吗? database.yml听起来仅是数据库配置的地方。是否可以在我的Rails应用程序中读取来自bashrc的AWS配置的更合适的地方?

2 个答案:

答案 0 :(得分:0)

绝对。配置诸如AWS之类的东西的标准位置位于config/initializers内部。您可以在其中创建一个名为aws.rb的文件。

app/
bin/
config/
|__ initializers/
    |__ aws.rb

在此文件中,您可以使用bashr中的环境变量配置AWS设置

Aws.config.update({
   credentials: Aws::Credentials.new('your_access_key_id', 'your_secret_access_key')
})

此目录中的文件是在应用启动时执行的,因此此配置将在您的应用启动后即开始处理请求之前立即执行。

注意到AWS SDK for Ruby将自动搜索特定的环境变量以进行自我配置也可能很有用。如果您使用的是这种方法,并且在bashrc中设置了以下环境变量

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

然后,您无需在Rails应用程序中任何其他代码即可配置AWS。查看更多详细信息here

答案 1 :(得分:0)

从5.2版开始

Rails 5.2引入了encrypted credentials的概念。基本上,从Rails 5.2开始,在config/credentials.yml.enc中初始化应用程序时会生成一个加密的凭证文件。该文件是加密的,因此可以推送到您的源代码管理工具。在初始化应用程序时还会生成一个master.key文件,可用于解密凭据文件并对其进行更改。

因此,可以将AWS的凭据添加为:

aws:
  access_key_id: 123
  secret_access_key: 345

这些键可以在您的应用中以Rails.application.credentials.aws[:secret_access_key]的形式访问。其他敏感配置,例如正在使用的其他外部服务的凭据,也可以添加到此配置中。 Check out this blog by Marcelo Casiraghi了解更多详情。

Pre Rails 5.2

Rails 5.2之前没有凭证系统的概念。您可以通过两种方式尝试提出一种解决方案来存储您的配置。

A。您可以创建YAML文件来从头开始定义配置。

  • 创建一个名为my_config.yml的文件并将其放在config文件夹中。路径:config/my_config.yml
  • YAML格式向文件添加所需的任何配置(上面针对AWS进行了描述)
  • application.rb中进行更改以如下所示在初始化期间加载此文件:
  APP_CONFIG = YAML.load(ERB.new(File.new(File.expand_path('../my_config.yml', __FILE__)).read).result)[Rails.env] rescue {}
  • 使用这种方法,您将可以对以上定义的AWS配置使用APP_CONFIG['aws']['access_key_id']。对于此用例,强烈建议为开发和生产环境使用单独的配置文件。生产文件可能不应该签入版本控制以确保安全。

B。另一种方法是使用一些gem管理诸如railsconfig/config

这样的配置

注意:要回答有关将此配置存储在database.yml中的问题,强烈建议不要这样做。 database.yml是用于存储与数据库相关的配置的配置文件。关注点分离在扩展任何应用程序时确实有帮助,因此,建议将此类配置放在单独的文件中,该文件可以独立维护,而无需依赖数据库配置。