【问题标题】:Reading zip files from Amazon S3 using pre-signed url without knowing object key and bucket name在不知道对象键和存储桶名称的情况下,使用预签名 url 从 Amazon S3 读取 zip 文件
【发布时间】:2021-11-11 02:56:01
【问题描述】:

我有一个存储在 Amazon S3 中的受密码保护的 zip 文件,我需要从 python 程序中读取该文件,从中提取 csv 文件并读取到数据帧。最初,我使用对象键和存储桶名称。

import zipfile
import boto3
import io
import pandas as pd

s3 = boto3.client('s3', aws_access_key_id="<acces_key>",
                        aws_secret_access_key="<secret_key>", region_name="<region>")
s3_resource = boto3.resource('s3', aws_access_key_id="<acces_key>",
                                    aws_secret_access_key="<secret_key>", region_name="<region>")


obj = s3.get_object(Bucket="<bucket_name>", Key="<obj_key>")
with io.BytesIO(obj["Body"].read()) as tf:

    # rewind the file
    tf.seek(0)

    with zipfile.ZipFile(tf, mode='r') as zipf:
        df = pd.read_csv(zipf.open('<file_name.csv>', pwd=b'<password>'), sep='|')
        print(df)

但由于一些安全问题,我将无法再执行此操作。也就是说,我不会有对象键和存储桶名称。而且由于我不会有钥匙,我不会有 file_name.csv 要么。我所拥有的只是一个预签名的 URL。是否可以使用预签名的 URL 读取 zip 文件?我该怎么做?

【问题讨论】:

    标签: python-3.x amazon-web-services amazon-s3 boto3


    【解决方案1】:

    pre-signed URL 包含下载文件所需的所有信息。但为此,您不需要使用 boto3。相反,您应该使用常规 python 工具从 Internet 访问 download files(或 here),其中 url 将是您的预签名网址。

    【讨论】:

    • 谢谢。再来一问。是否只能从预签名的 URL 下载文件?我可以使用预签名 URL 将文件读取到变量中吗?
    • @elliot 您可以将它们读取到BytesIO 缓冲区,而不是物理保存到您的硬盘。
    猜你喜欢
    • 2021-02-25
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 2019-01-27
    • 2020-05-27
    • 1970-01-01
    • 2017-11-17
    相关资源
    最近更新 更多