Generate Signed URL in S3 using boto3

I get error InvalidRequestThe authorization mechanism you have provided is not supported when trying to access the url generated in normal browser – Aseem Apr 30 '19 at 5:22

As there isn't much info i am assuming you are getting signature version issue, if not maybe it will help someone else ! :P

For this you can import Config from botocore:-

from botocore.client import Config

and then get the client using this config and providing signature version as 's3v4'

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

From Generating Presigned URLs:

import boto3
import requests
from botocore import client


# Get the service client.
s3 = boto3.client('s3', config=client.Config(signature_version='s3v4'))

# 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'
    },
    ExpiresIn=3600 # one hour in seconds, increase if needed
)

# 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)

Function reference: generate_presigned_url()