使用boto3在S3中生成签名URL

时间:2018-06-27 07:33:30

标签: amazon-web-services amazon-s3 boto boto3

在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的单个引用。
函数名称是否已更改?

2 个答案:

答案 0 :(得分:13)

来自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()

答案 1 :(得分:0)

我收到错误InvalidRequest,当尝试访问在普通浏览器中生成的url时,不支持您提供的授权机制– Aseem,19年4月30日,5:22

由于没有太多信息,我假设您正在获取签名版本问题,如果没有,也许它会对其他人有所帮助! :P

为此,您可以从botocore导入Config:-

from botocore.client import Config

,然后使用此配置获取客户端并提供签名版本为“ s3v4”

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