概要
- lambdaとAPI Gatewayを使ってAPIキー認証を使った認証付きAPIを作ってみたので方法をまとめる。
情報
- 筆者はMacOSの端末を使っている。
方法
lambdaの準備
- 下記の情報でlambda関数を作成する。
- 関数の種別:一から作成
- 関数名:returnHello
- ランタイム:Node.js 18.x
- アーキテクチャ:x86_64
- 基本的な Lambda アクセス権限で新しいロールを作成
- 関数作成時に作成されたindex.mjsの内容は特に変更せず、Testを実行して、200のステータスと「Hello from Lambda!」の文字列が返されることを確認する。
API Gatewayの準備
-
lambdaの「関数の概要」から「トリガーを追加」をクリックする。
-
「ソースを選択」から「API Gateway」を選択する。
-
下記の様に設定する。
- intent: Create a new API
- API type: REST API
- Security: API key
-
内容が問題無さそうなら「追加」をクリックする。
-
lambdaの設定 → トリガーからAPI Gatewayがトリガーとして設定されていることを確認する。
curlを用いて実行
-
まずはAPI keyを渡さない状態でAPI endpointにcurlでリクエストを送ってみる。
-
下記のコマンドをターミナルで実行する。
curl エンドポイントURL
-
下記の様に権限がない旨のレスポンスが帰ってくる。
{"message":"Forbidden"}
-
次にcurlのヘッダーにAPI keyを添付して実行してみようと思う。
-
ブラウザからAmazon API Gatewayを開く。
-
APIの一覧から今回の作業で追加されたAPIの「returhHello-API」をクリックする。
-
左サイドバーの「APIキー」をクリックする。
-
「returnHello-Key」をクリックする。
-
APIキーの「表示」をクリックしてAPIキーを表示する。(ここで表示されるランダムな文字列は第三者が閲覧できる場所への記載はしないほうが良いです。)
-
APIキーをコピーする。
-
下記のコマンドをターミナルで実行する。
curl -H 'x-api-key:コピーしたAPIキー' エンドポイントURL
-
下記の様にindex.mjsで定義した内容が返された。
"Hello from Lambda!"