LoginSignup
4
6

More than 5 years have passed since last update.

[AWS]KMSで暗号化・復号化するサンプル(node.js版)

Last updated at Posted at 2017-01-18

この記事の内容

AWS KMSを試してみたかった
Lambdaから文字列をKMSに投げて暗号化し、暗号化文字列をもう1度投げて復号化できるかをやってみた

前提条件

  • ManagementコンソールのIAM内、鍵管理からKMSに鍵が登録されていること
  • KSM登録時にKMSを使用できるロールにLambdaを実行するロールを指定していること

つまり、KMSに鍵が登録されていて、その鍵を操作する権限を持ったロールをLambdaにアタッチ出来ていること。
マネジメントコンソールに従ってやっていればできます。

実行環境

  • AWS Lambda
  • Node.js 4.3

実装

コンソール直書きで大丈夫です

index.js

'use strict'
const AWS = require('aws-sdk');
const kms = new AWS.KMS({apiVersion: '2014-11-01'});
const id = <登録した鍵のKyeID>;

exports.handler = (event, context, callback) => {
    let base64txt = new Buffer('hogehogeTxt').toString();
    let params = {
        KeyId: id, 
        Plaintext: base64txt
    };
    kms.encrypt(params, (err, data) => {
        if(err) console.log(err);
        console.log(data);

        let encript = data.CiphertextBlob;

        let param = {
            CiphertextBlob: encript
        };
        kms.decrypt(param, (err, data) => {
           if(err) console.log(err);
           let txt = data.Plaintext;
           console.log(txt.toString('utf-8', 0, txt.length))
           callback(null, 'success');
        });
    });
};

実行すると暗号化後復号化されたhogehogeTxtが返ってきます。

結果

以下のデータサンプルはドキュメントから引用
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/KMS.html#encrypt-property

暗号化データサンプル

{
    CiphertextBlob: <Binary String>, 
    KeyId: "arn:aws:kms:us-west-2:111122223333:key1234abcd-12ab-34cd-56ef-1234567890ab"
}

復号化データサンプル

{
    KeyId: "arn:aws:kms:us-west-2:111122223333:key1234abcd-12ab-34cd-56ef-1234567890ab",     
    Plaintext: <Binary String>
}   

まとめ

KMSはじめて触ってみたけどいいね

4
6
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
4
6