Estoy trabajando con el servicio de transmisión de AWS Transcribe que boto3 aún no admite, por lo que para realizar solicitudes HTTP/2, necesito configurar manualmente el encabezado de authorization con "AWS Signature Version 4"
Encontré una implementación de ejemplo, pero esperaba simplemente llamar a cualquier función que boto3/botocore haya implementado usando el mismo objeto de configuración.
Algo como
session = boto3.Session(...) auth = session.generate_signature('POST', '/stream-transcription', ...)¿Algún indicador en esa dirección?
¿Revisaste este SDK? Parece muy reciente, pero podría hacer lo que necesita.
https://github.com/awslabs/amazon-transcribe-streaming-sdk/tree/master
Parece que maneja la firma: https://github.com/awslabs/amazon-transcribe-streaming-sdk/blob/master/amazon_transcribe/signer.py
A diferencia de los SDK de AWS para la mayoría de los otros lenguajes de programación, boto3 / botocore aún no ofrecen la funcionalidad para firmar solicitudes arbitrarias utilizando "AWS Signature Version 4". Sin embargo, al menos ya hay una solicitud de función abierta para eso: https://github.com/boto/botocore/issues/1784
En esta solicitud de función, también se analizan las alternativas existentes. Una es la biblioteca de Python de terceros aws-requests-auth , que proporciona un envoltorio delgado alrededor botocore y requests para firmar solicitudes HTTP. Eso se parece a lo siguiente:
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)Otra alternativa presentada en la solicitud de función es implementar el código de pegamento necesario por su cuenta, como se muestra en la siguiente esencia:https://gist.github.com/rhboyd/1e01190a6b27ca4ba817bf272d5a5f9a .
No he probado esto, pero es probable que pueda lograrlo siguiendo esta prueba de unidad SigV4:
https://github.com/boto/botocore/blob/master/tests/unit/test_auth_sigv4.py
Tenga en cuenta que esto construye una solicitud utilizando el asistente botocore.awsrequest.AWSRequest . Es probable que deba investigar para averiguar cómo enviar la solicitud HTTP real (quizás con httpsession.py )