Lambda インテグレーションまたは Lambda オーソライザーを使用して API Gateway HTTP API からのアクセス権限エラーをトラブルシューティングする方法を教えてください。

所要時間2分
0

API ゲートウェイ HTTP API で AWS Lambda 関数を呼び出そうとすると、「内部サーバーエラー」メッセージが表示されます。Amazon CloudWatch Logs に、「インテグレーションを呼び出す権限がありません」または「オーソライザーを呼び出す権限がありません」というエラーが表示されます。

簡単な説明

API ゲートウェイ HTTP API が Lambda 呼び出し権限なしで Lambda 関数を呼び出そうとすると、API ゲートウェイから「内部サーバーエラー」メッセージが返されます。HTTP API の CloudWatch ロギングを有効にした場合、API Gateway は次のエラーメッセージのいずれかをアクセスログに記録します。

  • Lambda インテグレーションを使用した HTTP API の場合:integrationError。 「インテグレーションまたは API Gateway に設定された IAM ロールには、インテグレーションを呼び出す権限がありません。権限を確認して、やり直してください」
  • Lambda オーソライザーを使用する HTTP API の場合:authorizerError。 「オーソライザーまたは API Gateway に設定された IAM ロールには、オーソライザーを呼び出す権限がありません。権限を確認して、やり直してください」

これらのエラーを解決するには、次のいずれかの操作を行います。

API Gateway コンソールまたは AWS コマンドラインインターフェイス (AWS CLI) を使用して、リソースベースの Lambda 呼び出し権限を HTTP API に追加します。

-または-

HTTP API に関数を呼び出す権限を付与する AWS ID およびアクセス管理 (IAM) 実行ロールを設定します。詳細については、「API を呼び出すための API Gateway 権限モデル」を参照してください。

HTTP API で Lambda 統合を使用する際のエラーのトラブルシューティングの詳細については、「HTTP API Lambda 統合に関する問題のトラブルシューティング」を参照してください。

解決策

**注:**AWS CLI コマンドの実行中にエラーが発生した場合は、最新の AWS CLI バージョンを使用しているかどうかを確認してください

API Gateway コンソールを使用して、Lambda インテグレーションを含む HTTP API に Lambda 呼び出し権限を追加します。

  1. API ゲートウェイコンソールを開きます。
  2. **API ** ペインで、HTTP API の名前を選択します。
  3. 左側のナビゲーションペインで、「統合」を選択します。
  4. 統合を管理」を選択します。
  5. Lambda インテグレーションの名前を探し、Lambda インテグレーションの名前の横にある [編集] ボタンを選択します。
  6. 呼び出し権限」で、「API Gateway に権限を付与」を選択して Lambda 関数を呼び出します。
    または、API ゲートウェイが Lambda 関数を呼び出すために使用できる IAM ロール ARN を指定します。
  7. [保存] を選択し、次に [API をデプロイ] を選択して、API に Lambda 呼び出し権限を追加します。

AWS CLI を使用して Lambda インテグレーションを使用して HTTP API に Lambda 呼び出し権限を追加します

以下の追加権限の AWS CLI コマンドを実行します。

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

注:****関数名の値を Lambda 関数の ARN に置き換えます。**ソース ARN **の値を API のソース ARN に置き換えてください。statement-id の値を、同じポリシー内の他のステートメントと区別するステートメント識別子に置き換えます。

API Gateway コンソールを使用して、Lambda オーソライザーを使用して HTTP API に Lambda 呼び出し権限を追加します。

  1. API ゲートウェイコンソールを開きます。
  2. **API ** ペインで、HTTP API の名前を選択します。
  3. 左側のナビゲーションペインで、[認証] を選択します。
  4. [認証の管理] を選択します。
  5. Lambda オーソライザーの名前を探し、Lambda オーソライザーの名前の横にある[編集] ボタンを選択します。
  6. 呼び出し権限」で、「API Gateway に Lambda 関数を呼び出す権限を自動的に付与」を選択します。
    または、API ゲートウェイが Lambda 関数を呼び出すために使用できる IAM ロール ARN を指定します。
  7. [保存] を選択し、次に [API をデプロイ] を選択して、API に Lambda 呼び出し権限を追加します。

AWS CLI を使用して、Lambda オーソライザーを使用して HTTP API に Lambda 呼び出し権限を追加します

以下の追加権限の AWS CLI コマンドを実行します。

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

注:****関数名の値を Lambda 関数の ARN に置き換えます。**ソース ARN **の値を API のソース ARN に置き換えてください。statement-id の値を、同じポリシー内の他のステートメントと区別するステートメント識別子に置き換えます。


コメントはありません

関連するコンテンツ