5

Kinesis 스트림의 경우 AWS API Gateway를 사용하여 프록시 API를 만들었습니다. 프록시에 파이썬 람다 (Python Lambda)를 사용하여 커스텀 허가자를 추가했습니다. 람다 함수를 게시하고 API를 배포 한 후 게이트웨이 테스트 기능을 사용하여 API를 성공적으로 테스트 할 수있었습니다. 나는 custom auth lambda 기능으로부터 상세한 프린트를 가진 cloudwatch의 로그를 볼 수 있었다. 인증이 성공하면 API 게이트웨이 내가 크롬 이죠 클라이언트에서 동일한 API를 호출 할 때 그러나, 나는 500 내부 서버 오류 및 응답 헤더, X CloudFront를에서 X-캐시 → 오류를 포함 얻을

내 운동성 스트림에 기록을 밀어 -amzn-ErrorType → AuthorizerConfigurationException

AWS API Gateway Custom Authorizer AuthorizerConfigurationException

람다 인증 함수는 내 API에 대한 실행 요청을 허용하는 정책을 반환합니다. 반환 된 정책 문서는 다음과 같습니다.

 
      { 
       "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" 
      } 

요청이 Chrome이나 컬링에서 실패하지만 API 게이트웨이에서 동일한 API 테스트가 제대로 작동하는 이유는 무엇입니까?

+0

그것은 기본적으로 사용자의 권한 부여는 정책이나 반환 잘못된 정책을 반환하거나 API 요청을 unauthorizing 정책을 반환하지 않았다는 것을 의미한다. 승인 코드는 정책이 반환되지 않은 경우 어떤 이유로 실패했을 것입니다 ... – Prabhat

답변

1

문제의 원인을 파악했습니다. 파이썬 람다 함수에서 JSON 문자열 인스턴스를 반환했습니다. 대신 json 객체 여야합니다. API 게이트웨이 "테스트"기능에서 API를 테스트 할 때 동일한 람다 함수가 오류가 발생하지 않았다는 것이 이상합니다. 그러나 API가 인터넷 (컬 또는 크롬)에서 호출되면 실패했습니다.

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

AuthorizerConfigurationException은 대개 사용 권한 오류로 인해 API 게이트웨이가 권한 부여자를 호출하지 못했음을 나타냅니다.

API 게이트웨이에서 호출하도록 함수를 올바르게 구성했는지 확인하십시오. 쉽게 재설정 할 수있는 권한은 제거하고 다시 권한 부여 자에게 추가하는 것입니다. 그러면 콘솔에 필요한 권한을 추가하라는 메시지가 표시됩니다.

+0

안녕하세요 Bob, "API 게이트웨이에서 호출 할 수 있도록 내 기능을 구성"하는 방법에 대해 좀 더 자세히 설명해주십시오. – Stretch

+0

@ 스트레치 API 게이트웨이가 사용자의 기능을 호출하도록 허용해야합니다. AWS CLI를 사용한 예제는 [이 질문] (http://stackoverflow.com/questions/38027414/giving-aws-api-gateway-permission-to-invoke-lambda-function-using-boto3)을 참조하십시오. –

+0

[이 문서 페이지는 자세한 내용을 자세히 설명합니다] (http://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-lambda.html). 간단히 말해, api-gw에는 Lambda/Invoke 권한이 있어야합니다. swagger를 통해 사용자 정의 권한 부여 프로그램을 정의하는 경우 authorizerCredentials의 역할에 lambda/invoke가 있고 (신뢰할 수있는 엔티티에서) api-gw가 추측 할 수 있어야합니다. – deddu