API Gateway Lambda オーソライザーからの出力
Lambda オーソライザー関数の出力はディクショナリのようなオブジェクトです。プリンシパル ID (principalId
) と、ポリシーステートメントのリストを含むポリシードキュメント (policyDocument
) を含む必要があります。出力には、キー/値ペアを含む context
マップも含まることがあります。API が使用量プランを使用する (apiKeySource
が AUTHORIZER
に設定されている) 場合、Lambda オーソライザー関数は usageIdentifierKey
プロパティ値として、使用量プランの API キーのいずれかを返す必要があります。
この出力の例を以下に示します。
{ "principalId": "
yyyyyyyy
", // The principal user identification associated with the token sent by the client. "policyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Effect": "Allow|Deny", "Resource": "arn:aws:execute-api:{regionId}
:{accountId}
:{apiId}
/{stage}
/{httpVerb}
/[{resource}
/[{child-resources}
]]" } ] }, "context": { "stringKey": "value", "numberKey": "1", "booleanKey": "true" }, "usageIdentifierKey": "{api-key}
" }
ここで、ポリシーステートメントは、指定された 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
変数を使ってアクセスできます。これはバックエンドに値を渡す場合に便利です。詳細については、「データモデル、オーソライザー、マッピングテンプレート、および CloudWatch アクセスログ記録用の $context 変数」を参照してください。
マッピングテンプレート内の 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
) するポリシーステートメントを示しています。
{ "principalId": "user", "policyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Effect": "Deny", "Resource": "arn:aws:execute-api:us-west-2:123456789012:ymy8tbxw7b/dev/GET/" } ] } }