はじめに
最近、RESTでAPIを作るときにはLambda + APIGatewayで作ることが多いのですが、認可処理を作るときにはLambda オーソライザーが便利ですよね。
しばらく使ってみたので、新しく使おうと思う方向けに知っておいた方が良い知見を共有しようと思います
Lambda Authorizerとは
Amazon API Gatewayの機能で、APIのメソッドを実際に呼び出す前に認可処理用のLambdaを呼び出し、そこの結果で許可された場合のみ実際のAPIを呼び出せるというものです。
実際のAPIの処理から認可処理を分離することができるのと、APIで認可処理を再利用することができるので、とても有用です。
Lambda Authorizer以外でも認可処理をする方法は、Amazon CognitoユーザープールオーソライザーやCognito IDプールを使った方法など、他にもありますが、データベースの情報などを使って認可処理をする場合はLambda Authorizerが便利だと思います。
便利機能1: 認証キャッシュ
Lambda Authorizerは、基本的にはAPIリクエストの度に呼ばれるのですが、
同じ認証情報を使ってリクエストされた場合は、認可処理の結果もほとんどの場合同じになると考えられるので、キャッシュを使うことで認可処理の実行頻度を減らすことができます。
挙動や設定の方法については、Amazon API Gateway Lambdaオーソライザーの認証キャッシュを有効化し挙動を確認してみたの記事がとてもわかりやすいので割愛します。
キャッシュを有効化した場合のシーケンス図は以下のようになります。キャッシュの有効期間の間はLambdaAuthorizerの呼び出しがスキップできます。
注意点としては、認証情報の有効期限を延長することになるので、キャッシュ期間を長くしすぎると有効期限切れの認証情報を使って情報を取得できてしまうため、その考慮を忘れないようにしましょう。
便利機能2: オーソライザーの出力を処理側に渡せる
"Amazon API Gateway Lambda オーソライザーからの出力"の機能を使うと、Authorizerの情報を処理側に渡すことができます。
キャッシュとも組み合わせると、Authorizerでユーザーの情報などを出力するようにしておくと、処理側でユーザーの情報をあらためてデータベースに問い合わせる必要がなくなります。
例えば、下図のシーケンス図のように処理側でユーザーの情報をDBに問い合わせしているケースなどがあれば、その情報をAuthorizer側で事前取得し、出力することで問い合わせ数を減らすことができます。
ただ、出力できる情報のサイズには上限があるので注意が必要です。
まとめ
今回は、Lambda Authorizerの便利機能について紹介しました。
もし、活用されることがあれば、参考になれば幸いです。