首页 > 解决方案 > 未能为 Rails 项目设置凭证以使用具有 IAM 角色的 S3

问题描述

我正在使用 ActiveStorage 将文件上传到 S3 存储桶。如果有人熟悉 Heroku Bucketeer 插件,我用它一段时间来测试 ActiveStorage 以及从存储桶上传和下载文件的工作。

由于某些原因,我必须使用 IAM 角色将凭证设置为仅具有存储桶名称和区域的新 Amazon S3 存储桶。在 ActiveStorage RubyOnRails 指南中它说:

如果您想使用环境变量、标准 SDK 配置文件、配置文件、IAM 实例配置文件或任务角色,您可以省略上面示例中的 access_key_id、secret_access_key 和区域键。

但是我得到

(Aws::Sigv4::Errors::MissingCredentialsError)
- :access_key_id and :secret_access_key
- :credentials
- :credentials_provider

我的 storage.yml 看起来像这样:

amazon:   
  service: S3   
  bucket: <%= ENV['BUCKET_NAME'] %>   
  region: <%= ENV['AWS_REGION'] %>

config.active_storage.service = :amazon在 development.rb 和 production.rb 中都写过

我已经尝试将 ActiveStorage 配置为将 S3 与 IAM 角色一起使用,但徒劳无功。

我正在使用 Rails 5.2.4.1、Ruby 2.6.3 和gem 'aws-sdk'Gemfile

标签: ruby-on-railsamazon-web-servicesamazon-s3amazon-iamrails-activestorage

解决方案


特别是在开发工作时,您需要提供一个access_key_id和一个secret_access_key. 您可以通过输入来做到这一点storage.yml

amazon:
  service: S3
  access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %> 
  secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
  bucket: <%= ENV['BUCKET_NAME'] %>   
  region: <%= ENV['AWS_REGION'] %>

或者,确保您已设置正确的环境变量,以启用对 AWS 凭证的隐式查找,如AWS指定的那样。也就是设置环境变量AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY


推荐阅读