0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Lambda オーソライザー検証の最小手順

Posted at

はじめに

AWS 初学者で AWS Management Console が操作できるレベル程度の自分が Lambda へのカスタム認証を実装・検証したいと思い、下記を参考に Python でリクエストタイプのオーソライザーの検証を進めていましたが、

色々と時間を要してしまい、そのため検証完了後に必要最小限の手順を整理し、覚書として残すことにしました。
VPCも作らず確認後すぐ消す想定で、セキュリティ的なところは無視です。

構築の概要

  1. AWS Lambda を二つ作成する。一つは処理本体用で、もう一つはオーソライザー用(認証ロジック用)
  2. API Gateway に REST API を作成し、処理本体を呼び出すように設定する
  3. 前手順で作成した REST API にオーソライザーを設定し、認証されるようにする
  4. 動作確認する

1.実装(Lambda 作成)

1-a.処理本体用 Lambda の作成

以下を指定してあとはそのまま画面右下の [関数の作成] をクリック

  • オプション : 一から作成
  • 関数名 : hello2
  • ランタイム : Python 3.13

image.png

作成されて画面が切り替わったら [テスト] タブ内画面右の [テスト] をクリック、結果確認
image.png

1-b.オーソライザー用 Lambda の作成

関数名を hello2auth とし、先程と同様に [関数の作成] をクリック
作成されて画面が切り替わったら [コード] タブ上のソースコードをすべて消して、以下の Python ソースに差し替える
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html#api-gateway-lambda-authorizer-request-lambda-function-create

さらに、話を簡単にするため、今回は HTTP Header の固定値だけで認証するように、以下に書き換えて [Deploy (Ctrl+Shift+U)] をクリック

image.png

(33 行目をコメント化し、34, 35 行目を追加しています。)

実行してみれば(CloudWatch ログで確認して)わかるのですが headers のキー名 headerauth1 はすべて小文字にする必要があります。つまり引用元のこの AWS サンプルはそのままの形では動作できません。

この画面では HTTP Header を指定できずテストできないので、次へ進みます。

2.実装(API Gateway の構成1)

概要

ここでは API Gateway に REST API を構成し、処理本体用 Lambda と紐づけます。

手順

API Gateway の画面から REST API の [構築] をクリックし、適当な名前をつけて [APIを作成] をクリック
(hello2rest としました。この名前は管理上のもので REST API の URL に露出しません)
image.png

作成されたら [リソースを作成] を押し、次の画面でリソース名を入力し [リソースの作成] をクリック
(リソース名は REST API の URL 末尾になります)
image.png

次に画面右の [メソッドを作成] を押し、以下のように指定

  • メソッドタイプ : GET
  • 統合タイプ : Lambda 関数
  • Lambda 関数 : 作成済みの hello2

image.png

さらに画面をスクロールして以下を指定し、[メソッドを作成] をクリック

  • HTTP リクエストヘッダー > 名前 : headerauth1 (Lambda 内のソースと一致させる)
  • HTTP リクエストヘッダー > 必須 : ON

image.png

もとの画面に戻るので、この状態で一度画面右上の [APIをデプロイ] をクリック
表示されるダイアログで下記を指定し [デプロイ] をクリック

  • ステージ : * 新しいステージ *
  • ステージ名 : v1 (好きな名前。REST API の URL に含まれます)

ステージ名は URL 上、リソース名の上に付与されます。
https://~amazonaws.com/ステージ名/リソース名

動作確認

画面中央の [ステージ] 内ツリーを展開していき [GET] をクリックすると URL が得られる。curl でひとまず動作確認
image.png

$ curl https://~.amazonaws.com/v1/hello2
{"statusCode": 200, "body": "\"Hello from Lambda!\""}

上記のように API Gateway 経由で呼び出した時に、Lambda 単体でのテスト時と同様の結果が得られれば OK です。

3.実装(API Gateway の構成2)

概要

ここでは API Gateway に作成した REST API に対してオーソライザーを構成し、オーソライザー用 Lambda と紐付け、認証が必要な形に構成します。

手順

API Gateway の左ペインから [オーソライザー] を選び、画面右上の [オーソライザーを作成] をクリック
image.png

次の画面で以下を設定し、[オーソライザーを作成] をクリック

  • オーソライザー名 : hello2auth (好きな名前)
  • オーソライザーのタイプ : Lambda
  • Lambda 関数 : 作成済みの hello2auth
  • Lambda イベントペイロード : リクエスト
  • ID ソースタイプ : ヘッダー
  • キー : headerauth1
  • 認可のキャッシュ : OFF

image.png

ここまででオーソライザーの構成が完了。あとはこのオーソライザーを使って認証されるように設定する。

API Gateway の左ペインの [リソース] を選び、画面中央の [リソース] を展開、[メソッドリクエスト] タブ内右にある [編集] をクリック
image.png

[メソッドリクエストを編集] 画面で以下を指定し、[保存] をクリック

  • 認可 : hello2auth を選ぶ
  • HTTP リクエストヘッダー : 設定済みだが念の為展開して確認

image.png

最後に右上の [APIをデプロイ] をクリックして、デプロイを忘れず行う。

image.png

4.最終動作確認

構成後に少しタイムラグがあるようですが、curl で動作確認できます。

$ curl https://~.amazonaws.com/v1/hello2
{"message":"Unauthorized"}

$ curl https://~.amazonaws.com/v1/hello2 -H "headerauth1:headerValue1"
{"statusCode": 200, "body": "\"Hello from Lambda!\""}

$ curl https://~.amazonaws.com/v1/hello2 -H "HeaderAuth1:headerValue1"
{"statusCode": 200, "body": "\"Hello from Lambda!\""}

$ curl https://~.amazonaws.com/v1/hello2 -H "headerauth1:XXX"
{"message":"Unauthorized"}

※実際には改行コードの問題があり上記のようにきれいには出力はされません。
※呼び出し側の HTTP Header 指定は大文字小文字区別しなくて OK です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?