После серии долгих часов работы с транскрипцией AWS у меня появилась новая ошибка с использованием Почтальона:
<AccessDeniedException> <Message>Unable to determine service/operation name to be authorized</Message> </AccessDeniedException>
Однако я не знаю, в чем проблема. Я попытался Google это, но ошибка, кажется, происходит также в AWS Lambda. Но я работаю с AWS Транскрипцией. Может кто-нибудь проверить, в чем проблема?
Мой пример GET-запроса:
https://transcribestreaming.us-east-1.amazonaws.com/medical-stream-transcription-websocket?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=MYACCESSKEYID%2F20200404%2Fus-east-1%2Ftranscribe%2Faws4_request&X-Amz-Date=20200404T171802Z&X-Amz-Expires=300&X-Amz-SignedHeaders=host&language-code=en-US&media-encoding=pcm&sample-rate=16000&specialty=PRIMARYCARE&type=DICTATION&X-Amz-Signature=5f5f0a5d336e524b335245b6e83945d3057ec3905a9ae2d2ca709b77cce5478f
Я намеренно заменил X-Amz-Credential на MYACCESSKEYID в целях безопасности.
X-Amz-Credential
Возможно две ошибки:
1) Запрос «https: //» подключается к порту по умолчанию 443. Это приводит к ошибке «Невозможно определить имя службы / операции для авторизации». Пожалуйста, явно используйте порт: 8443.
2) Ваш клиент неправильно обрабатывает обновление websocket. В первом запросе на открытие соединения ваш клиент должен инициировать обновление websocket, включив несколько заголовков, как указано в разделе «Включение заголовков запроса WebSocket» в https://docs.aws.amazon.com/transcribe/latest/dg/websocket-med.html#websocket -response-med
Пример в curl:
curl --include --no-buffer \ --header "Connection: Upgrade" \ --header "Upgrade: websocket" \ --header "Host: transcribestreaming.us-east-1.amazonaws.com:8443" \ --header "Origin: http://localhost:3000" \ --header "Sec-WebSocket-Key: tEfHvBSx8jqQyZgCNrhI3w" \ --header "Sec-WebSocket-Version: 13" \ "https://transcribestreaming.us-east-1.amazonaws.com:8443/medical-stream-transcription-websocket?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=MYCREDENTIAL&X-Amz-Date=20200406T211542Z&X-Amz-Expires=60&X-Amz-Signature=MYSIGNATURE&X-Amz-SignedHeaders=host&language-code=en-US&media-encoding=pcm&sample-rate=16000&specialty=PRIMARYCARE&type=DICTATION"
При успешном запросе клиент получает «101 протокол переключения». Соединение установлено, и затем вы можете продолжить отправку аудиокадров, как описано в https://docs.aws.amazon.com/transcribe/latest/dg/websocket-med.html#websocket -streaming-request-med
Похоже, вы пытаетесь подключиться к конечной точке веб-сокета Amazon Transcribe Medical. При просмотре вашего запроса GET выясняется, что вам не хватает номера порта 8443, из-за которого ваш запрос не перенаправляется на конечную точку веб-сокета.
https://docs.aws.amazon.com/transcribe/latest/dg/websocket-med.html#websocket -streaming-request-med описывает пример создания двунаправленного запроса для расшифровки конечной точки медицинского потока.