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

};

posta 5 anni fa508 visualizzazioni
2 Risposte
0

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

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

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

semnil
con risposta 5 anni fa
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);
});
}
};

con risposta 5 anni fa

Accesso non effettuato. Accedi per postare una risposta.

Una buona risposta soddisfa chiaramente la domanda, fornisce un feedback costruttivo e incoraggia la crescita professionale del richiedente.

Linee guida per rispondere alle domande