配置 ActiveStorage 以使用具有 IAM 角色的 S3

2023-12-21

我正在尝试配置 ActiveStorage 以使用 S3 存储桶作为存储后端,但我不想传递任何access_key_id, secret_access_key, region。相反,我想使用之前定义的 IAM 角色。提到了这样的配置here https://guides.rubyonrails.org/active_storage_overview.html#amazon-s3-service。内容如下(我已添加粗体):

如果你想使用环境变量、标准SDK配置文件、配置文件、IAM 实例配置文件或任务角色,您可以省略上例中的 access_key_id、secret_access_key 和区域键。 Amazon S3 服务支持 AWS 开发工具包文档中描述的所有身份验证选项。

但是我无法让它工作。我的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 https://docs.aws.amazon.com/sdk-for-ruby/v3/developer-guide/setup-config.html#aws-ruby-sdk-credentials-iam

您将看到以下部分:

使用 IAM 设置凭证

对于 Amazon Elastic Compute Cloud 实例,创建 AWS Identity and Access Management 角色,然后 授予您的 Amazon EC2 实例对该角色的访问权限。了解更多 有关信息,请参阅 Amazon EC2 用户指南中的 Amazon EC2 的 IAM 角色 对于 Amazon EC2 用户中的 Linux 实例或 Amazon EC2 的 IAM 角色 Windows 实例指南。

这意味着要使此身份验证方法发挥作用,您必须:

  • 在AWS上创建EC2实例
  • 创建EC2IAM Role具有写入 S3 存储桶的权限
  • 配置您的 EC2 实例,将新的 IAM 角色附加到其上

将角色附加到实例后,您的配置/存储.yml文件将如下所示:

amazon:
  service: S3
  bucket: test-stackoverflow-bucket-app
  region: "us-west-1"

请注意,region 是必需参数,如果跳过它,则会出现错误:https://github.com/aws/aws-sdk-ruby/issues/1240#issuecomment-231866239 https://github.com/aws/aws-sdk-ruby/issues/1240#issuecomment-231866239

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

