API Gatewayのオーソライザーの機能を確認してみる

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のオーソライザーの機能を確認してみる

「作成」をクリックすると、API GatewayにLambda関数を呼び出す権限を追加するよう促されます。「Grant & Create」を押します。

API Gatewayのオーソライザーの機能を確認してみる

認可設定する

作成したLambda Auth functionをメソッドに対して設定します。

API Gatewayのオーソライザーの機能を確認してみる

「メソッドリクエスト」をクリックします。

「認証」で先ほど作成したカスタムオーソライザーが表示されますので、それを設定します。

API Gatewayのオーソライザーの機能を確認してみる

テストする

保存すると、「テスト」というリンクが表示されるのでテストすることができます。

ヘッダーに「allow」を指定して、「テスト」を押します。

API Gatewayのオーソライザーの機能を確認してみる

これで、生成したポリシーを確認することができます。

参考サイト

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);
  });

aws-api-gateway-client

コメント

タイトルとURLをコピーしました