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

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

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

{ "type":"TOKEN", "authorizationToken":"{caller-supplied-token}",     "methodArn":"arn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]" }

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

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

{ "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 ランタイムに、このリクエストコンテキストが指定されます。

注記

パスパラメータは、リクエストパラメータとして Lambda オーソライザー関数に渡すことができますが、ID ソースとして使用することはできません。

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

{ "type": "REQUEST", "methodArn": "arn:aws:execute-api:us-east-1:123456789012:abcdef123/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": "..." }, "queryStringParameters": { "QueryString1": "queryValue1" }, "pathParameters": {}, "stageVariables": { "StageVar1": "stageValue1" }, "requestContext": { "path": "/request", "accountId": "123456789012", "resourceId": "05c7jb", "stage": "test", "requestId": "...", "identity": { "apiKey": "...", "sourceIp": "...", "clientCert": { "clientCertPem": "CERT_CONTENT", "subjectDN": "www.example.com", "issuerDN": "Example issuer", "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", "validity": { "notBefore": "May 28 12:30:02 2019 GMT", "notAfter": "Aug 5 09:36:04 2021 GMT" } } }, "resourcePath": "/request", "httpMethod": "GET", "apiId": "abcdef123" } }

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