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;  
    }  

};

gefragt vor 5 Jahren493 Aufrufe
2 Antworten
0

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

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

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

semnil
beantwortet vor 5 Jahren
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);
});
}
};

beantwortet vor 5 Jahren

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen