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

Obl*_*der 4 python amazon-s3 boto

我的代码通过生成一个预签名的URL来访问Amazon S3存储桶(非公共)中的PDF文件,并将生成的URL传递到PDF.js中以在浏览器中查看它。

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

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

Joh*_*ein 9

如果您打算提供一个URL,以便Web浏览器可以打开该文件,则预签名URL绝对是最好的方法。

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

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

我看到您使用的是Python,因此这是一些示例代码,这些代码来自如何在亚马逊网络服务中从boto3生成url

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

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

因此,生成签名的URL花费很少的精力,并且实际上不需要处理时间。我不明白为什么这会给您带来不便。(这比对数据库做任何事都容易!)

  • ??上面的代码需要花费几毫秒的时间才能运行,甚至不使用任何网络或磁盘。你不会比这更好! (3认同)