API Gateway Lambda オーソライザーからの出力 - Amazon API Gateway

API Gateway Lambda オーソライザーからの出力

Lambda オーソライザー関数の出力はディクショナリのようなオブジェクトです。プリンシパル ID (principalId) と、ポリシーステートメントのリストを含むポリシードキュメント (policyDocument) を含む必要があります。出力には、キー/値ペアを含む context マップも含まることがあります。API が使用量プランを使用する (apiKeySourceAUTHORIZER に設定されている) 場合、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:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]] など) の場合、最大長は 1600 バイトです。パスパラメータの値 (そのサイズは実行時に決定されます) によっては、ARN の長さが制限を超えることがあります。これが発生した場合、API クライアントは 414 Request URI too long レスポンスを受け取ります。

さらに、リソース ARN は、承認者によって出力されたポリシーステートメントに示されているように、現在 512 文字に制限されています。このため、JWT トークンが長すぎる URI をリクエスト URI に使用しないでください。代わりに、JWT トークンはリクエストヘッダーで安全に渡すことができます。

principalId 値には、マッピングテンプレートで $context.authorizer.principalId 変数を使ってアクセスできます。これはバックエンドに値を渡す場合に便利です。詳細については、「データモデル、オーソライザー、マッピングテンプレート、および CloudWatch アクセスログ記録用の $context 変数」を参照してください。

マッピングテンプレート内の stringKey マップの numberKeybooleanKey、または "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 キーを使用した使用量プランの作成と使用」を参照してください。

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/" } ] } }