Estoy utilizando el administrador de AWS Secrets para proteger los créditos de la base de datos de mi API REST. Estoy usando AWS Lambda, API Gateway y RDS (MySQL). A continuación se muestra cómo los obtengo.
// Load the AWS SDK var AWS = require('aws-sdk'), region = "us-east-1", secretName = "test-secret", secret, decodedBinarySecret; // Create a Secrets Manager client var client = new AWS.SecretsManager({ region: region }); // In this sample we only handle the specific exceptions for the 'GetSecretValue' API. // See https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html // We rethrow the exception by default. exports.handler = (event, context, callback) => { client.getSecretValue({ SecretId: secretName }, function(err, data) { if (err) { throw err } else { // Decrypts secret using the associated KMS CMK. // Depending on whether the secret is a string or binary, one of these fields will be populated. if ('SecretString' in data) { secret = data.SecretString; } else { let buff = new Buffer(data.SecretBinary, 'base64'); decodedBinarySecret = buff.toString('ascii'); } } // Your code goes here. console.log(secret); }); };A continuación se muestra la salida
INFO {"username":"***","password":"***","engine":"mysql","host":"***.***.us-east-1.rds.amazonaws.com","port":3306,"dbname":"***","dbInstanceIdentifier":"***"}Traté de extraer la contraseña como a continuación
let pass = secret.password; console.log(pass);Dio lo siguiente
INFO undefined ¿Cómo puedo extraer campos como password , nombre de username , nombre de la base de databasename , etc.?
Al principio, obtienes secret como data.SecretString , luego ahora secret solo es una cadena normal. En su caso, es una cadena JSON, debe convertir su cadena en un objeto JSON, luego puede acceder fácilmente a la información por nombre de atributo.
Para hacer eso, puede usar el método JSON.parse para convertir una cadena json en un objeto json:
var secret = `{"username":"***","password":"***","engine":"mysql","host":"***.***.us-east-1.rds.amazonaws.com","port":3306,"dbname":"***","dbInstanceIdentifier":"***"} `; const secretObj = JSON.parse(secret); console.log(secretObj.host)Esta salida es un objeto literal JSON, por lo que puede acceder a cada objeto con el siguiente formato:
secret.password const secret= {"username":"yourusername","password":"Pa$$w0rd","engine":"mysql","host":"***.***.us-east-1.rds.amazonaws.com","port":3306,"dbname":"***","dbInstanceIdentifier":"***"}; console.log(secret.password); console.log(secret.username); document.getElementById("secret").innerHTML = secret.password; <p> Your Password is : <span id="secret"></span> </p>