メモ
・リソースポリシーや認証等にて拒否された API コールは料金が発生しない。
・スロットルされた API コールも料金は発生しない。
記事一覧
APIGateway/JavaScriptでAPIGatewayを呼び出す
はじめに
JavaScriptでAPIGatewayを呼び出すサンプル
こちらで作成したAPIGatewayを利用しています。
下記サンプルコードをhtml形式で保存してブラウザで表示してください。ローカルで利用できます。
事前準備
サンプルコード
Webページのボタンをクリックすると、コンソールログとWeb画面に署名付きURLが表示される。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
実行結果
Aws/APIGateway/Lambdaオーソライザーを理解してみる
ようやくLambdaオーソライザーが理解できました(多分)
簡単に言うと、Lambdaオーソライザーは、後続のAPIを実行するポリシードキュメントを返す仕組みです。
ポリシードキュメントを返す際、EffectがAllowの場合はContexを必須で付与し、Denyの場合はContexを付与しなくて良いです。
公式ドキュメントには、「principalIdを含む」とありますが、つけてもつけなくても動作します。
Amazon API Gateway Lambda オーソライザーからの出力 - Amazon API Gateway
下記は、認証に成功した場合のフロー図です。
はじめに
APIの統合リクエストは、eventをLambdaに渡したかったので「Lambda プロキシ統合の使用」を有効にしています。
気にしたことが無かったのですが、下図のメソッドリクエストの認可で、オーソライザーに設定した名前を選択しないとオーソライザーが有効にならないんですね。
オーソライザーに設定したLambdaは実行されるので、有効になっているものだと思いました・・・。※CloudWatchlogsにログ出てたら有効と思うじゃん!!!
クライアントからのAPIの呼び出しは、下記の通りcurlコマンドでAuthorizationヘッダーを指定して呼び出しています。
1 |
|
設定値
APIGateway
■オーソライザー
・名前:LambdaAuth
・タイプ:Lambda
・Lambda関数:LambdaAuthorization
・Lambda イベントペイロード:リクエスト
・ID ソース:Authorization
・認可のキャッシュ:無効
■API
・タイプ:REST API
・エンドポイントタイプ:パブリック
・メソッド:GET
・メソッドリクエスト(認可):LambdaAuth
・Lambda プロキシ統合の使用:有効
・統合タイプ:Lambda関数(AllowResponse)
・ドメイン:https://XXX.execute-api.ap-northeast-1.amazonaws.com
・ステージ:test
Lambda(オーソライザー用)サンプル
・event情報(headersのIDソースなど)を元に、認証判定
・許可の場合:プリンシンバルID、後続処理のポリシードキュメント(資格情報)、ContexをReturn
・拒否の場合:プリンシンバルID、後続処理のポリシードキュメント(資格情報)をReturn
Contexはkey-valueで定義できて、返却した値はAPIで指定したLambda関数のevent['requestContext']['authorizer']に格納されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|