web-dev-qa-db-ja.com

boto3を使用してS3で署名付きURLを生成する

Botoでは、以下の関数を使用して署名付きURLを生成していました。

import boto
conn = boto.connect_s3()
bucket = conn.get_bucket(bucket_name, validate=True)
key = bucket.get_key(key)
signed_url = key.generate_url(expires_in=3600)

Boto3でまったく同じことをするにはどうすればよいですか?
boto3 GitHub codebase を検索しましたが、generate_urlへの単一の参照が見つかりませんでした。
関数名は変更されましたか?

9
meadhikari

From Generating Presigned URLs

_import boto3
import requests

# Get the service client.
s3 = boto3.client('s3')

# Generate the URL to get 'key-name' from 'bucket-name'
url = s3.generate_presigned_url(
    ClientMethod='get_object',
    Params={
        'Bucket': 'bucket-name',
        'Key': 'key-name'
    }
)

# Use the URL to perform the GET operation. You can use any method you like
# to send the GET, but we will use requests here to keep things simple.
response = requests.get(url)
_

関数リファレンス: generate_presigned_url()

13
John Rotenstein

InvalidRequestというエラーが表示される通常のブラウザで生成されたURLにアクセスしようとすると、指定した認証メカニズムがサポートされません– Aseem Apr 30 '19 at 5:22

あまり情報がないので、署名バージョンの問題が発生していると思いますが、そうでない場合は他の誰かを助けるでしょう! :P

このため、botocoreから構成をインポートできます。

from botocore.client import Config

そして、この設定を使用してクライアントを取得し、署名バージョンを「s3v4」として提供します

s3 = boto3.client('s3', config=Config(signature_version='s3v4'))
0
Aakash Jaswal