web-dev-qa-db-fra.com

Générer une URL signée dans S3 à l'aide de boto3

Dans Boto, j'avais l'habitude de générer une URL signée en utilisant la fonction ci-dessous.

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)

Comment faire exactement la même chose dans boto3?
J'ai cherché dans boto3 GitHub codebase mais je n'ai pas pu trouver une seule référence pour generate_url.
Le nom de la fonction a-t-il changé?

9
meadhikari

De Génération d'URL présignées :

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)

Référence de la fonction: generate_presigned_url()

13
John Rotenstein

J'obtiens une erreur InvalidRequestLe mécanisme d'autorisation que vous avez fourni n'est pas pris en charge lorsque vous essayez d'accéder à l'URL générée dans le navigateur normal - Aseem 30 avril 19 à 5:22

Comme il n'y a pas beaucoup d'informations, je suppose que vous obtenez un problème de version de signature, sinon cela aidera peut-être quelqu'un d'autre! : P

Pour cela, vous pouvez importer Config depuis botocore: -

from botocore.client import Config

puis obtenir le client en utilisant cette configuration et en fournissant la version de signature en tant que "s3v4"

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