2017-05-15 25 views
1

私が達成したいのは、ファイル(ex.imageまたはpdf)を見るためのリンクを生成することです。アイテムはURL(https://[bucket].s3.amazonaws.com/img_name.jpg)でアクセスできません。私は個人的で公的ではないと思いますか? (私はバケツの所有者ではありませんが、彼は私にaccess_keyとsecret_keyを与えました)boto3を使ってs3でURLにアクセスするには?

今のところ、このコードでファイルをダウンロードするだけです。

s3.Bucket('mybucket').download_file('upload/nocturnes.png', 'dropzone/static/pdf/download_nocturnes.png') 

私はS3上の画像にアクセスしたいので、私は、HTMLの上に置くことができ、私がアクセスし、秘密鍵を使用して、それを見ることができます?。助けることができる人に感謝します!

+0

ファイルを取得するために大量のトラフィックがある場合は、ドンこの直接ファイルを取得しないでください。 – mootmoot

+0

@mootmootなぜですか?検索はどのように行うべきですか? –

+0

CDNを使用するための調査オプション。クラウドフロントを使用していないAWSからのデータ転送には、AWSが$ 0.09/GBを請求しているためです。 – mootmoot

答えて

4

これは、generate_presigned_url機能を使用して事前に署名されたURLを使用して行うことができます。事前署名されたURLには有効期限が必要です。私は最大許容時間に関する文書を見つけることができませんでした。ここでは一例です:公共のオブジェクトに対してgenerate_presigned_urlを使用するため、資格情報を追加し、署名部分を行うにはしたくない人のために

url = s3.generate_presigned_url('get_object', 
           Params={ 
            'Bucket': 'mybucket', 
            'Key': 'upload/nocturnes.png', 
           },         
           ExpiresIn=3600) 
print url 
+0

ありがとう、これは私が探していたものです。私は最終的にs3から自分のサイトに画像を置くことができます。しかし、私は新しい問題を抱えています。私はjsライブラリ(pdf.js)を使ってamazonから自分のサイトにpdfファイルを見ています。しかし、それは「クロスオリジン要求がブロックされました:同じオリジンポリシーがリモートリソースの読み込みを許可していません」というメッセージを生成しますが、もう1つの質問です。 –

+1

@jordanm好奇心が強い場合に備えて、すべてのAWS地域で動作する最大時間は604800秒(7日間)です。古い地域では、URLがSignature Version 2で署名されている場合は2038年以降の有効期限をサポートしているように見えますが、7日はすべての場所で有効な値です。 URLに署名したアクセスキーIDが無効/削除されている場合、そのキーで署名されたURLも使用できなくなり、アクセスキーのローテーションがベストプラクティスであるため、署名されたURLはキーローテーションポリシーが許す限り持続します。 –

0

、私が見つけた最良の解決策はまだgenerate_presigned_urlを使用することですClient.Config.signature_versionbotocore.UNSIGNEDに設定する必要があります。

次のコードは、署名のないパブリックリンクを返します。

config.signature_version = botocore.UNSIGNED 
boto3.client('s3', config=config).generate_presigned_url('get_object', ExpiresIn=0, Params={'Bucket': bucket, 'Key': key}) 

boto3リポジトリに関連する議論は、以下のとおりです。

関連する問題