AWSNode.js

KMSを使ってデータを安全にDynamoDBへ出し入れする(Node.js編)

DynamoDBにどうしてもパスワードなどの情報を保存したいケースがあったので、KMSを使って暗号化するようにしてみました。 保存スクリプト データを暗号化してDynamoDBへ保存するスクリプトです。 テーブル名とプラ […]

広告ここから
広告ここまで

DynamoDBにどうしてもパスワードなどの情報を保存したいケースがあったので、KMSを使って暗号化するようにしてみました。

保存スクリプト

データを暗号化してDynamoDBへ保存するスクリプトです。
テーブル名とプライマリキーの部分は必要に応じて変更してください。

'use strict'
const AWS = require('aws-sdk');
const kms = new AWS.KMS({apiVersion: '2014-11-01'});
const dynamodb = new AWS.DynamoDB.DocumentClient();

const secretData = '3mJaqIONKbdw'

let params = {
    KeyId: "XXXXXXXXXXXX",
    Plaintext: Buffer(secretData).toString()
};

// YOUR DynamoDB's PRIMARY KEY DATA
const id = '001'

kms.encrypt(params).promise()
.then(data => {
  let encript = data.CiphertextBlob;
  const params = {
    TableName: 'YOUR_DYNAMODB_TABLE_NAME',
    Item: {
      id,
      kms_data: encript
    },
  }
  return dynamodb.put(params).promise()
})
.then(() => console.log('OK'))
.catch(err => console.log(err))

成功すると、以下の様にOKというメッセージを返してくれます。

$ node kms.js 
OK

DynamoDBのコンソールをみると、3mJaqIONKbdwが暗号化された状態で保存されているのがわかります。

データが暗号化されて保存されている

DynamoDBから取り出して復号化する

保存したデータの取り出しについてもKMSを用います。

処理はDynamoDBからデータを取り出したのちに、KMSでdecryptするという流れとなります。

'use strict'
const AWS = require('aws-sdk');
const kms = new AWS.KMS({apiVersion: '2014-11-01'});
const dynamodb = new AWS.DynamoDB.DocumentClient();

const id = '001'

const params = {
  TableName: 'YOUR_DYNAMODB_TABLE_NAME',
  Key: {
    id,
  },
}
dynamodb.get(params).promise()
.then(data => {
  const encript = data.Item.kms_data
  const param = {
      CiphertextBlob: encript
  };
  return kms.decrypt(param).promise()
}).then(data => {
  const txt = data.Plaintext;
  return txt.toString('utf-8', 0, txt.length);
})
.then((secret) => console.log(secret))
.catch(err => console.log(err))

実行すると復号化されたテキストが表示されます。

$ node kms.js 
3mJaqIONKbdw

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts