API Gatewayのオーソライザーの機能を確認してみる
API Gatewayのオーソライザー機能を利用すると、認可をすることができるようになります。
「トークン」タイプと「リクエスト」タイプがあるようです。
トークンタイプ
トークンタイプの設定をしてみたいと思います。
Lambda Auth functionというLambda関数を作成する必要があります。この関数が認可機能の役割をしてくれます。
ここではauthという名前のLambda関数を作成します。コードは以下です。
exports.handler = function(event, context, callback) { var token = event.authorizationToken; switch (token.toLowerCase()) { case 'allow': callback(null, generatePolicy('user', 'Allow', event.methodArn)); break; case 'deny': callback(null, generatePolicy('user', 'Deny', event.methodArn)); break; case 'unauthorized': callback("Unauthorized"); // Return a 401 Unauthorized response break; default: callback("Error: Invalid token"); } }; // Help function to generate an IAM policy var generatePolicy = function(principalId, effect, resource) { var authResponse = {}; authResponse.principalId = principalId; if (effect && resource) { var policyDocument = {}; policyDocument.Version = '2012-10-17'; policyDocument.Statement = []; var statementOne = {}; statementOne.Action = 'execute-api:Invoke'; statementOne.Effect = effect; statementOne.Resource = resource; policyDocument.Statement[0] = statementOne; authResponse.policyDocument = policyDocument; } // Optional output with custom properties of the String, Number or Boolean type. authResponse.context = { "stringKey": "stringval", "numberKey": 123, "booleanKey": true }; return authResponse; }
TOKENタイプの場合は、event.authorizationTokenにトークンが入っています。
トークンの種類と意味です。
種類 | 意味 |
---|---|
allow | 許可 |
deny | 拒否 |
unauthorized | 不正 |
fail | 失敗 |
トークンのソースには「method.request.header.Authorization」を指定します。
※トークンのソースはヘッダーのkeyと一致していればOKです
「作成」をクリックすると、API GatewayにLambda関数を呼び出す権限を追加するよう促されます。「Grant & Create」を押します。
認可設定する
作成したLambda Auth functionをメソッドに対して設定します。
「メソッドリクエスト」をクリックします。
「認証」で先ほど作成したカスタムオーソライザーが表示されますので、それを設定します。
テストする
保存すると、「テスト」というリンクが表示されるのでテストすることができます。
ヘッダーに「allow」を指定して、「テスト」を押します。
これで、生成したポリシーを確認することができます。
aws-api-gateway-clientの使い方
aws-api-gateway-clientモジュールを使えばローカルからapigatewayが叩けます。
npm init -y npm install --save aws-api-gateway-client
クライアント側のindex.jsは以下です。
const apigClientFactory = require('aws-api-gateway-client').default; const apigClient = apigClientFactory.newClient({ invokeUrl:'https://xxxxxxxxxx.execute-api.ap-southeast-2.amazonaws.com', accessKey: 'YYEFE2UEI3N1IUYHZGN', secretKey: 'EEhrWCrUeCCxKggYUpUFTEn7Oa4d+oxQWE7WC8UT', sessionToken: 'SESSION_TOKEN', region: 'ap-northeast-1', apiKey: '12345678901234567890' // APIキー使用している場合はここに記載する }); const pathParams = { }; const pathTemplate = '/dev/edge' const method = 'GET'; const additionalParams = { headers: { Authentication:'xx' }, queryParams: { } }; const body = { }; apigClient.invokeApi(pathParams, pathTemplate, method, additionalParams, body) .then(function(result){ console.log(JSON.stringify(result.headers)); }).catch( function(result){ console.log(result); });

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
資格:少額短期保険募集人,FP3級,宅建士
コメント