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
    
    広告ここから
    広告ここまで
    Home
    Search
    Bookmark