AWS机密管理器和javascript

AWS机密管理器和javascript,javascript,amazon-web-services,Javascript,Amazon Web Services,我有大约7个小时和几十次尝试来获取AWS的秘密。我遵循了AWS示例代码以及这里和其他站点上的其他示例。我当前的问题是代码在变量“p”中返回承诺,而不是明文秘密字符串。我在这里拉扯我的头发。。。如果仍在等待解决的情况下返回承诺;我不知道为什么它不等待。调用代码位于sequelize.config文件中,而不是封装在导出的函数中,因此下面的异步函数=>为 getSecrets.js const AWS = require ('aws-sdk') const sm = new AWS.Secrets

我有大约7个小时和几十次尝试来获取AWS的秘密。我遵循了AWS示例代码以及这里和其他站点上的其他示例。我当前的问题是代码在变量“p”中返回承诺,而不是明文秘密字符串。我在这里拉扯我的头发。。。如果仍在等待解决的情况下返回承诺;我不知道为什么它不等待。调用代码位于sequelize.config文件中,而不是封装在导出的函数中,因此下面的异步函数=>为

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;
呼叫代码:

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

以下是从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);
})();

正如@GalAbra所建议的,您最初的问题是,当您的代码需要为const password=p时,它的密码为password=p。具体来说,它需要调用函数,而不是引用函数。

以下是从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);
})();

正如@GalAbra所建议的,您最初的问题是,当您的代码需要为const password=p时,它的密码为password=p。具体来说,它需要调用函数,而不是引用函数。

p只是一个函数。你到底把它叫做什么?p只是一个函数。你到底叫它什么?谢谢@jarmod!我试过这种模式。我陷入困境的地方是从async=>{函数并将其转换为范围更广的变量。有没有办法使该秘密变量在异步函数外部可用?好吧,您可以声明let secret_101;因此它在全局模块范围内未定义为未初始化变量,然后在代码的异步部分内设置secret_101=wait getMySecret…但您需要有一种方法可以知道秘密已经变为可用,它是异步发生的,或者有一个定义的值。当然,这都是标准的异步JS。你不能在异步范围外使用Wait。谢谢@jarmod!我已经尝试过这种模式。我遇到的问题是从异步中获取秘密值你的秘密\u 101=>{函数并将其转换为范围更广的变量。有没有办法使该秘密变量在异步函数外部可用?好吧,您可以声明let secret_101;因此它在全局模块范围内未定义为未初始化变量,然后在代码的异步部分内设置secret_101=wait getMySecret…但您需要这是一种知道秘密是否可用的方法,它以异步方式发生或具有定义的值。当然,这都是标准的异步JS。不能在异步范围外使用Wait。