Amazon API Gateway
開発者ガイド

Amazon API Gateway Lambda オーソライザーへの入力

Lambda タイプの TOKEN オーソライザー (以前のカスタムオーソライザー) の場合は、API のオーソライザーを設定する際、[トークンのソース] としてカスタムヘッダーを指定する必要があります。API クライアントは、受信リクエストで必要な認証トークンを渡す必要があります。API Gateway は、受信メソッドリクエストを受け取った時点で、カスタムヘッダーからトークンを抽出します。その後、authorizationToken プロパティとしてメソッド ARN を渡すだけでなく、Lambda 関数の event オブジェクトの methodArn プロパティとしてトークンを渡します。

{ "type":"TOKEN", "authorizationToken":"<caller-supplied-token>",     "methodArn":"arn:aws:execute-api:<regionId>:<accountId>:<apiId>/<stage>/<method>/<resourcePath>" }

この例では、type プロパティは、オーソライザーのタイプ (TOKEN オーソライザー) を指定します。<caller-supplied-token> は、クライアントリクエストの認証ヘッダーの値です。methodArn は、受信するメソッドリクエストの ARN であり、Lambda オーソライザーの設定に従って API Gateway により自動入力されます。

前のセクションで示した例の TOKEN オーソライザーの Lambda 関数の場合、<caller-supplied-token> 文字列は、allowdenyunauthorized、またはその他の文字列値です。空の文字列値は unauthorized と同じです。以下に示すのは、あらゆるステージ (*) で AWS アカウント (123456789012) の API (ymy8tbxw7b) の GET メソッドで Allow ポリシーを取得するための入力例です。

{ "type":"TOKEN", "authorizationToken":"allow", "methodArn":"arn:aws:execute-api:us-west-2:123456789012:ymy8tbxw7b/*/GET/" }

REQUEST タイプの Lambda オーソライザーの場合、API Gateway は、event オブジェクトの一部として、オーソライザーの Lambda 関数に、必要なリクエストパラメータを渡します。このリクエストパラメータには、ヘッダー、パスパラメータ、クエリ文字列パラメータ、ステージ変数、一部のリクエストコンテキスト変数などがあります。API 発信者は、パスパラメータ、ヘッダー、クエリ文字列パラメータを設定できます。API 開発者は API デプロイ時にステージ変数を設定する必要があります。API Gateway 実行時に、このリクエストコンテキストが指定されます。

次の例では、API メソッド (REQUEST) をプロキシ統合に設定する GET /request オーソライザーへの入力を表します。

{ "type": "REQUEST", "methodArn": "arn:aws:execute-api:us-east-1:123456789012:s4x3opwd6i/test/GET/request", "resource": "/request", "path": "/request", "httpMethod": "GET", "headers": { "X-AMZ-Date": "20170718T062915Z", "Accept": "*/*", "HeaderAuth1": "headerValue1", "CloudFront-Viewer-Country": "US", "CloudFront-Forwarded-Proto": "https", "CloudFront-Is-Tablet-Viewer": "false", "CloudFront-Is-Mobile-Viewer": "false", "User-Agent": "...", "X-Forwarded-Proto": "https", "CloudFront-Is-SmartTV-Viewer": "false", "Host": "....execute-api.us-east-1.amazonaws.com", "Accept-Encoding": "gzip, deflate", "X-Forwarded-Port": "443", "X-Amzn-Trace-Id": "...", "Via": "...cloudfront.net (CloudFront)", "X-Amz-Cf-Id": "...", "X-Forwarded-For": "..., ...", "Postman-Token": "...", "cache-control": "no-cache", "CloudFront-Is-Desktop-Viewer": "true", "Content-Type": "application/x-www-form-urlencoded" }, "queryStringParameters": { "QueryString1": "queryValue1" }, "pathParameters": {}, "stageVariables": { "StageVar1": "stageValue1" }, "requestContext": { "path": "/request", "accountId": "123456789012", "resourceId": "05c7jb", "stage": "test", "requestId": "...", "identity": { "apiKey": "...", "sourceIp": "..." }, "resourcePath": "/request", "httpMethod": "GET", "apiId": "s4x3opwd6i" } }

requestContext はキーと値のペアのマップであり、$context 変数に対応します。その結果は API に依存します。API Gateway はマップに新しいキーを追加する場合があります。プロキシ統合での Lambda 関数入力の詳細については、「プロキシ統合のための Lambda 関数の入力形式」を参照してください。