LoginSignup
12
12

More than 5 years have passed since last update.

AWS KMSで暗号化した認証情報をAWS Lambda実行時に復号化する(Node.jsでのkms.decrypt使用例)

Last updated at Posted at 2016-04-05

はじめに

Node.jsでAWS Lambdaファンクションを作成した時、AWS Key Management Service(KMS)で暗号化した文字列をkms.decryptにより復号化する例です。

概要

AWS Lambdaファンクション作成時、サーバ接続用パスワード、Slackをはじめとする外部サービス連携用のトークン文字列といった認証情報やクレデンシャルをプログラム内に書いておきたい事があるかと思います。

時には、Lambdaファンクションに、パスワードやトークン文字列を平文のまま書くのではなく、パスワードやトークン文字列を暗号化して書いておきたい事があるかもしれません。

このページでは、AWS KMSにより暗号化したトークン文字列をLambdaファンクション(Node.js)に記述する事で、Lambdaファンクション実行時に暗号化したトークン文字列を復号化する例について記載します。

参考サイト

KMSによるパスワードやトークン文字列の暗号化手順はクラスメソッド様の記事を参考にさせて頂きました。
http://dev.classmethod.jp/cloud/decrypt-sensitive-data-with-kms-on-lambda-invocation/
KMSで認証情報を暗号化しLambda実行時に復号化する

LambdaファンクションでKMSにより暗号化した文字列を復号化するサンプルコード

Lambdaファンクション作成にあたり、まずはaws kms encryptコマンドで「example_password」というトークン文字列を暗号化するとします。

後述のLambdaファンクションサンプルコード中の「kmsEncyptedToken」には、aws kms encryptコマンドにより「example_password」を暗号化した文字列(CiC** ~ **I=)をセットします。

Lambdaファンクションは
 ランタイムは「Node.js」
 Handlerは「index.handler」
 Roleは「lambda_basic_execution」
 Advanced settingsは「No VPC」
を選択して作成します。

Lambda(node.js)でKMSにより暗号化した文字列を復号化するサンプルコードは以下になります。

index.handler
var AWS = require('aws-sdk');

exports.handler = function(event, context){
    var token;
    var kmsEncyptedToken = "CiC**********************************************************************************************I=";

    var encryptedBuf = new Buffer(kmsEncyptedToken, 'base64');
    var cipherText = {CiphertextBlob: encryptedBuf};

    var kms = new AWS.KMS({ region: 'ap-northeast-1' });
    kms.decrypt(cipherText, function (err, data) {
        if (err) {
            console.log("token string decrypt error: " + err);
            context.fail(err);
        } else {
            token = data.Plaintext.toString('ascii');
            console.log('token string = ' + token);
        }
    });
};

Lambdaファンクションを実行し、「Log output」に「example_password」と文字列が表示されていれば、KMSで暗号化したトークン文字列の復号化は正常です。

START RequestId: 28f3900b-fb59-11e5-8a6a-3f80f8c61572 Version: $LATEST
2016-04-05T18:06:47.427Z    28f3900b-fb59-11e5-8a6a-3f80f8c61572    token string = example_password
END RequestId: 28f3900b-fb59-11e5-8a6a-3f80f8c61572
REPORT RequestId: 28f3900b-fb59-11e5-8a6a-3f80f8c61572  Duration: 853.67 ms Billed Duration: 900 ms     Memory Size: 128 MB Max Memory Used: 19 MB  
12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12