2016-08-20 4 views
0

私はdjangoウェブアプリケーションを持っています。私はs3バケットからファイルをダウンロードできるようにしたいと思います。 ファイルは公開されていません。私はそれらにアクセスするためのIAM方針を持っています。 問題は私が行うことですは、djangoアプリケーションサーバー上でファイルをダウンロードし、それをクライアントにダウンロードして提供したいと考えています。それは2回のダウンロードのようなものです。私はdjangoアプリのクライアントで直接ダウンロードできるようにしたいと思います。 また、HTTPリクエストでIAM認証情報を渡すのが安全だとは思わないので、一時的なトークンを使用する必要があると思います。 私は読む: http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.htmlPythonで一時的なトークンを使ってs3バケットからファイルをダウンロードするには

しかし、私はちょうどその場で一時的なトークンを生成する方法を理解していない。 Pythonの解決策(おそらくbotoを使用しています)に感謝します。

+1

https://www.whitneyindustries.com/aws/2014/:これらのサーバ管理されたファイルで、それは多くの場合、不必要な余分なステップ、Boto3 the API is quite differentでこれ例でvalidate=False


です11/16/boto-plus-s3-plus-sts-tokens.html –

+0

@NehalJWani実際にダウンロードしたファイルには、AWSAccessKeyが表示されていないというエラーが表示されます。 URLにAWSAccessKeyを渡し、ヘッダーにトークンを渡しました。 – max

答えて

4

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を生成し、それはそれは24時間で、86400秒のために有効です。なしvalidate=False Boto 2はキーが実際にバケットに存在するかどうかをチェックし、そうでない場合は例外をスローします。

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 
) 
+0

ありがとう。 "検証"は上書きを意味しますか? – max

+0

@maxいいえ、これはダウンロード用URLです。 validate(デフォルトは 'True')を省略すると、boto2は実際にキーが存在するかどうかをチェックし、バケットにキーが含まれていない場合は例外をスローします。 –

+0

「マイキー」とは何ですか? mykeyをファイル名で置き換えてみましたが、ダウンロードできませんでした。 – max

関連する問題