node-credstasher
Version:
A TypeScript implementation of credstash for storing and retrieving secrets using AWS KMS and DynamoDB.
215 lines (142 loc) • 4.85 kB
Markdown
# node-credstasher
A TypeScript implementation of the python [credstash](https://pypi.org/project/credstash/) for storing and retrieving secrets using AWS KMS and DynamoDB.
This code is based on the now defunct [node-credstash](https://github.com/rotaready/node-credstash) library, but has been updated to TypeScript with up-to-date dependencies.
## Setup
Before using credstasher, you need to:
1. Set up AWS credentials (AWS CLI, environment variables, or IAM roles)
2. Create a KMS key or use an existing one
3. 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:
```bash
npm install -g node-credstasher
# or
pnpm add -g node-credstasher
# or
bun add -g node-credstasher
```
After it is installed, you should be able to run the following to show the docs:
```bash
credstasher --help
```
Yuu can also run using `npx`, `pnpx`, etc. downloading it to run on the fly. This is kind of nice.
```bash
npx node-credstasher@latest --help
# or
pnpx node-credstasher@latest --help
# or
bunx node-credstasher@latest --help
```
### Commands
#### 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.
```bash
credstasher setup
```
#### Store a secret
```bash
credstasher put my-password "supersecret123"
```
### Retrieve a secret
```bash
credstasher get my-password
```
### List all secrets
```bash
credstasher list
```
### Delete a secret
```bash
credstasher delete mypassword
```
### CLI 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:
```bash
npm install node-credstasher
# or
pnpm add node-credstasher
# or
bun add node-credstasher
```
### Example
```typescript
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 to `region` value.
- `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 dynamodb
- `kmsEndpoint`: Custom endpoint URL for KMS
### Environment Variables
- `AWS_REGION`: Default AWS region
- `KMS_REGION`: Default AWS region for KMS
- `CREDSTASH_TABLE`: Default DynamoDB table name
- `CREDSTASH_KMS_KEY_ID`: Default KMS key ID
- `AWS_PROFILE`: Default AWS profile
- `DYNAMODB_ENDPOINT`: Custom endpoint URL for dynamodb
- `KMS_ENDPOINT`: Custom endpoint URL for KMS
## Development
### Build
```bash
bun run build
```
### Format and Lint
```bash
bun run format
bun run lint
```
### Check
```bash
bun run check
```
### Tests
See [LOCAL_TESTING.md](./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](https://bun.sh) is a fast all-in-one JavaScript runtime.