ruby-on-rails - 未能为 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
解决方案
特别是在开发工作时,您需要提供一个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_ID
和AWS_SECRET_ACCESS_KEY
推荐阅读
- mediawiki - 如何在模板参数中传递管道
- javascript - How to embed a webpack bundled react app to another site
- javascript - 具有“严格动态”的外部脚本哈希需要脚本标签上的“完整性”属性?
- reactjs - 使用更少的文本传递道具
- python - 空间复杂性——重新分配和返回参数,而不是创建新变量来返回
- teradata - Teradata:我需要检查表中的行数,如果计数大于 1,我需要运行更新查询
- python - 抓取由搜索/身份验证生成的页面
- excel - 宏在两个用户表单之间切换时第二次挂起显示用户表单
- swift - Swift:按下按钮时的 UITextField
- java - 二维数组中的双中位数计算