保护 Lambda 的 AWS RDS 凭据的一种解决方法是使用 AWS Secrets Manager 来存储和管理 RDS 凭据,并在 Lambda 函数中使用 Secrets Manager 来获取凭据。
以下是一个使用 Node.js 的 Lambda 函数示例,演示如何在 Lambda 函数中使用 Secrets Manager 获取 RDS 凭据:
const AWS = require('aws-sdk');
const secretsManager = new AWS.SecretsManager();
exports.handler = async (event, context) => {
try {
// 获取 RDS 凭据
const secretName = "rds-credentials";
const data = await secretsManager.getSecretValue({ SecretId: secretName }).promise();
const secret = JSON.parse(data.SecretString);
const username = secret.username;
const password = secret.password;
// 使用 RDS 凭据进行数据库操作
const mysql = require('mysql2/promise');
const connection = await mysql.createConnection({
host: 'my-rds-instance.amazonaws.com',
user: username,
password: password,
database: 'mydatabase'
});
// 执行数据库查询
const [rows, fields] = await connection.execute('SELECT * FROM mytable');
// 处理查询结果
console.log(rows);
// 关闭数据库连接
await connection.end();
return {
statusCode: 200,
body: JSON.stringify(rows)
};
} catch (error) {
console.error(error);
return {
statusCode: 500,
body: JSON.stringify({ error: 'Internal Server Error' })
};
}
};
在此示例中,首先使用 AWS Secrets Manager 获取名为 "rds-credentials" 的凭据。然后,将凭据中的用户名和密码用于创建与 RDS 数据库的连接。在连接成功后,可以执行数据库查询和其他操作。最后,关闭数据库连接并返回结果。
请确保在 Lambda 函数的执行角色中添加对 Secrets Manager 的访问权限,并将角色与 Lambda 函数关联。此外,还需要在 Secrets Manager 中创建名为 "rds-credentials" 的凭据,并将 RDS 的用户名和密码作为凭据的值。
使用 AWS Secrets Manager 可以更安全地存储和管理凭据,而不需要将它们明文存储在 Lambda 函数中。此外,Secrets Manager 还提供了自动轮换凭据的功能,以增加安全性。
下一篇:保护 NodeJS API