Saya memiliki sekitar 7 jam dan lusinan percobaan untuk mendapatkan Rahasia AWS. Saya telah mengikuti kode contoh AWS serta contoh lain yang ditemukan di sini dan di situs lain. Masalah saya saat ini adalah kode mengembalikan Janji dalam variabel 'p' saya, bukan string rahasia plaintext. Saya menarik rambut saya di sini ... Jika itu mengembalikan janji sementara masih menunggu keputusan; Saya tidak tahu mengapa itu tidak menunggu. Kode panggilan ada dalam file sequelize.config dan tidak dibungkus dalam fungsi yang diekspor--jadi async function () => di bawah ini.

GetSecrets.js

const AWS = require ('aws-sdk')

const sm = new AWS.SecretsManager({region: 'us-east-1'});

export default async function getSecret (secretId) {
  const data = await sm.getSecretValue({
      SecretId: secretId
    })
    .promise();

  console.log ("returning SecretString:", data.SecretString)
  return data.SecretString;

Kode panggilan:

if (RUN_ENV != 'local') {
  const p = async function () {
    await getSecrets (DB_PASSWORD)
      .then (function ( value ) {
        return value;
        })
    .catch ((error) => {
      console.log ("AWS getSecrets error: ", error);
    })
  }
  password = p;
}
1
nocturnalcodehack 20 November 2020, 02:23

1 menjawab

Jawaban Terbaik

Berikut cara sederhana untuk mendapatkan string rahasia dari Secrets Manager:

const AWS = require('aws-sdk');
const client = new AWS.SecretsManager({ region: "us-east-1" });

const getMySecret = async (SecretId) => {
  const s = await client.getSecretValue({ SecretId }).promise();
  return s.SecretString;
};

// Async IIFE
(async() => {
  const secret_101 = await getMySecret('secret-101');
  console.log('My secret:', secret_101);
})();

Masalah awal Anda, seperti yang disarankan @GalAbra, adalah bahwa kode Anda memiliki password = p padahal seharusnya const password = p(). Secara khusus, daripada mengambil referensi ke fungsi, perlu memanggil fungsi.

2
jarmod 20 November 2020, 13:51