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