12

Kinesis ストリームの場合、AWS API Gateway を使用してプロキシ API を作成しました。プロキシに python Lambda を使用してカスタムオーソライザーを追加しました。ラムダ関数を発行して API をデプロイした後、Gateway Test 機能を使用して API を正常にテストできました。カスタム認証ラムダ関数からの詳細な出力があったログをcloudwatchで見ることができました。認証が成功した後、API Gateway はレコードを Kinesis ストリームにプッシュしましたが、

Chrome Postman クライアントから同じ API を呼び出すと、500 Internal Server Errorが発生し、応答ヘッダーにX-Cache → Error from cloudfront、x-amzn-ErrorType → AuthorizerConfigurationException が含まれます

Lambda 認証関数は、API の実行リクエストを許可するポリシーを返します。返されたポリシー ドキュメントは次のとおりです。

            {
              "policyDocument": {
                "バージョン": "2012-10-17",
                "声明": [
                  {
                    "Action": "execute-api:Invoke",
                    "リソース": [
                      「arn:aws:execute-api:us-east-1:1234567:myapiId/staging/POST/*」
                    ]、
                    「効果」:「許可」
                  }
                ]
              }、
              "principalId": "フー"
            }

Chrome または curl からのリクエストが失敗するのに、同じ API テストが API Gateway からは正常に機能するのはなぜですか?

4

4 に答える 4

6

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

#return policy_string ... this is incorrect.
return json.loads(policy_string)
于 2016-07-28T15:19:43.930 に答える
0

私の場合、適切にフォーマットされた IAM ポリシー ドキュメントを返していませんでした。Authorizer 関数は、リクエストからいくつかのパラメーターを取得する方法について間違った仮定を行っていました。デフォルトの結果は適切なポリシーではありませんでした (これは私の特定のケースでした)。CloudWatch ログ サービスを使用してデバッグすることができました。従来のログ記録の指示は関数コードから来ています。

于 2019-01-14T15:48:53.780 に答える