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

};

preguntada hace 5 años507 visualizaciones
2 Respuestas
0

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

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

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

semnil
respondido hace 5 años
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);
});
}
};

respondido hace 5 años

No has iniciado sesión. Iniciar sesión para publicar una respuesta.

Una buena respuesta responde claramente a la pregunta, proporciona comentarios constructivos y fomenta el crecimiento profesional en la persona que hace la pregunta.

Pautas para responder preguntas