配置 ActiveStorage 以使用具有 IAM 角色的 S3 的相关文章

  • 从脚本内更改自动热键托盘图标

    如何从 Autohotkey 脚本中将托盘图标更改为 my ico 例如 当脚本暂停时 为此 我在托盘菜单中提出了自己的 暂停脚本 菜单项 SingleInstance ignore Menu Tray Tip AutoCase 0 11
  • IE9-11 检测变换样式:preserve-3d

    我为一个项目制作了一个 3d 类型的菜单 自然 IE 会引起问题 因为 IE10 即使 3d 变换工作 也不支持变换样式 preserve 3d 我尝试了解决方法 通过对 3d 菜单容器的每个子元素应用变换 但至少可以说 动画看起来很糟糕
  • 我们什么时候应该在 Django 中使用“db_index=True”?

    当我们应该定义db index True在模型字段上 我正在尝试优化应用程序并且我想了解更多信息db index 什么情况下我们应该使用它 文档说使用db index True在模型字段上用于加速查找 但在存储和内存方面略有缺点 我们应该使
  • 如何制作过期/签名视频嵌入网址

    我是新来的 正在学习网络开发等等 我只知道如何将我的视频嵌入网站中 任何菜鸟都可以轻松获得源代码 他们也可以嵌入它 但在许多网站中 视频 src 均使用重定向器链接进行编码 例如 它会在一段时间后过期 在本例中是一天 我了解到这是一个签名网
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959
  • Android Espresso 单击按钮时出现错误

    我正在尝试使用 espresso 框架为 Android 应用程序编写一些 UI 测试 现在我只是检查启动屏幕上是否存在所有元素 然后尝试单击登录按钮 单击按钮时 测试由于错误而失败 我似乎无法理解为什么会发生这种情况 我的测试代码是 Ru
  • Qt 布局,在小部件大小更改后调整到最小大小

    基本上我有一个QGridLayout里面有一些小部件 最重要的是 2 个标签 我用它们将图像绘制到屏幕上 好吧 如果用户愿意 他可以更改传入图像的分辨率 从而强制标签调整大小 我们假设标签的初始大小是320x240 用户将 VideoMod
  • bash:gitolite:找不到命令

    我正在尝试使用 Gitolite 在 Gitlab 中创建一个新分支 我完成安装步骤 当我遇到 设置 gitolite 部分时 我遇到了麻烦 我跟着这个link http sitaramc github com gitolite setup
  • ASP.NET Core MVC 视图组件搜索路径

    在此处的文档中 https learn microsoft com en us aspnet core mvc views view components view aspnetcore 2 2 https learn microsoft
  • xsi:type 属性搞乱了 C# XML 反序列化

    我使用 XSD exe 根据 XML 架构 xsd 文件 自动生成 C 对象 我正在反序列化 OpenCover 输出 但其中一个部分类未正确生成 这是导致异常的行
  • If else 在 Web 网格列中

    如何在 webgrid 列中添加条件 if else grid GetHtml tableStyle table table bordered columns grid Columns grid Column RealName Name g
  • View.post(),以及当Runnables被执行时

    我最初的问题是需要知道我的根的高度和宽度View这样我就可以进行程序化的布局更改 就我的目的而言 我不一定需要在onCreate 对于我来说 以编程方式添加我的孩子就足够了View根布局完成后 因此我很乐意使用onWindowFocusCh
  • SimpleIoC - 在缓存中找不到类型:Windows.UI.Xaml.Controls.Frame

    第一次由 SimpleIoC 实例化我的 ViewModel 时 我遇到了以下错误 我相信我已经按应有的方式设置了容器 但由于某种原因 我仍然收到以下错误 任何想法或帮助将非常感激 Microsoft Practices ServiceLo
  • java'assert'和'if(){}else exit;'之间的区别

    java和java有什么区别assert and if else exit 我可以用吗if else exit代替assert 也许有点谷歌 您应该记住的主要事情是 if else 语句应该用于程序流程控制 而assert 关键字应该仅用于
  • React 错误:目标容器不是 DOM 元素

    我刚刚开始使用 React 所以这可能是一个非常简单的错误 但我们开始吧 我的html代码非常简单 load staticfiles
  • PLS-00103:遇到符号“;”当预期出现以下情况之一时:

    我正在尝试插入用户安全问题的答案 以用于密码重置功能 Ellucian 横幅 v8 提供了一个用于运行此 API 的 API 我对他们的 API 非常陌生 从下面的错误消息来看 我还远远没有正确运行它 任何帮助表示赞赏 我尝试在 Oracl
  • Keystore getEntry 在 Android 9 上返回 NULL

    c我已对存储在 Android 密钥库中的登录密码进行了加密和解密 在 Android 9 上 我观察到应用程序在尝试解密密码时崩溃 我无法重现它 但拥有 Pixel 3 的用户是崩溃的设备之一 下面是我如何从密钥库解密密码 private
  • 计算包含字母/数字的行数

    我想要实现的目标很简单 但是解释起来有点困难 我不知道在 postgres 中这是否真的可能 我处于相当基础的水平 SELECT FROM WHERE LEFT JOIN ON HAVING 等等基本的东西 我正在尝试计算包含特定字母 数字
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁
  • 如何使用 dql 从数据表中获取唯一值?

    我有一个表 其中有一列存储了各种值 我想使用 dql 从该表中检索唯一值 Doctrine Query create gt select rec school gt from Records rec gt where rec city ci

