AWS re:Postを使用することにより、以下に同意したことになります AWS re:Post 利用規約

AWS Lambdaで暗号化した環境変数を復号する方法について

0

Lambdaコンソールを利用して、環境変数を暗号化しました。
環境変数をLambda関数で使用する為に復号したいのですが、提供されているコードのまま利用しても復号化されず、暗号化されたままとなっております。
どの部分が間違っているのでしょうか、ご教示頂ければ幸甚です。

console.log(decrypted)は暗号化された文字列が表示され、
Lambda関数の実行結果としては、status Code 200が返ってきております。

node.js
const AWS = require('aws-sdk');
AWS.config.update({ region: 'REGION' });

//あらかじめ設定している暗号化された環境変数(DB_HOST)
const encrypted_dbhost = process.env.DB_HOST;
let decrypted = [];

exports.lambdaHandler = async (event, context, callback) => {

    const kms = new AWS.KMS();  
    try {  
        const test_data = await kms.decrypt({ CiphertextBlob: new Buffer(encrypted_dbhost, 'base64') }).promise();  
        decrypted = test_data.Plaintext.toString('ascii');  
        console.log(decrypted);  
        const response = {  
            statusCode: 200,  
           body: JSON.stringify('Hello from Lambda!'),  
        };  

        return response;   
    }catch(e){  
        throw e;  
    }  

};

質問済み 5年前606ビュー
2回答
0

参考にされた情報を明らかにしておかないと具体的なアドバイスをもらう事は困難かもしれません。

AWS.config.update({ region: 'REGION' });

この部分は実際のリージョンが伏せられているだけで、ソースコードがこの状態のまま動作させているわけではないですよね?

回答済み 5年前
0

replyありがとうございます。
仰られる通りです、確かにこのままではないのですが、実際のコードと異なるのはこの部分のみです。
東京リージョンで利用しておりますので、実際には

AWS.config.update({ region: 'ap-northeast-1' });

となっております。
参考にしたコードは、環境変数の暗号化を行った際に表示されるコードボタンをクリックして表示される「シークレットスニペットの復号」のコード(下記)になります。

const AWS = require('aws-sdk');
AWS.config.update({ region: 'ap-northeast-1' });

const encrypted = process.env['test'];
let decrypted;

function processEvent(event, context, callback) {
// TODO handle the event here
}

exports.handler = (event, context, callback) => {
if (decrypted) {
processEvent(event, context, callback);
} else {
// Decrypt code should run once and variables stored outside of the
// function handler so that these are decrypted once per container
const kms = new AWS.KMS();
kms.decrypt({ CiphertextBlob: new Buffer(encrypted, 'base64') }, (err, data) => {
if (err) {
console.log('Decrypt error:', err);
return callback(err);
}
decrypted = data.Plaintext.toString('ascii');
processEvent(event, context, callback);
});
}
};

回答済み 5年前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン