AWS Lambda 統合または Lambda 認証を使用した API ゲートウェイ HTTP API からのアクセス権限エラーのトラブルシューティング方法を教えてください。
最終更新日: 2021 年 5 月 28 日
API ゲートウェイ HTTP API で AWS Lambda 関数を呼びだすと、「内部サーバーエラー」メッセージが表示されます。Amazon CloudWatch Logs に、「統合を呼びだす権限がありません」または「認証を呼びだす権限がありません」というエラーが表示されます。これらのエラーの原因は何ですか、どのように解決できますか?
簡単な説明
API ゲートウェイ HTTP API が Lambda 呼び出しアクセス許可なしで Lambda 関数を呼び出そうとした場合 、API ゲートウェイは内部サーバーエラーメッセージを返します。HTTP API の CloudWatch ログをアクティブにすると 、API Gateway もアクセスログに次のいずれかのエラーメッセージを記録します。
Lambda 統合での HTTP API の CloudWatch エラーメッセージ
「 IntegrationError 」:「統合または API ゲートウェイで設定された IAM ロールには、統合を呼びだすアクセス許可がありません。権限を確認して、もう一度試してください。」
Lambda 認証を使用した HTTP API の CloudWatch エラーメッセージ
「 AuthorizerError 」:「認証または API ゲートウェイに設定された IAM ロールには、認証者を呼びだすためのアクセス許可がありません。権限を確認して、もう一度試してください。」
これらのエラーを解決するには、次のいずれかの操作を行います。
API Gateway コンソールまたは AWS コマンドラインインターフェイス (AWS CLI) を使用して、リソースベースの Lambda 呼び出しアクセス許可を HTTP API に追加します。
- または -
関数を呼びだすアクセス権限を HTTP API に付与する AWS Identity and Access Management (IAM) 実行ロールを設定します。詳細については、 API を呼びだすための API Gateway アクセス権限モデルをご参照ください。
HTTP API で Lambda 統合を使用する場合のエラーのトラブルシューティングの詳細については、HTTP API Lambda 統合に関する問題のトラブルシューティングを参照してください。
解決方法
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、最新の AWS CLI バージョンを使用していることを確認してください。
API ゲートウェイコンソールを使用して Lambda 統合で HTTP API に Lambda 呼び出しアクセス許可を追加するには
1. API Gateway コンソールの [HTTP APIs] ペインで、作成した API の名前を選択します。
2. 左側のナビゲーションペインで、[統合] を選択します。
3. [ 統合の管理 ] を選択します。
4. Lambda 統合の名前を探します。次に、Lambda インテグレーションの名前の横にある [編集 ] ボタンを選択します。
5. [呼び出しアクセス許可] で、[ API ゲートウェイのアクセス許可を付与] を選択して Lambda 関数を呼び出します。-または-API ゲートウェイが Lambda 関数を呼びだすために使用できる IAM ロール ARN を提供します。
6. [Save] (保存) を選択します。次に、[API をデプロイ] を選択して、Lambda 呼び出しアクセス許可を API に追加します。
AWS CLI を使用して Lambda 統合で HTTP API に Lambda 呼び出しアクセス許可を追加するには
次のアクセス許可が追加された AWS CLI コマンドを実行します。
重要: 関数名の値を、Lambda 関数の ARN に置き換えます。Source-arn 値を API のソース ARN に置き換えます。Statement-id 値を、同じポリシー内の他のステートメントと区別するステートメント識別子に置き換えます。
aws lambda add-permission \
--function-name "$YOUR_FUNCTION_ARN" \
--source-arn "arn:aws:execute-api:$API_GW_REGION:$YOUR_ACCOUNT:$API_GW_ID/*/$METHOD/$RESOURCE" \
--principal apigateway.amazonaws.com \
--statement-id $STATEMENT_ID \
--action lambda:InvokeFunction
API ゲートウェイコンソールを使用して Lambda 認証を使って HTTP API に Lambda 呼び出しアクセス許可を追加するには
1. API Gateway コンソールの [HTTP APIs] ペインで、作成した API の名前を選択します。
2. 左ナビゲーションペインで、[Authorizers] を選択します。
3. [ 承認者を管理 ] を選択します。
4. Lambda 認証者の名前を見つけます。次に、Lambda 認証者の名前の横にある [編集 ] ボタンを選択します。
5. [ 呼び出しアクセス許可] で、[API ゲートウェイのアクセス許可を自動的に付与する] を選択して、Lambda 関数を呼び出します 。-または-API ゲートウェイが Lambda 関数を呼びだすために使用できる IAM ロール ARN を提供します。
6. [Save] (保存) を選択します。次に、[API をデプロイ] を選択して、Lambda 呼び出しアクセス許可を API に追加します。
AWS CLI を使用して Lambda 認証を使って HTTP API に Lambda 呼び出しアクセス許可を追加するには
次のアクセス許可が追加された AWS CLI コマンドを実行します。
重要: 関数名の値を、Lambda 関数の ARN に置き換えます。Source-arn 値を API のソース ARN に置き換えます。Statement-id 値を、同じポリシー内の他のステートメントと区別するステートメント識別子に置き換えます。
aws lambda add-permission \
--function-name "$YOUR_FUNCTION_ARN" \
--source-arn "arn:aws:execute-api:$API_GW_REGION:$YOUR_ACCOUNT:$API_GW_ID/authorizers/$AUTHORIZER_ID" \
--principal apigateway.amazonaws.com \
--statement-id $STATEMENT_ID \
--action lambda:InvokeFunction