5

Dla strumienia Kinesis utworzyłem interfejs proxy API przy użyciu bramy interfejsu AWS API. Dodałem niestandardowy autoryzator używający Pythona Lambda dla proxy. Po opublikowaniu funkcji lambda i wdrożeniu interfejsu API udało mi się przetestować interfejs API za pomocą funkcji testu bramy. Mogłem zobaczyć dzienniki w chmurze, które miały szczegółowe wydruki z niestandardowej funkcji auth lambda. Po pomyślnym uwierzytelnieniu API Brama pchnął zapis do mojego strumienia Kinesis

Jednakże gdy zgłoszę tego samego API z klientem Chrome Postman, mam 500 Internal Server Error i odpowiedzi nagłówki obejmuje X-Cache → błędu z CloudFront, x -amzn-ErrorType → AuthoriserConfigurationException
AWS API Gateway Custom Authorizer AuthorizerConfigurationException

Funkcja Lambda auth zwraca zasadę, która pozwala na wykonanie żądania dla mojego API. Dokument Polityka zwrócony jest:

 
      { 
       "policyDocument": { 
       "Version": "2012-10-17", 
       "Statement": [ 
        { 
        "Action": "execute-api:Invoke", 
        "Resource": [ 
         "arn:aws:execute-api:us-east-1:1234567:myapiId/staging/POST/*" 
        ], 
        "Effect": "Allow" 
        } 
       ] 
       }, 
       "principalId": "Foo" 
      } 

Dlaczego żądanie nie z Chrome lub curl ale sam test API współpracuje z API Gateway?

+0

To w istocie oznacza, że ​​Autoryzatora nie wrócił politykę lub zwrócone nieprawidłową politykę lub zwrócone politykę unauthorizing żądanie API. kod autoryzatora nie powiodłby się z jakiegoś powodu na wypadek, gdyby polisa nie została zwrócona ... – Prabhat

Odpowiedz

1

Wyliczyłem, co było przyczyną problemu. Z funkcji python lambda zwróciłem instancję string json. Zamiast tego powinien to być obiekt JSON. To dziwne, że ta sama funkcja lambda nie popełniła błędu, gdy testowałem API z funkcji "testowej" bramki API. Ale kiedy API zostało wywołane z Internetu (curl lub chrome), nie udało się.

#return policy_string ... this is incorrect. 
return json.loads(policy_string) 
5

AuthorizerConfigurationException jest zwykle wskazówką, że bramka API nie mogła połączyć się z autoryzowanym użytkownikiem z powodu błędu uprawnień.

Upewnij się, że poprawnie skonfigurowałeś funkcję do wywoływania przez bramkę API. Łatwe resetowanie polega na usunięciu i ponownym dodaniu funkcji do autoryzatora. Konsola wyświetli monit o dodanie niezbędnych uprawnień.

+0

Hej, Bob, czy możesz nieco rozszerzyć sposób, w jaki "skonfigurowałbym moją funkcję do wywoływania przez bramkę API", proszę? – Stretch

+0

@Stretch Musisz zezwolić na bramę API, aby wywołać twoją funkcję. Zobacz [to pytanie] (http://stackoverflow.com/questions/38027414/giving-aws-api-gateway-permission-to-invoke-lambda-function-using-boto3) dla przykładu używającego AWS CLI. –

+0

[Ta strona dokumentacji zawiera więcej szczegółów] (http://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-lambda.html). Krótko mówiąc, twój api-gw musi mieć uprawnienia Lambda/Invoke. W przypadku definiowania niestandardowego autoryzatora za pomocą metody swagger należy się upewnić, że rola w autorizerCredentials ma wartość lambda/invoke i jest możliwa do przyjęcia przez api-gw (w zaufanych jednostkach). – deddu

Powiązane problemy