gpt4 book ai didi

ruby-on-rails - 配置 ActiveStorage 以将 S3 与 IAM 角色一起使用

转载 作者:行者123 更新时间:2023-12-03 14:33:09 26 4
gpt4 key购买 nike

我正在尝试将 ActiveStorage 配置为使用 S3 存储桶作为存储后端,但是我不想传递任何 access_key_id , secret_access_key , region .相反,我想使用之前定义的 IAM 角色。提到了这样的配置here .它写着(我加了粗体):

If you want to use environment variables, standard SDK configuration files, profiles, IAM instance profiles or task roles, you can omit the access_key_id, secret_access_key, and region keys in the example above. The Amazon S3 Service supports all of the authentication options described in the AWS SDK documentation.



但是我无法让它工作。我的 storage.yml看起来与此类似:
amazon:
service: S3
bucket: bucket_name
credentials:
role_arn: "linked::account::arn"
role_session_name: "session-name"

我跑了 rails active_storage:install ,应用生成的迁移并设置 config.active_storage.service = :amazon在我的应用程序的配置中。

问题是,当我尝试保存文件时,出现意外错误:

u = User.first
s = StringIO.new
s << 'hello,world'
s.seek 0
u.csv.attach(io: s, filename: 'filename.csv')

Traceback (most recent call last):
2: from (irb):3
1: from (irb):3:in `rescue in irb_binding'
LoadError (Unable to autoload constant ActiveStorage::Blob::Analyzable, expected /usr/local/bundle/gems/activestorage-5.2.2/app/models/active_storage/blob/analyzable.rb to define it)

我正在使用 Rails 5.2.2。

最佳答案

您是在 AWS EC2 实例内还是在您的机器本地尝试此代码?

如果您检查 AWS 中的身份验证方法:https://docs.aws.amazon.com/sdk-for-ruby/v3/developer-guide/setup-config.html#aws-ruby-sdk-credentials-iam

您将看到以下部分:

Setting Credentials Using IAM

For an Amazon Elastic Compute Cloud instance, create an AWS Identity and Access Management role, and then give your Amazon EC2 instance access to that role. For more information, see IAM Roles for Amazon EC2 in the Amazon EC2 User Guide for Linux Instances or IAM Roles for Amazon EC2 in the Amazon EC2 User Guide for Windows Instances.



这意味着要使此身份验证方法起作用,您必须:
  • 在 AWS 上创建 EC2 实例
  • 创建 EC2 IAM 角色 具有写入 S3 存储桶的权限
  • 配置您的 EC2 实例,将新的 IAM 角色附加到它

  • 将角色附加到实例后,您的 配置/存储.yml 文件将如下所示:
    amazon:
    service: S3
    bucket: test-stackoverflow-bucket-app
    region: "us-west-1"

    请注意,区域是一个必需参数,如果跳过它,您将得到一个错误: https://github.com/aws/aws-sdk-ruby/issues/1240#issuecomment-231866239

    恐怕这在本地不起作用,使用 active_storage您必须在本地设置 access_key_id , secret_access_key值。

    关于ruby-on-rails - 配置 ActiveStorage 以将 S3 与 IAM 角色一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55188016/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com