Serverless FrameworkでAPI GatewayにCustom Authorizationを付与する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

Serverless Frameworkを使用してAPI GatewayにCustom Authorization(カスタム認証)を追加してみました。

マネージメントコンソールからCustom Authorizationを行う手順についてはAmazon API Gateway で Custom Authorization を使ってクライアントの認可を行うに詳しいのですが、今回行なってみたところ、マネージメントコンソールの画面が変わっていたところもありました。

以下に、今回行なった手順と、変わっていた画面について書きたいと思います。

手順について

Custom Authorizationを行うためのLambda関数は予め作成済みであるものとします。今回はAmazon API Gateway で Custom Authorization を使ってクライアントの認可を行うで紹介されている関数をそのまま使用しました。

またCustom Authorizationを行うためのAPI GatewayもServerless Frameworkで作成済みであるものとします。

serverless.yml

serverless.yml内のCustom Authorizationを付与したいAPIに定義を追加します。以下のようになります。

functions:
  hello:
    handler: handler.hello
    events:
      - http:
          method: get
          path: hello
          authorizer: # 以下Custom Authorizationのために追加
            arn: arn:aws:lambda:ap-northeast-1:0000000000:function:YourFunctionName # Custom Authorizationを行うLambda関数のarn
            identitySource: method.request.header.Authorization # Custom Authorizationを行うLambda関数に渡すヘッダー名。この行を記述しないとデフォルトで「Authorization」となる。
            type: request

上記を記述した後、$ serverless deploy などでデプロイします。

実行結果の画面

デプロイできるとAPI Gatewayの画面が以下のようになっているかと思います。

リソース

オーソライザ

2つ目のキャプチャの、Lambda イベントペイロードがリクエストになっているところが以前から違っている箇所となります(というより以前と画面全体が変わっています。)
ここが「リクエスト」となっているのは、serverless.ymlの一番下の「type」で選択しているためとなります。

まとめ

以上でServerless Frameworkを使用してAPI GatewayにCustom Authorizationを付与することができました。当然ですが、Custom Authorizationを実行するLambda関数もServerless Frameworkでデプロイし、その関数をAPI Gatewayに付与させることもできるようです。(詳細が下記のドキュメントを参考にしてください)

参考サイト

ドキュメント