Skip to content

creds-vault is a cli utility to sync secrets to local env files.

License

Notifications You must be signed in to change notification settings

mirzamudassir/secrets-cli

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

28 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Creds Vault πŸ”

PyPI version Python Support License: MIT

A secure command-line utility for sharing .env files across development teams using GitHub Gists with client-side AES-256 encryption.

πŸš€ Features

  • πŸ”’ Client-side Encryption: AES-256 encryption with PBKDF2 key derivation
  • πŸ†“ Free Storage: Uses GitHub Gists (no additional service costs)
  • πŸ‘₯ Team-friendly: Simple sharing via gist IDs
  • πŸ›‘οΈ Zero-knowledge: GitHub never sees your plaintext secrets
  • πŸ“ Project-aware: Remembers vault configuration per project
  • πŸ” Secure by Default: Restricted file permissions (600)

πŸ›‘οΈ Security Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    AES-256     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    HTTPS    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Local .env    β”‚ ──────────────▢│  Encrypted Blob  β”‚ ───────────▢│ GitHub Gist β”‚
β”‚   (plaintext)   β”‚   Client-side  β”‚   (ciphertext)   β”‚             β”‚  (private)  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜             β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  • Your secrets never leave your machine in plaintext
  • Password-based encryption with 100,000 PBKDF2 iterations
  • Salt-based security prevents rainbow table attacks
  • Private GitHub Gists for encrypted storage

πŸ“¦ Installation

Option 1: Install from PyPI (Recommended)

pip install creds-vault

Option 2: Install from Source

git clone https://github.com/mirzamudassir/creds-vault.git
cd creds-vault
make install

Option 3: Development Installation

git clone https://github.com/mirzamudassir/creds-vault.git
cd creds-vault
make install-dev

βš™οΈ Setup

1. GitHub Token Setup

Create a GitHub personal access token with gist scope:

  1. Go to GitHub Settings β†’ Tokens
  2. Click "Generate new token (classic)"
  3. Select only the gist scope
  4. Copy the token
# Set environment variable
export GITHUB_TOKEN="ghp_your_token_here"

# Make it permanent
echo 'export GITHUB_TOKEN="ghp_your_token_here"' >> ~/.bashrc
source ~/.bashrc

2. Verify Installation

secrets --version
secrets --help

πŸ”„ Usage

First-time Setup (Project Owner)

# Navigate to your project
cd my-awesome-project

# Create or edit your .env file
cat > .env << EOF
DATABASE_URL=postgresql://localhost:5432/myapp
API_KEY=sk-1234567890abcdef
STRIPE_SECRET=sk_test_xyz123
JWT_SECRET=super-secret-jwt-key
EOF

# Initialize encrypted vault
secrets init

# Output:
# βœ… Successfully initialized encrypted secrets vault
# πŸ”’ Content encrypted with AES-256
# πŸ“ Gist ID: xxxxxx
# 
# πŸ“€ Share this command with your team:
#    secrets pull --gist-id xxxxxx
# 
# ⚠️  Important: Share the vault password securely!

Team Member Setup

# Navigate to project directory
cd my-awesome-project

# Pull secrets (replace with actual gist ID)
secrets pull --gist-id xxxxxx
# Enter vault password: β€’β€’β€’β€’β€’β€’β€’β€’β€’β€’

# βœ… Successfully pulled and decrypted .env
# πŸ“ Saved project configuration

Daily Workflow

# Check project status
secrets status

# Pull latest changes
secrets pull

# Make local changes to .env
echo "NEW_FEATURE_FLAG=true" >> .env

# Push changes to vault
secrets push

# Check what's configured
secrets status

πŸ“‹ Command Reference

secrets init

Initialize encrypted vault with current .env file.

secrets init [--filename .env.local]

Options:

  • --filename: Specify custom env file name (default: .env)

secrets push

Push local env file to vault.

secrets push [--filename .env.local]

Options:

  • --filename: Specify custom env file name (default: .env)

secrets pull

Pull env file from vault.

secrets pull [--gist-id ID] [--filename .env] [--force]

Options:

  • --gist-id: Gist ID (required for first-time setup)
  • --filename: Custom filename (default: auto-detect)
  • --force: Overwrite without confirmation

