【问题标题】:Is it possible to access a private s3 bucket objects without using a pre-signed URL? (boto3, python)是否可以在不使用预签名 URL 的情况下访问私有 s3 存储桶对象? (boto3,蟒蛇)
【发布时间】:2017-11-17 11:09:36
【问题描述】:

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

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

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

【问题讨论】:

    标签: python amazon-s3 boto


    【解决方案1】:

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

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

    只需几行代码即可创建预签名的 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 只需很少的努力,而且实际上不需要处理时间。我不明白为什么这会给你带来不便。 (而且它比使用数据库做任何事情都容易!)

    【讨论】:

    • 我认为生成的 URL 过多会降低我的系统速度,所以我正在考虑另一种解决方法。
    • 嗯?上面的代码运行需要几毫秒,甚至不使用任何网络或磁盘。没有比这更好的了!
    • @JohnRotenstein 当我使用 generate_presigned_url 函数时,它还会附加我的“访问密钥 ID”作为文件的下载 URL,有什么方法可以让我的存储桶保持私有并且我的访问密钥 ID 不会公开还有吗?
    • @jahmed31 可以公开您的访问密钥。但是,您应该保护您的秘密访问密钥(用于生成预签名 URL,但未显示在预签名 URL 中)。这就像用户名和密码之间的区别。
    猜你喜欢
    • 2021-02-25
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 2020-05-26
    • 1970-01-01
    相关资源
    最近更新 更多