首页 文章

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

提问于
浏览
2

我的代码通过生成 pre-signed url 来访问Amazon S3存储桶(非公共)中的PDF文件,并将生成的URL传递给PDF.js以在浏览器中查看它 .

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

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

1 回答

  • 4

    如果您打算提供一个URL,使Web浏览器可以打开该文件,那么预先签名的URL肯定是最好的方法 .

    如果您想通过API调用进行访问,那么您可以使用标准凭据调用Amazon S3 API来访问私有对象,但这不适用于Web浏览器 .

    可以使用几行代码创建预签名URL - 比在数据库中存储URL快得多,也简单得多 .

    我看到're using Python, so here'的一些示例代码来自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)
    

    此代码 does not make a call to AWS! 它是根据提供的参数在本地生成的 . 我在运行 generate_presigned_url() 之前断开了我的计算机与网络的测试,并立即返回结果 .

    因此,生成签名URL只需要很少的工作量,并且实际上没有处理时间 . 我不明白为什么这对你来说不方便 . (这比使用数据库做任何事都容易!)

相关问题