[英]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.