Ruby on rails 无法将Rails项目的凭据设置为使用具有IAM角色的S3

Ruby on rails 无法将Rails项目的凭据设置为使用具有IAM角色的S3,ruby-on-rails,amazon-web-services,amazon-s3,amazon-iam,rails-activestorage,Ruby On Rails,Amazon Web Services,Amazon S3,Amazon Iam,Rails Activestorage,我正在使用ActiveStorage将文件上载到S3存储桶。如果有人熟悉Heroku Bucketer插件,我用它测试了一段时间ActiveStorage,并将文件上传和下载到bucket中 出于某些原因,我必须使用IAM角色将凭据设置为新的AmazonS3 bucket,其中只包含bucket名称和区域。在ActiveStorage RubyOnRails指南中,它说: 如果要使用环境变量、标准SDK配置文件、配置文件、IAM实例配置文件或任务角色,可以省略上面示例中的access\u key

我正在使用ActiveStorage将文件上载到S3存储桶。如果有人熟悉Heroku Bucketer插件,我用它测试了一段时间ActiveStorage,并将文件上传和下载到bucket中

出于某些原因,我必须使用IAM角色将凭据设置为新的AmazonS3 bucket,其中只包含bucket名称和区域。在ActiveStorage RubyOnRails指南中,它说:

如果要使用环境变量、标准SDK配置文件、配置文件、IAM实例配置文件或任务角色,可以省略上面示例中的access\u key\u id、secret\u access\u key和region key

不管我得到什么

(Aws::Sigv4::Errors::MissingCredentialsError)
- :access_key_id and :secret_access_key
- :credentials
- :credentials_provider
my storage.yml看起来像这样:

amazon:   
  service: S3   
  bucket: <%= ENV['BUCKET_NAME'] %>   
  region: <%= ENV['AWS_REGION'] %>
amazon:
服务:S3
桶:
地区:
我已经在development.rb和production.rb中编写了
config.active\u storage.service=:amazon

我已经试过了,但没有成功


我使用的是Rails 5.2.4.1、Ruby 2.6.3,在Gemfile中有
gem'aws sdk'
,尤其是在进行开发时,您需要提供
access\u key\u id
secret\u access\u key
。您可以通过放入
存储.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'] %>
amazon:
服务:S3
访问密钥id:
机密\u访问\u密钥:
桶:
地区:

或者,确保设置了正确的环境变量,以启用aws凭据的隐式查找,如所指定的。也就是说,设置环境变量
AWS\u-ACCESS\u-KEY\u-ID
AWS\u-SECRET\u-ACCESS\u-KEY
,尤其是在开发中工作时,您需要提供
ACCESS\u-KEY\u-ID
SECRET\u-ACCESS\u-KEY
。您可以通过放入
存储.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'] %>
amazon:
服务:S3
访问密钥id:
机密\u访问\u密钥:
桶:
地区:

或者,确保设置了正确的环境变量,以启用aws凭据的隐式查找,如所指定的。也就是说,使用ACCESS和SECRET\u ACCESS KEY yes设置环境变量
AWS\u ACCESS\u KEY\u ID
AWS\u SECRET\u ACCESS\u KEY

。但是,我被命令在不使用这两个角色的情况下编写它。据我所知,您可以在使用IAM角色时忽略这两个角色。IAM角色用于使用分配给该角色的策略提供对某些服务的访问。但是,您必须以某种方式指出应用于您的应用程序的角色。如果在Heroku上部署,应用程序无法知道或验证特定角色。我不是为Heroku部署,我只是举了一个ActiveStorage工作的例子。那么,如果我想连接到S3而不使用secret\u access\u key和access\u key,我该怎么办呢?好吧,你真的不能,除非你在AWS内部使用像Lambda这样的特定服务进行部署。因此,对于本地开发或任何其他部署方法,您应该按照我的回答中的规定提供环境变量。@GiorgiMeladze我的回答是否足够有用,可以使用access和secret_access key yes向上投票/将其标记为Answeed。但是,我被命令在不使用这两个角色的情况下编写它。据我所知,您可以在使用IAM角色时忽略这两个角色。IAM角色用于使用分配给该角色的策略提供对某些服务的访问。但是,您必须以某种方式指出应用于您的应用程序的角色。如果在Heroku上部署,应用程序无法知道或验证特定角色。我不是为Heroku部署,我只是举了一个ActiveStorage工作的例子。那么,如果我想连接到S3而不使用secret\u access\u key和access\u key,我该怎么办呢?好吧,你真的不能,除非你在AWS内部使用像Lambda这样的特定服务进行部署。因此,对于本地开发或任何其他部署方法,您应该按照我的回答中的规定提供环境变量。@GiorgiMeladze我的回答是否有足够的帮助,让它投票/标记为已回答?