secrets status

Show project status and configuration.

secrets status

πŸ—οΈ Project Structure

After installation, your project will have:

your-project/
β”œβ”€β”€ .env                     # Your secrets file
β”œβ”€β”€ .gitignore              # Should include .env
└── (other project files)

~/.creds-vault/
└── config.json             # Project β†’ gist mappings

πŸ”’ Security Best Practices

Password Security

  • Use strong passwords: Minimum 12 characters with mixed case, numbers, symbols
  • Unique passwords: Don't reuse passwords from other services
  • Secure sharing: Use password managers or secure channels to share vault passwords
  • Regular rotation: Consider rotating vault passwords periodically

GitHub Token Security

  • Minimal permissions: Only grant gist scope
  • Regular rotation: Rotate tokens every 3-6 months
  • Secure storage: Never commit tokens to code repositories
  • Team vs individual: Consider using team-specific tokens for organizations

File Security

  • Gitignore: Always add .env* to your .gitignore
  • Permissions: Tool automatically sets secure permissions (600)
  • Cleanup: Remove .env files when no longer needed

🚨 Security Considerations

βœ… What's Protected

  • Plaintext secrets: Never transmitted or stored in the cloud
  • Man-in-the-middle: HTTPS protects data in transit
  • GitHub breaches: Encrypted data remains secure
  • Token compromise: Attackers only see encrypted blobs

⚠️ Limitations

  • Password security: Vault security depends on password strength
  • Local compromise: If your machine is compromised, local files are at risk
  • Social engineering: Sharing passwords insecurely can compromise vaults
  • GitHub availability: Service depends on GitHub being accessible

🏒 Compliance

  • Development environments: Suitable for dev/staging secrets
  • Production secrets: Consider dedicated secret management for production
  • Audit requirements: Tool doesn't provide audit logs (GitHub does)
  • Regulatory compliance: Evaluate against your specific requirements

πŸ› οΈ Development

Setup Development Environment

git clone https://github.com/mirzamudassir/creds-vault.git
cd creds-vault
make install-dev

Run Tests

make test

Code Quality

make lint          # Run linting
make format        # Format code
make check         # Lint + test

Build and Release

make build         # Build distribution
make publish       # Publish to PyPI

πŸ”§ Advanced Usage

Custom Filenames

# Initialize with custom filename
secrets init --filename .env.production

# Push/pull custom files
secrets push --filename .env.local
secrets pull --filename .env.staging

Multiple Projects

The tool automatically manages different vaults per project:

cd project-a
secrets init        # Creates vault A

cd ../project-b  
secrets init        # Creates vault B

secrets status      # Shows project B config
cd ../project-a
secrets status      # Shows project A config

CI/CD Integration

# In CI/CD pipeline
export GITHUB_TOKEN="${{ secrets.GITHUB_TOKEN }}"
secrets pull --gist-id $VAULT_ID --force

πŸ› Troubleshooting

Common Issues

"Invalid GitHub token"

# Check token is set
echo $GITHUB_TOKEN

# Verify token has gist scope
curl -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/user

"Project not initialized"

# Initialize new vault
secrets init

# Or link to existing vault
secrets pull --gist-id your-gist-id

"Decryption failed"

# Wrong password - try again
secrets pull

# Vault corrupted - contact vault creator

"File permission denied"

# Fix file permissions
chmod 600 .env

Debug Mode

# Enable verbose logging
export DEBUG=1
secrets status

🀝 Contributing

We welcome contributions! Please see our Contributing Guide for details.

Quick Start

git clone https://github.com/mirzamudassir/creds-vault.git
cd creds-vault
make install-dev
make test

Reporting Issues

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ™ Acknowledgments

  • cryptography: For robust encryption primitives
  • requests: For HTTP client functionality
  • GitHub: For providing free Gist storage
  • Python community: For excellent tooling and libraries

πŸ“š Resources


⭐ Star us on GitHub | πŸ“– Read the Docs | πŸ› Report Issues

Made with ❀️ for developers who care about security

About

creds-vault is a cli utility to sync secrets to local env files.

Resources

License

Stars

Watchers

Forks

Packages

No packages published