从 boto3 生成 AWS HTTP 签名

JBe*_*rdo 4 python boto amazon-web-services botocore boto3

我正在使用boto3 尚不支持的AWS Transcribe 流authorization服务,因此要发出 HTTP/2 请求,我需要使用“AWS Signature Version 4”手动设置标头

我找到了一些示例实现,但我希望只调用 boto3/botocore 使用相同配置对象实现的任何函数。

就像是

    session = boto3.Session(...)
    auth = session.generate_signature('POST', '/stream-transcription', ...)
Run Code Online (Sandbox Code Playgroud)

有朝这个方向的指示吗?

Dun*_*dan 6

与大多数其他编程语言的 AWS 开发工具包相反,boto3/botocore尚不提供使用“AWS 签名版本 4”签署任意请求的功能。然而,至少已经有一个开放的功能请求:https://github.com/boto/botocore/issues/1784

在此功能请求中,还讨论了现有的替代方案。一个是第三方 Python 库aws-requests-auth,它提供了一个薄包装器botocorerequests用于签署 HTTP 请求。看起来像下面这样:

import requests
from aws_requests_auth.boto_utils import BotoAWSRequestsAuth

auth = BotoAWSRequestsAuth(aws_host="your-service.domain.tld",
                           aws_region="us-east-1",
                           aws_service="execute-api")
response = requests.get("https://your-service.domain.tld",
                        auth=auth)
Run Code Online (Sandbox Code Playgroud)

功能请求中提出的另一种选择是自行实现必要的粘合代码,如以下要点所示: https: //gist.github.com/rhboyd/1e01190a6b27ca4ba817bf272d5a5f9a