whispr


Namewhispr JSON
Version 0.3.0 PyPI version JSON
download
home_pageNone
SummaryA CLI tool to whisper your secrets between secure vault and your local environment
upload_time2024-11-17 02:59:32
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseMIT
keywords code-security cybersecurity devsecops mitre-attack-framework no-plain-secrets whispr
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage
            [![Downloads](https://static.pepy.tech/badge/whispr/month)](https://pepy.tech/project/whispr)
[![Coverage Status](https://coveralls.io/repos/github/narenaryan/whispr/badge.svg)](https://coveralls.io/github/narenaryan/whispr)

# Whispr

![Logo](https://github.com/narenaryan/whispr/raw/main/logo.png)

Whispr (Pronounced as whisper) is a CLI tool to safely inject secrets from your favorite secret vault (Ex: AWS Secrets Manager, Azure Key Vault etc.) into your app's environment. This is very useful for enabling secure local software development.

Whispr uses keys (with empty values) specified in a `.env` file and fetches respective secrets from a vault, and sets them as environment variables before launching an application.

Key Features of Whispr:

* **Safe Secret Injection**: Fetch and inject secrets from your desired vault using HTTPS, SSL encryption, strict CERT validation.
* **Just In Time (JIT) Privilege**: Set environment variables for developers only when they're needed.
* **Secure Development**: Eliminate plain-text secret storage and ensure a secure development process.
* **Customizable Configurations**: Configure project-level settings to manage multiple secrets for multiple projects.
* **No Custom Scripts Required**: Whispr eliminates the need for custom bash scripts or cloud CLI tools to manage secrets, making it easy to get started.
* **Easy Installation**: Cross-platform installation with PyPi.

Supported Vault Technologies:

![Supported-vaults](https://github.com/narenaryan/whispr/raw/main/whispr-supported.png)


# Why use Whispr ?

The MITRE ATT&CK Framework Tactic 8 (Credential Access) suggests that adversaries can exploit plain-text secrets and sensitive information stored in files like `.env`. It is essential to avoid storing
sensitive information in unencrypted files. To help developers, Whispr can safely fetch and inject secrets from a vault into the current shell environment. This enables developers to securely manage
credentials and mitigate advisory exploitation tactics.


# Installation and Setup

## Installing Whispr

To get started with Whispr, simply run:

```bash
pip install whispr
```

## Configuring Your Project

**Step 1: Initialize Whispr**

Run `whispr init <vault_type>` in your terminal to create a `whispr.yaml` file in your project root. This file will store your configuration settings.

The available vault types are: `aws`, `azure`, and `gcp`.

**Example whispr.yaml contents (For: AWS):**
```yaml
env_file: '.env'
secret_name: <your_secret>
vault: aws
```
This default configuration will inject fetched secrets into `os.environ` of main process. If your app instead want to receive secrets as STDIN arguments, use `no_env: true` field.
This is a secure way than default control but app now should parse arguments itself.

```yaml
env_file: '.env'
secret_name: <your_secret>
vault: aws
no_env: true # Setting true will send KEY1=VAL1 secret pairs as command args
```

## Setting Up Your Injectable Secrets

**Step 2: Create or Configure a Secret File**

Create a new `.env` file with empty values for your secret keys. For example:

```bash
POSTGRES_USERNAME=
POSTGRES_PASSWORD=
```

**Note**: You can also control filename with `env_file` key in your `whispr.yaml`.

**Step 3: Authenticating to Your Vault (Ex:AWS)**

*   Authenticate to AWS using Short-term credentials.
*   Alternatively, set temporary AWS credentials using a config file or environment variables.

**Note**: Use respective authentication methods for other vaults.

## Launch any Application using Whispr

Now, you can run any app using: `whispr run '<your_app_command_with_args>'` (mind the single quotes around command) to inject your secrets before starting the subprocess.

Examples:
```bash
whispr run 'python main.py' # Inject secrets and run a Python program
whispr run 'node server.js --threads 4' # Inject secrets and run a Node.js express server
whispr run 'django manage.py runserver' # Inject secrets and start a Django server
whispr run '/bin/sh ./script.sh' # Inject secrets and run a custom bash script. Script should be permitted to execute
whispr run 'semgrep scan --pro' # Inject Semgrep App Token and scan current directory with Semgrep SAST tool.
```

## Programmatic Access

Whispr can also be used programmatically from Python code. See this guide for more information.

https://github.com/narenaryan/whispr/blob/docs/main/usage-guides/programmatic-access.md

# TODO

* Support HashiCorp Vault
* Support 1Password Vault

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "whispr",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "code-security, cybersecurity, devsecops, mitre-attack-framework, no-plain-secrets, whispr",
    "author": null,
    "author_email": "Naren Yellavula <naren.yellavula@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/70/07/f079d234f9276161404779cea54a95793efeafa29a4c938cd346dc33f2b5/whispr-0.3.0.tar.gz",
    "platform": null,
    "description": "[![Downloads](https://static.pepy.tech/badge/whispr/month)](https://pepy.tech/project/whispr)\n[![Coverage Status](https://coveralls.io/repos/github/narenaryan/whispr/badge.svg)](https://coveralls.io/github/narenaryan/whispr)\n\n# Whispr\n\n![Logo](https://github.com/narenaryan/whispr/raw/main/logo.png)\n\nWhispr (Pronounced as whisper) is a CLI tool to safely inject secrets from your favorite secret vault (Ex: AWS Secrets Manager, Azure Key Vault etc.) into your app's environment. This is very useful for enabling secure local software development.\n\nWhispr uses keys (with empty values) specified in a `.env` file and fetches respective secrets from a vault, and sets them as environment variables before launching an application.\n\nKey Features of Whispr:\n\n* **Safe Secret Injection**: Fetch and inject secrets from your desired vault using HTTPS, SSL encryption, strict CERT validation.\n* **Just In Time (JIT) Privilege**: Set environment variables for developers only when they're needed.\n* **Secure Development**: Eliminate plain-text secret storage and ensure a secure development process.\n* **Customizable Configurations**: Configure project-level settings to manage multiple secrets for multiple projects.\n* **No Custom Scripts Required**: Whispr eliminates the need for custom bash scripts or cloud CLI tools to manage secrets, making it easy to get started.\n* **Easy Installation**: Cross-platform installation with PyPi.\n\nSupported Vault Technologies:\n\n![Supported-vaults](https://github.com/narenaryan/whispr/raw/main/whispr-supported.png)\n\n\n# Why use Whispr ?\n\nThe MITRE ATT&CK Framework Tactic 8 (Credential Access) suggests that adversaries can exploit plain-text secrets and sensitive information stored in files like `.env`. It is essential to avoid storing\nsensitive information in unencrypted files. To help developers, Whispr can safely fetch and inject secrets from a vault into the current shell environment. This enables developers to securely manage\ncredentials and mitigate advisory exploitation tactics.\n\n\n# Installation and Setup\n\n## Installing Whispr\n\nTo get started with Whispr, simply run:\n\n```bash\npip install whispr\n```\n\n## Configuring Your Project\n\n**Step 1: Initialize Whispr**\n\nRun `whispr init <vault_type>` in your terminal to create a `whispr.yaml` file in your project root. This file will store your configuration settings.\n\nThe available vault types are: `aws`, `azure`, and `gcp`.\n\n**Example whispr.yaml contents (For: AWS):**\n```yaml\nenv_file: '.env'\nsecret_name: <your_secret>\nvault: aws\n```\nThis default configuration will inject fetched secrets into `os.environ` of main process. If your app instead want to receive secrets as STDIN arguments, use `no_env: true` field.\nThis is a secure way than default control but app now should parse arguments itself.\n\n```yaml\nenv_file: '.env'\nsecret_name: <your_secret>\nvault: aws\nno_env: true # Setting true will send KEY1=VAL1 secret pairs as command args\n```\n\n## Setting Up Your Injectable Secrets\n\n**Step 2: Create or Configure a Secret File**\n\nCreate a new `.env` file with empty values for your secret keys. For example:\n\n```bash\nPOSTGRES_USERNAME=\nPOSTGRES_PASSWORD=\n```\n\n**Note**: You can also control filename with `env_file` key in your `whispr.yaml`.\n\n**Step 3: Authenticating to Your Vault (Ex:AWS)**\n\n*   Authenticate to AWS using Short-term credentials.\n*   Alternatively, set temporary AWS credentials using a config file or environment variables.\n\n**Note**: Use respective authentication methods for other vaults.\n\n## Launch any Application using Whispr\n\nNow, you can run any app using: `whispr run '<your_app_command_with_args>'` (mind the single quotes around command) to inject your secrets before starting the subprocess.\n\nExamples:\n```bash\nwhispr run 'python main.py' # Inject secrets and run a Python program\nwhispr run 'node server.js --threads 4' # Inject secrets and run a Node.js express server\nwhispr run 'django manage.py runserver' # Inject secrets and start a Django server\nwhispr run '/bin/sh ./script.sh' # Inject secrets and run a custom bash script. Script should be permitted to execute\nwhispr run 'semgrep scan --pro' # Inject Semgrep App Token and scan current directory with Semgrep SAST tool.\n```\n\n## Programmatic Access\n\nWhispr can also be used programmatically from Python code. See this guide for more information.\n\nhttps://github.com/narenaryan/whispr/blob/docs/main/usage-guides/programmatic-access.md\n\n# TODO\n\n* Support HashiCorp Vault\n* Support 1Password Vault\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A CLI tool to whisper your secrets between secure vault and your local environment",
    "version": "0.3.0",
    "project_urls": {
        "Documentation": "https://github.com/narenaryan/whispr/blob/main/README.md",
        "Issues": "https://github.com/narenaryan/whispr/issues",
        "Source": "https://github.com/narenaryan/whispr"
    },
    "split_keywords": [
        "code-security",
        " cybersecurity",
        " devsecops",
        " mitre-attack-framework",
        " no-plain-secrets",
        " whispr"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "23b7ebe0a967a9cc51584fc72bb4e11a8101352852295a5d7352a7f4d32c9e67",
                "md5": "fa44d23adac00c9c10287c992bec2e94",
                "sha256": "40bc36cf77723ff03448f1ec490f32cf88e5199cd6bd6401eeec60b330427d82"
            },
            "downloads": -1,
            "filename": "whispr-0.3.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "fa44d23adac00c9c10287c992bec2e94",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 12259,
            "upload_time": "2024-11-17T02:59:30",
            "upload_time_iso_8601": "2024-11-17T02:59:30.746903Z",
            "url": "https://files.pythonhosted.org/packages/23/b7/ebe0a967a9cc51584fc72bb4e11a8101352852295a5d7352a7f4d32c9e67/whispr-0.3.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7007f079d234f9276161404779cea54a95793efeafa29a4c938cd346dc33f2b5",
                "md5": "0d538145a1418359738c02d1b2c5a069",
                "sha256": "d02e2ad9f22e4720802bd7d4414df67f3805483de7951bafcddca315bbbe30cf"
            },
            "downloads": -1,
            "filename": "whispr-0.3.0.tar.gz",
            "has_sig": false,
            "md5_digest": "0d538145a1418359738c02d1b2c5a069",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 165284,
            "upload_time": "2024-11-17T02:59:32",
            "upload_time_iso_8601": "2024-11-17T02:59:32.728807Z",
            "url": "https://files.pythonhosted.org/packages/70/07/f079d234f9276161404779cea54a95793efeafa29a4c938cd346dc33f2b5/whispr-0.3.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-17 02:59:32",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "narenaryan",
    "github_project": "whispr",
    "travis_ci": false,
    "coveralls": true,
    "github_actions": true,
    "requirements": [],
    "lcname": "whispr"
}
        
Elapsed time: 0.62691s