A production-ready Node-RED node for AWS Secrets Manager operations that retrieves secrets and stores them in Node-RED context or environment variables.
- 🔐 Retrieve secrets from AWS Secrets Manager
- 🏗️ Flexible credential configuration (IAM roles, direct credentials, context variables)
- 📦 Store secrets in flow context, global context, or environment variables
- 🔄 Support for both JSON and string secrets
- 🎯 TypedInput support for dynamic secret IDs
- ⚡ Real-time credential resolution from context
- 🛡️ Production-ready with comprehensive error handling
Run the following command in your Node-RED user directory (typically ~/.node-red
):
npm install node-red-contrib-aws-asm
After installation, restart Node-RED to load the new nodes.
The module uses a configuration node that supports multiple authentication methods:
- ✅ Use when running on EC2 instances with IAM roles
- ✅ No credentials needed in Node-RED
- ✅ Automatic credential rotation
Supports multiple credential sources:
- String: Stored securely in Node-RED credentials (encrypted)
- Flow Context: Retrieved from flow context variables
- Global Context: Retrieved from global context variables
- Environment Variables: Retrieved from environment variables
// Set environment variables
process.env.AWS_ACCESS_KEY_ID = "your-access-key";
process.env.AWS_SECRET_ACCESS_KEY = "your-secret-key";
// Configure node to use environment variables
Access Key ID: Environment Variable → AWS_ACCESS_KEY_ID
Secret Access Key: Environment Variable → AWS_SECRET_ACCESS_KEY
// Store secret key in global context
global.set("aws_secret", "your-secret-access-key");
// Configure node
Access Key ID: String → stored securely in Node-RED
Secret Access Key: Global Context → aws_secret
-
Create AWS Configuration
- Add an "aws-secret-manager-config" node
- Configure your AWS region and credentials
-
Add Secrets Manager Node
- Drag "aws-secret-manager" node to your flow
- Select your AWS configuration
- Configure secret ID and storage options
-
Configure Secret ID The Secret ID supports multiple input types:
- String: Direct secret name or ARN
-
Message: From
msg.payload.secretId
ormsg.secretId
- Flow Context: From flow context variable
- Global Context: From global context variable
- Environment Variable: From environment variable
// Store in flow context
storeIn: "flow"
variableName: "dbCredentials"
// Access later
const credentials = flow.get("dbCredentials");
// Store in global context
storeIn: "global"
variableName: "dbCredentials"
// Access later
const credentials = global.get("dbCredentials");
// For JSON secrets like: {"DB_HOST":"localhost","DB_USER":"admin"}
storeIn: "env"
// Each key becomes an environment variable automatically:
// process.env.DB_HOST = "localhost"
// process.env.DB_USER = "admin"
// No Variable Name needed - each JSON key becomes a separate env var
// Send secret directly to output
storeIn: "output"
// msg.payload will contain the secret value
[
{
"id": "inject-node",
"type": "inject",
"payload": "{}",
"wires": [["secrets-node"]]
},
{
"id": "secrets-node",
"type": "aws-secret-manager",
"awsConfig": "aws-config",
"secretId": "my-database-secret",
"secretIdType": "str",
"storeIn": "global",
"variableName": "dbCredentials",
"wires": [["debug-node"]]
}
]
-
msg.secretId
(optional): Secret ID if not configured in node
msg = {
secretId: "my-secret-name"
}
msg = {
payload: {
status: "Secret stored successfully",
secretId: "my-secret-name"
}
}
msg = {
payload: {
username: "admin",
password: "secret123",
host: "database.example.com"
}
}
msg = {
payload: {
error: "Error message"
}
}
- ✅ Use IAM roles when possible (recommended for EC2 instances)
- ✅ Store credentials in context variables rather than hardcoding
- ✅ Use environment variables for sensitive configuration
- ✅ Rotate access keys regularly
- ✅ Follow the principle of least privilege
- ✅ Enable AWS CloudTrail for audit logging
The node provides comprehensive error handling:
- Configuration errors: Missing or invalid AWS configuration
- Authentication errors: Invalid credentials or permissions
- Secret not found: Invalid secret ID or insufficient permissions
- Network errors: Connection issues with AWS
All errors are logged and sent in the message payload for downstream processing.
- Node.js >= 12.0.0
- Node-RED >= 2.0.0
- AWS account with Secrets Manager access
- Appropriate IAM permissions
Minimum required permissions:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue"
],
"Resource": "arn:aws:secretsmanager:region:account:secret:*"
}
]
}
MIT
Contributions are welcome! Please feel free to submit a Pull Request.
If you encounter any issues or have questions, please open an issue on GitHub.