我有一些图像被不断地输入到一个私有的S3存储桶中,然后我需要在Blazor应用程序中显示这些图像。
我已经根据本指南中的说明设置了一个基于VPC的接入点和一个VPC端点。这样做的目的是,只要代码在VPC中执行,我就可以自由访问S3存储桶的内容。
我试图在一个简单的img标签中显示图像:
<img src="https://my-access-point-12345678910.s3-accesspoint.us-east-1.amazonaws.com/img/image1.jpg">
我现在遇到的问题是,每次我试图访问url时,无论是在网站上嵌入图像时,还是通过浏览器访问时,我都会遇到错误消息:
<Code>InvalidRequest</Code>
<Message>The authorization mechanism you have provided is not supported. Please use Signature Version 4.</Message>
根据关于Signature Version 4的AWS文档,我需要使用签名密钥发出HTTP请求,以获得我需要的图像。这是不可行的,因为我需要的图像数量太多了,并且逐个执行GET请求的速度太慢了。
我也尝试过创建一个完全公共的接入点,但遇到了同样的问题
我该如何绕过这件事,或者我错过了什么?
通常的方法是:
- 将图像存储在Amazon S3存储桶中
- 将bucket保持为私有,即不添加bucket策略
- 是否不将bucket限制为只能通过接入点访问(不确定您是否在这样做(
- 当您的应用程序确定允许用户访问私人对象时,生成一个AmazonS3预签名URL,这是一个有时间限制的URL,可提供对私人对象的临时访问
- 在图像标签中使用预先签名的URL,例如
<img src="pre-signed-url-here">
这样,最终用户将能够通过预先签名的URL访问S3中的图像。