node-credstasher
v1.0.3
Published
A TypeScript implementation of credstash for storing and retrieving secrets using AWS KMS and DynamoDB.
Maintainers
Readme
node-credstasher
A TypeScript implementation of the python credstash for storing and retrieving secrets using AWS KMS and DynamoDB.
This code is based on the now defunct node-credstash library, but has been updated to TypeScript with up-to-date dependencies.
Setup
Before using credstasher, you need to:
- Set up AWS credentials (AWS CLI, environment variables, or IAM roles)
- Create a KMS key or use an existing one
- Optionally create a DynamoDB table (the library can create it for you, but it's better if you set up before)
CLI Usage
Install or not
You can install globally using the node package manager of your choice:
npm install -g node-credstasher
# or
pnpm add -g node-credstasher
# or
bun add -g node-credstasherAfter it is installed, you should be able to run the following to show the docs:
credstasher --helpYuu can also run using npx, pnpx, etc. downloading it to run on the fly. This is kind of nice.
npx node-credstasher@latest --help
# or
pnpx node-credstasher@latest --help
# or
bunx node-credstasher@latest --helpCommands
Setup the DynamoDB table
⚠️ I don't recommend using this. Set up your table in a more managed way, probably. But, you can do it this way if you like.
credstasher setupStore a secret
credstasher put my-password "supersecret123"Retrieve a secret
credstasher get my-passwordList all secrets
credstasher listDelete a secret
credstasher delete mypasswordCLI Options
Global options:
-r, --region <region>: AWS region (default: us-east-1)-t, --table <table>: DynamoDB table name (default: credential-store)-k, --kms-key-id <keyId>: KMS key ID or alias (default: alias/credstash)-p, --profile <profile>: AWS profile (default: default)-d, --dynamodb-endpoint <endpoint>: Custom endpoint URL for DynamoDB-e, --kms-endpoint <endpoint>: Custom KMS endpoint URL
Command-specific options:
put:-v, --key-version <version>: Specific version number-c, --context <context>: Encryption context as JSON string-a, --autoversion: Automatically increment version
get:-v, --key-version <version>: Specific version number-c, --context <context>: Encryption context as JSON string-n, --noline: Don't append newline to output
delete:-v, --key-version <version>: Specific version number-a, --all: Delete all versions
Library Usage
Install
Install with your favorite package manager:
npm install node-credstasher
# or
pnpm add node-credstasher
# or
bun add node-credstasherExample
import { CredstashClient } from 'node-credstasher';
const client = new CredstashClient({
region: 'us-east-1',
table: 'my-secrets',
kmsKeyId: 'alias/my-key'
});
// Store a secret
await client.putSecret('database-password', 'my-secret-password');
// Retrieve a secret
const password = await client.getSecret('database-password');
// List all secrets
const secrets = await client.listSecrets();
// Delete a secret
await client.deleteSecret('database-password');Configuration
The CredstashClient accepts the following configuration options:
region: AWS region (defaults to AWS_REGION env var or 'us-east-1')kmsRegion: AWS region for KMS, defaults toregionvalue.table: DynamoDB table name (defaults to CREDSTASH_TABLE env var or 'credential-store')kmsKeyId: KMS key ID or alias (defaults to CREDSTASH_KMS_KEY_ID env var or 'alias/credstash')profile: AWS profile (defaults to AWS_PROFILE env var or 'default')dynamodbEndpoint: Custom endpoint URL for dynamodbkmsEndpoint: Custom endpoint URL for KMS
Environment Variables
AWS_REGION: Default AWS regionKMS_REGION: Default AWS region for KMSCREDSTASH_TABLE: Default DynamoDB table nameCREDSTASH_KMS_KEY_ID: Default KMS key IDAWS_PROFILE: Default AWS profileDYNAMODB_ENDPOINT: Custom endpoint URL for dynamodbKMS_ENDPOINT: Custom endpoint URL for KMS
Development
Build
bun run buildFormat and Lint
bun run format
bun run lintCheck
bun run checkTests
See LOCAL_TESTING.md.
Security Features
- Uses AWS KMS for key encryption/decryption
- Stores encrypted data in DynamoDB
- Supports encryption context for additional security
- Uses AES-256-GCM for symmetric encryption
- Includes HMAC verification for data integrity
- Supports versioning of secrets
License
MIT
This project was created using bun init in bun v1.2.7. Bun is a fast all-in-one JavaScript runtime.
