使用 python boto3 生成带有 v4 签名的 S3 预签名 URL

Zug*_*dud 5 python amazon-s3

以下不起作用:

从 boto 3 文档:

http://boto3.readthedocs.io/en/latest/guide/s3.html#generating-presigned-urls

这是我的带有占位符存储桶和键值的脚本:

import boto3
import requests
from botocore.client import Config

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

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

print url
response = requests.get(url)
print response
Run Code Online (Sandbox Code Playgroud)

S3 以 403 响应:

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>B5681E888657E2A1</RequestId>
<HostId>
FMS7oPPOXt4I0KXPPQwdBx2fyxze+ussMmy/BOWLVFusWMoU2zAErE08ez34O6VhSYRvIYFm7Bs=
</HostId>
</Error>
Run Code Online (Sandbox Code Playgroud)

Kyl*_*yle 4

您需要向 boto3 客户端提供 aws 凭证。文档在这里

如果您在访问 AWS 上的凭证时需要帮助,您可以查看此处

import boto3
client = boto3.client(
    's3',
    aws_access_key_id=ACCESS_KEY,
    aws_secret_access_key=SECRET_KEY,
    aws_session_token=SESSION_TOKEN,
)

# Or via the Session
session = boto3.Session(
    aws_access_key_id=ACCESS_KEY,
    aws_secret_access_key=SECRET_KEY,
    aws_session_token=SESSION_TOKEN,
)
Run Code Online (Sandbox Code Playgroud)