API Gateway Lambda オーソライザーからの出力
Lambda オーソライザー関数の出力はディクショナリのようなオブジェクトです。プリンシパル ID (principalId) と、ポリシーステートメントのリストを含むポリシードキュメント (policyDocument) を含む必要があります。出力には、キー/値ペアを含む context マップも含まることがあります。API が使用量プランを使用する (apiKeySource が AUTHORIZER に設定されている) 場合、Lambda オーソライザー関数は usageIdentifierKey プロパティ値として、使用量プランの API キーのいずれかを返す必要があります。
この出力の例を以下に示します。
ここで、ポリシーステートメントは、指定された API メソッド (Effect) を呼び出す (Action) ことを API Gateway 実行サービスに許可するか拒否するか (Resource) を指定しています。オーソライザーに基づいて複数のリソースへのアクセスを制御する必要がある場合があります。ワイルドカード (*) を使ってリソースタイプ (メソッド) を指定できます。API を呼び出す有効なポリシーの設定の詳細については、「API Gateway で API を実行するための IAM ポリシーのステートメントの参照」を参照してください。
権限付与対応のメソッド ARN (arn:aws:execute-api: など) の場合、最大長は 1600 バイトです。パスパラメータの値 (そのサイズは実行時に決定されます) によっては、ARN の長さが制限を超えることがあります。これが発生した場合、API クライアントは {regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]414 Request URI
too long レスポンスを受け取ります。
さらに、リソース ARN は、承認者によって出力されたポリシーステートメントに示されているように、現在 512 文字に制限されています。このため、JWT トークンが長すぎる URI をリクエスト URI に使用しないでください。代わりに、JWT トークンはリクエストヘッダーで安全に渡すことができます。
principalId 値には、マッピングテンプレートで $context.authorizer.principalId 変数を使ってアクセスできます。これはバックエンドに値を渡す場合に便利です。詳細については、「データ変換のコンテキスト変数」を参照してください。
マッピングテンプレート内の stringKey マップの numberKey、booleanKey、または "value" 値 (例: "1"、"true"、または context) には、それぞれ $context.authorizer.stringKey、$context.authorizer.numberKey、または $context.authorizer.booleanKey を呼び出すことによりアクセスできます。返される値は、すべてが文字列化されます。context マップでキーの有効な値として JSON オブジェクトまたは配列を設定することはできません。
オーソライザーからバックエンドに、キャッシュされた認証情報を返すには、context マップを使用します。この際、統合リクエストのマッピングテンプレートを使用します。これにより、バックエンドのユーザーエクスペリエンスを強化するには、キャッシュされた認証情報を使用して、シークレットキーにアクセスする必要性を抑え、リクエストごとに認可トークンを開きます。
Lambda プロキシ統合の場合、API Gateway は、Lambda オーソライザーの context オブジェクトを、入力 event の一部としてバックエンドの Lambda 関数に直接渡します。context のキー/値ペアは、Lambda 関数で $event.requestContext.authorizer. を呼び出して取得できます。key
{api-key} は、API ステージの使用量プランの API キーを表します。詳細については、「API Gateway での REST API の使用量プランと API キー」を参照してください。
Lambda オーソライザー例からの出力例を次に示します。この出力例には、AWS アカウント (123456789012) の API (ymy8tbxw7b) の dev ステージの GET メソッドに対する呼び出しをブロック (Deny) するポリシーステートメントが含まれています。