繁体   English   中英

AWS s3从Rails应用程序访问私有存储桶URL

AWS s3 access PRIVATE bucket url from rails app

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我是RoR的新手。

我正在创建一个上传图像并将其保存在S3中的小型应用程序,用户无法将所有图像附加到zip文件中并通过电子邮件发送,以使用rubyzip gem来实现。

在本地工作正常(我遵循gem文档)

https://github.com/rubyzip/rubyzip/

但是在生产“ ZIP”操作时,我需要提供一个源文件夹(在其中保存图像),并且由于我所有的图像都保存在s3存储桶中,因此我给出了如下路径:

folder = 'https://'bucket-name'.s3.amazonaws.com/'

经过研究,我喜欢类似的案例,但是它们都不适合我,例如,我尝试了如何使用带有S3的Rails Active Storage检索附件url,它给了我“没有这样的文件或目录”

2018-11-15T00:44:27.082416+00:00 app[web.1]: I, [2018-11-15T00:44:27.082337 #4]  INFO -- : [db52fa26-32c2-4f7e-a766-7d39fd3ef062] Completed 500 Internal Server Error in 1532ms (ActiveRecord: 21.4ms)
2018-11-15T00:44:27.082915+00:00 app[web.1]: F, [2018-11-15T00:44:27.082844 #4] FATAL -- : [db52fa26-32c2-4f7e-a766-7d39fd3ef062]
2018-11-15T00:44:27.082988+00:00 app[web.1]: F, [2018-11-15T00:44:27.082916 #4] FATAL -- : [db52fa26-32c2-4f7e-a766-7d39fd3ef062] Errno::ENOENT (No such file or directory @ rb_file_s_lstat - https://bucket-name.s3.amazonaws.com):
2018-11-15T00:44:27.083054+00:00 app[web.1]: F, [2018-11-15T00:44:27.082985 #4] FATAL -- : [db52fa26-32c2-4f7e-a766-7d39fd3ef062]

我的存储桶是私有的,因此,在我提供正确的凭据之前,它不允许我访问它,这是我不知道如何在url中发送签名进行身份验证的部分。 我已经尝试过类似以下的方法,但是它总是给我带来奇怪的辛博尔

kDate = OpenSSL::HMAC.digest('sha256', "AWS4" + secret_access_key, dateStamp)
    kRegion = OpenSSL::HMAC.digest('sha256', kDate, regionName)
    kService = OpenSSL::HMAC.digest('sha256', kRegion, serviceName)
    signature = OpenSSL::HMAC.digest('sha256', kService, "aws4_request")


    puts("#{s3_base_url}?AWSAccessKeyId=#{access_key_id}
            &Expires=#{expiration_date}
            &Signature=#{signature}")

这是我打印签名时的结果

https://bucket-name.s3.amazonaws.com?AWSAccessKeyId=my-access-key
            &Expires=1542416076
            &Signature=Q�����>�9`o���r}�9��`�m��g��

附言 我还创建了一个具有管理员权限的IAM用户

谢谢,我使用红宝石2.5.1和Rails 5.2.0我与AMAZON打交道非常新,如果我的问题很明显,请原谅

1 个回复

我不确定要手动构造一个签名的URL。 我从来没有尝试过。 但是,AWS gem具有用于S3对象的presigned_url方法,它将为您构造它们。 然后,您可以使用该URL访问私有存储桶中的对象。

参见https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Object.html#presigned_url-instance_method

bucket = Aws::S3::Bucket.new bucket_name
object = bucket.object object_key
object.presigned_url(:get, expires_in: expiry)
1 通过应用程序授予对 s3 私有存储桶中用户特定图像的访问权限

我有一个 MEAN 堆栈应用程序,用户可以在其中上传图像。 目前,我将图像的 URL 存储在 mongodb 中,并将图像本身存储在指定文件夹中的文件系统中。 我读到为了可扩展性,最好将这些图像存储在 AWS 或 firebase 之类的地方,所以我决定使用 AWS。 我创建了一个存储桶,可以通过 ...

3 如何访问我的Rails应用程序的S3存储桶中的文件?

我已经成功设置了Fog,Carrierwave和Heroku,可以与我的S3存储桶配合使用来上传文件和图像。 我想要做的是允许某些用户查看上传到服务器的某些图像。 如果可以的话,几乎就像一个“文件浏览器”。 如何执行此操作以及如何安全地执行此操作? 我正在使用AWS的IAM用 ...

4 如何使用s3存储桶URL安全访问应用程序中的文件

在我的应用程序中,我们必须使用直接s3存储桶url在图标单击时在新选项卡中打开一些pdf文件,如下所示: 我觉得这有些不安全,因为用户可以看到存储桶名称, AWSAccessKeyId , Expiration和Signature 。 这仍然被认为是安全的吗? 还是有更好的方法来解决 ...

5 从AWS-S3存储桶访问我的应用程序

我已将应用程序文件上传到AWS的S3存储桶中。 这是电影搜索应用程序。 由于某种原因,页面上加载了正确的CSS,但是我无法使搜索功能正常工作。 它在我的本地环境上运行良好,但在AWS上却无法运行。 另外,我之前已将应用程序文件上传到AWS中,它们都可以正常工作。 我不确定这次出了什么问题。 这是网 ...

6 s3存储桶对象URL不是私有的

我的存储桶文件夹是私有文件夹,但是当我将单个对象的URL复制到浏览器中时(注销时),我仍然可以下载/查看文件。 我该如何预防? 这是我的存储桶策略: 我要实现的目标:将每个文件夹设为私有,除了2个名为media和static (我希望对其进行公共读取访问)的文件夹。 ...

7 允许 Ionic 应用程序使用存储桶策略访问 s3 存储桶

我有一个从 s3 存储桶获取视频的 Web 应用程序。 该存储桶具有仅允许来自某些域的访问的策略。 我现在需要一个 ionic 应用程序来访问同一个存储桶,有什么办法可以将此选项添加到策略中吗? 这是我现在的政策 我试过将file://*添加到 urls 数组,但不起作用。 ...

8 访问私有s3存储桶文件

我正在从php上传文件到s3 bucket.its上传成功,但当我检索图像时,我得到以下错误 如果我在上传文件时公开,那么我可以检索它,但我想保护免受未经授权的用户。 上传文件代码 在提出问题之前,我已经对许多网站进行了审核,但它并没有帮助我 Amazon S3查看私 ...

9 从不同的AWS帐户访问S3存储桶

我正在尝试还原数据库,这是我们测试的一部分。 备份存在于prod s3帐户上。 我的数据库在开发人员帐户中作为ec2实例运行。 谁能告诉我如何从开发人员帐户访问prod s3。 步骤:-我在产品帐户上创建了一个角色,并与开发帐户建立了可信赖的关系-我向该角色添加了策略。 { ...

10 限制对AWS上S3存储桶的访问

我将文件存储在S3存储桶中。 我想限制对文件的访问。 当前,具有该文件URL的任何人都可以访问该文件。 我想要一种仅当通过我的应用程序访问文件时才访问文件的行为。 该应用程序托管在EC2上。 以下是我可以找到的2种可能方式。 在存储桶策略中使用“引荐来源网址”键。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM