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

标签 python amazon-s3

我有一个 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/

相关文章:

javascript - 无法返回 url 字符串,但可以通过 console.log 进行记录。不知道为什么

python - 文件上传 - 错误请求 (400)

python - 将 200 个大小为 (100*100) 的 2-d numpy 数组堆叠在 3-d numpy 数组 (200 * 100 * 100) 中

python - 使用 PCA 时出现数学域错误

python - Django:将公共(public)字段存储在父模型中

amazon-web-services - 如何使用 AWS SDK for Java V2 从 Amazon S3 存储桶读取文件

使用nltk的python对称词矩阵

ruby-on-rails - 当我尝试使用预签名的 url 上传时,AWS Ruby SDK 给我一个 "The Content-MD5 you specified was invalid."错误

amazon-web-services - AWS S3 策略通配符 ("*") 有效,但 "s3:GetObject"、 "s3:PutObject"等无效

amazon-s3 - 拍摄快照的正确方法