この記事の内容
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はじめて触ってみたけどいいね