Я использую приведенную ниже архитектуру, чтобы разрешить доступ к серверной службе, размещенной локально через API-шлюз.
AWS Account 1 [ API Gateway -> VPC Link -> NLB1 ] =>
AWS Account 2 [ NLB2 in Direct connection to on-premises ] =>
On-premises [ backend service with Signature V4 authentication enabled ]
Я тестирую с помощью клиента Postman, запросы доходят до серверной службы, но с ошибкой ошибка - Missing Authentication Token
. Я обнаружил, что заголовок авторизации был отброшен на шлюзе API, поэтому я сопоставил заголовок авторизации с другим именем X-Authorization
в Lambda Authorizer, а затем снова сопоставил его с заголовком авторизации в запросе интеграции и отправил в бэкэнд-сервис. Это решило ошибку Missing Authentication Token
. Теперь я вижу ниже ошибку с проверкой SigV4 на бэкэнд-сервисе -
<InvalidSignatureException>
<Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.</Message>
</InvalidSignatureException>
Глядя на подписанные заголовки между почтальоном -> Шлюз API, API-шлюз -> NLB -> Бэкэнд-сервис, я обнаружил, что имя хоста изменен с конечной точки шлюза API на конечную точку NLB, я предполагаю, что это причина того, что подпись не совпадает.
- Правильно ли использовать тот же заголовок авторизации, полученный от клиента к шлюзу API, на нашем бэкэнде служба для проверки клиента?
- Как аутентифицировать / авторизовать запросы от клиента на бэкэнд-сервис, полученный через API-шлюз?
- Можем ли мы получить номер клиента AWS на бэкэнд-сервисе, он нам нужен для внутреннего использования.