随机推荐

  • 在 macOS 中找不到 mysql 命令

    我已经安装了 MySQL dmg根据官方页面安装文件 但它返回command not found mysql当我执行时mysql命令 如何解决这个问题 MySQL 的文档说 使用软件包安装程序进行安装时 文件将安装到 usr local 中
  • setuid 与 seteuid 函数

    setuid 和 seteuid 函数有什么区别 在手册页中 这两个函数都有相似的描述 setuid DESCRIPTION setuid sets the effective user ID of the calling process
  • 如何在运行时更改 WinForms 应用程序的区域性

    我用 C 创建了 Windows 窗体程序 我在本地化方面遇到一些问题 我有两种语言的资源文件 一种是英语 另一种是法语 我想单击每个语言按钮并在运行时更改语言 但是当我点击按钮时 它不起作用 我正在使用这个代码 private void
  • 如何为 Azure AD B2C 设置用户旅程查看器

    根据Azure Active Directory B2C 收集日志 https learn microsoft com en us azure active directory b2c active directory b2c troubl
  • 您认为 Java 中最好的 CMS 是什么 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Rails 3:如何在 application.rb 中声明 Rack 中间件

    很多例子 比如这两个 如何在 Rails3 中使用机架中间件 https stackoverflow com questions 4224900 how to use rack middleware with rails3 http asc
  • VueJS 将 HTML 打印到页面

    我有一个属性 其中包含 HTML 字符串作为其属性之一 当我尝试将其打印到模板中的页面时 它实际上打印了 HTML 因此文本包含 HTML 标签 并且它本身不会被浏览器解释为 HTML 我怎样才能解决这个问题 模板 div class de
  • 无法在 Android 8 中禁用通知振动

    我试着禁用振动显示通知时 Func public static Notification buildNotifForUploaderService Context ctx String title String message Notifi
  • Pandas 数据框按日期移动列

    我有一个按日期和 ID 索引的面板数据集 看起来像这样 df pd DataFrame Date 2005 12 31 2006 03 31 2006 09 30 2005 12 31 2006 03 31 2006 06 30 2006
  • 绕过错误并继续代码

    这是我之前遇到的一个简单问题 本质上 像这样的解决方案 https stackoverflow com questions 574730 python how to ignore an exception and proceed and t
  • 在 Android 上替换 ViewPager 中的当前 Fragment

    我有一个ViewPager我必须更换第一个Fragment如果某个动作发生 public static class PagerAdapter extends FragmentStatePagerAdapter private TempCha
  • 如何添加可拖动的“文本字段”以在颤振中的图像上添加文本?

    我正在 flutter 中创建一个 Meme 生成器应用程序 我只需要知道是否有一种方法 用户本身可以在图像上添加文本并将该文本拖动到图像区域中的任何位置 这样图片看起来很有趣 我尝试过拖动框小部件 但不知道如何将其用于文本字段 这样我也可
  • SQL 2008+ NOLOCK 与 READPAST 对于报告准确性的注意事项

    了解最终的决策是业务决策 在 SQL 2008 R2 中运行的 NOLOCK 和 READPAST 之间的准确性考虑因素是什么 在与业务领域讨论变更之前 我希望能有更好的理解 我继承了许多查询 用于创建管理报告的数据视图 WITH NOLO
  • iPhone:获取 Google 地图的选定缩放级别

    当用户使用以下任一方式时 我们需要获取 MKMapView 当前选择的缩放级别 使用 Mapkit 放大或缩小 Google 地图 我们尝试过的解决方案在模拟器上运行良好 但在真实环境中运行不佳 设备 具有 iOS 3 0 1 的 iPho
  • 将 NLTK Rake 应用于 Dataframe 中的每一行

    我想应用 Rake 函数 https pypi org project rake nltk https pypi org project rake nltk 到我的数据框中的每一行 我可以将该函数单独应用于特定行 但不能将其附加到数据帧 这
  • Solr 索引中缺少 Id 字段

    我刚刚发现我的 Solr 索引不包含 id场地 并且无法获取项目 id UniqueId 存在 但这并不是真正有用 public class MyClass IndexField BuiltinFields UniqueId public
  • 在二叉搜索树中查找最小和的算法改进

    我编写了以下函数来找出二叉搜索树中任何路径的最小总和 int minSumPath TreeNode root if root NULL return 0 int sum root gt value if root gt left NULL
  • 存储 API URL 并在 Angular 中使用的最佳方式是什么

    我想将所有 API URL 存储在一个位置 即在 JSON 文件中 我想在我的应用程序中使用该 JSON 文件 i 保存 JSON 文件的最佳位置是哪里 ii 如何使用 Type 脚本文件中的 URL 我会将基本网址存储在environme
  • Elasticsearch 重新索引现有类型映射中的项目

    我向类型映射添加了一个新属性 我需要重新索引该类型的所有现有项目才能使用新属性 我应该使用哪个 API 来执行此操作 如果您要添加索引中以前从未存在过的新字段 则无需重新索引 只需使用 PUT 映射 API 添加新字段http nocf w
  • 配置 ActiveStorage 以使用具有 IAM 角色的 S3

    我正在尝试配置 ActiveStorage 以使用 S3 存储桶作为存储后端 但我不想传递任何access key id secret access key region 相反 我想使用之前定义的 IAM 角色 提到了这样的配置here h