是否可以在不使用预签名 URL 的情况下访问私有 s3 存储桶对象? (boto3, python)

Is it possible to access a private s3 bucket objects without using a pre-signed URL? (boto3, python)

我的代码通过生成 预签名 url 并传递生成的 URL 到 PDF.js 以在浏览器中查看它。

我遇到了一个问题,我每次访问 PDF 文件时都必须生成预签名 url,我觉得这很麻烦。我现在的解决方案是将预签名 URL 保存到数据库中并检查它是否已过期。如果已经过期,则生成一个新的URL,否则使用现有的URL。

我的问题:是否可以在不使用预签名的情况下访问对象 URL?

如果您打算提供 URL 以便网络浏览器可以打开文件,那么预签名 URL 绝对是最好的方法。

如果您想通过 API 调用访问,则可以使用标准凭据调用 Amazon S3 API 来访问私有对象,但这在网络浏览器中不起作用。

预签名 URL 可以用几行代码创建——比在数据库中存储 URL 更快更简单。

我看到您正在使用 Python,所以这里有一些来自 how to generate url from boto3 in amazon web services 的示例代码:

import boto3
s3Client = boto3.client('s3')
s3Client.generate_presigned_url('get_object', Params = {'Bucket': 'www.mybucket.com', 'Key': 'hello.txt'}, ExpiresIn = 100)

此代码不调用 AWS!它是根据提供的参数在本地生成的。我通过在 运行 generate_presigned_url() 之前断开我的计算机与网络的连接来测试它,它立即返回了结果。

因此,生成带符号的 URL 只需很少的努力,实际上没有处理时间。我不明白为什么这会给您带来不便。 (而且这比使用数据库做任何事情都容易得多!)