我有一个 Django 网络应用程序,我想让它从我的 s3 存储桶下载文件。 这些文件是不公开的。我有一个访问它们的 IAM 策略。 问题是我NOT 想在django 应用程序服务器上下载文件,然后将其提供给客户端下载。这就像下载两次。我希望能够直接在django app的客户端下载。 另外,我认为在 http 请求中传递我的 IAM 凭证是不安全的,所以我认为我需要使用临时 token 。 我读: http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html
但我只是不明白如何即时生成临时 token 。 python 解决方案(可能使用 boto)将不胜感激。
最佳答案
使用 Boto (2),如果您的 IAM 策略具有适当的权限,生成限时下载 URL 应该真的很容易。我正在使用这种方法从私有(private) 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)
这将为给定存储桶中的 key foo
生成一个下载 URL,有效期为 24 小时(86400 秒)。如果没有 validate=False
,Boto 2 将首先检查 key 是否确实存在于存储桶中,如果不存在,将抛出异常。对于这些服务器控制的文件,这通常是一个不必要的额外步骤,因此示例中的 validate=False
在 Boto3 the API is quite different :
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
)
关于python - 如何在 python 中使用临时 token 从 s3 存储桶下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39051581/