繁体   English   中英

如何在python中使用临时令牌从s3存储桶下载文件

[英]how to download a file from s3 bucket with a temporary token in python

我有一个django网络应用程序,我想允许它从我的s3桶下载文件。 这些文件不公开。 我有一个IAM策略来访问它们。 问题是,我不想下载Django应用程序服务器上的文件,然后为它服务下载客户端上。 这就像下载两次。 我希望能够直接在django应用程序的客户端上下载。 另外,我认为在http请求中传递我的IAM凭证是不安全的,所以我认为我需要使用临时令牌。 我读到: http//docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html

但我只是不明白如何动态生成临时令牌。 一个python解决方案(也许使用boto)将不胜感激。

使用Boto(2),如果您的IAM策略具有适当的权限,那么生成有时间限制的下载URL应该非常容易。 我正在使用这种方法从私有S3存储桶向登录用户提供视频。

from boto.s3.connection import S3Connection
conn = S3Connection('<aws access key>', '<aws secret key>')
bucket = conn.get_bucket('mybucket')
key = bucket.get_key('mykey', validate=False)
url = key.generate_url(86400)

这将为给定存储桶中的密钥foo生成下载URL,该URL有效24小时(86400秒)。 如果没有validate=False Boto 2将首先检查密钥实际存在于桶中,如果不存在,则会抛出异常。 使用这些服务器控制的文件通常是不必要的额外步骤,因此在示例中validate=False


在Boto3中,API完全不同

s3 = boto3.client('s3')

# Generate the URL to get 'key-name' from 'bucket-name'
url = s3.generate_presigned_url(
    ClientMethod='get_object',
    Params={
        'Bucket': 'mybucket',
        'Key': 'mykey'
    },
    expires=86400
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM