5

Kinesisストリームの場合、AWS API Gatewayを使用してプロキシAPIを作成しました。プロキシ用のPython Lambdaを使ってカスタムオーソライザを追加しました。 ラムダ機能の公開とAPIのデプロイ後、ゲートウェイテスト機能を使用してAPIを正常にテストできました。クラウドウォッチのログを見ることができました。このログには、カスタム認証ラムダ機能からの詳細なプリントがありました。認証が成功すると、APIゲートウェイは、私はクロームポストマンクライアントから同じAPIを呼び出すときしかし、私は500内部サーバーエラーとレスポンスヘッダは、X CloudFrontをからX-キャッシュ→エラーを含んで取得

私のキネシス・ストリームにレコードをプッシュ-amzn-ErrorType→AuthorizerConfigurationException

AWS APIゲートウェイカスタムオーソライザ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

問題の原因を突き止めました。 Pythonのラムダ関数から、私はjsonの文字列インスタンスを返していました。その代わりにjsonオブジェクトでなければなりません。 APIゲートウェイの「テスト」機能からAPIをテストしたときに、同じラムダ関数がエラーにならないというのは奇妙です。しかしAPIがインターネット(カールまたはクローム)から呼び出されたとき、それは失敗しました。

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

AuthorizerConfigurationExceptionは、通常、アクセス許可エラーのためにAPIゲートウェイが認証者を呼び出せなかったことを示しています。

APIゲートウェイによって呼び出されるように関数を正しく設定してください。これを簡単にリセットするには、関数を削除し、関数をオーソライザに再追加します。コンソールは、必要な権限を追加するように指示します。

+0

Hey Bob、「APIゲートウェイによって呼び出されるように私の関数を設定する」方法を少し拡張することができますか? – Stretch

+0

@ Stretch 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

関連する問題