Skip to main content

A new Python project.

Project description

coreason-vault (The Safe)

License CI Status Code Style: Ruff Documentation

The centralized guardian of secrets for the CoReason platform.

coreason-vault manages secrets at rest and in memory, replacing legacy local encryption and unsafe environment variable practices with a robust, centralized Vault-based architecture.

Mission

  • Secure Retrieval: Fetch API keys and database credentials securely from HashiCorp Vault.
  • Key Rotation & Leases: Handle dynamic secrets with lease management.
  • Encryption as a Service (EaaS): Delegate encryption of sensitive user data to Vault's Transit Engine, ensuring the application never handles encryption keys.

Features

  • "The Safe" Philosophy: Application code never sees long-lived credentials or performs its own encryption.
  • Transit Engine Integration: Replaces local crypto.py by offloading encryption/decryption to Vault.
  • Just-in-Time Secrets: Fetches secrets on demand with caching (TTL ~60s) to prevent API hammering.
  • Dynamic Secrets: Supports retrieval of dynamic secrets with lease information.
  • Automated Authentication: Seamlessly handles AppRole (local/VM) and Kubernetes (Prod) authentication with auto-renewal.
  • Resilience: Built-in retries and circuit breaking for Vault connection issues.

Installation

pip install coreason-vault

Usage

from coreason_vault import VaultManager, VaultConfig
from coreason_vault.exceptions import SecretNotFoundError

# 1. Initialize
# Automatically reads configuration from environment variables:
# VAULT_ADDR, VAULT_ROLE_ID/SECRET_ID (or K8S Auth), etc.
config = VaultConfig()
vault = VaultManager(config)

# 2. Fetch Secret (KV Version 2)
try:
    # Fetches from 'secret/data/coreason/services/openai' (mount point defaults to 'secret')
    creds = vault.secrets.get("coreason/services/openai")
    print(f"Using API Key: {creds['api_key'][:4]}...")
except SecretNotFoundError:
    print("Fatal: OpenAI credentials missing")

# 3. Encrypt Sensitive Data (Transit Engine)
# The app never sees the encryption key. Vault handles the cryptography.
ciphertext = vault.cipher.encrypt(
    plaintext="Sensitive Patient Data",
    key_name="patient-data-key",
    context="user_123"  # Optional: Key derivation context for extra security
)
print(f"Stored in DB: {ciphertext}")
# Output example: vault:v1:QmF...

# 4. Decrypt Data
original_plaintext = vault.cipher.decrypt(
    ciphertext=ciphertext,
    key_name="patient-data-key",
    context="user_123"
)
print(f"Decrypted: {original_plaintext}")

Configuration

The library uses pydantic-settings to load configuration from environment variables.

Variable Description Default
VAULT_ADDR Required. The URL of the Vault server. -
VAULT_NAMESPACE The Vault namespace (Enterprise/Cloud). None
VAULT_ROLE_ID AppRole Role ID. None
VAULT_SECRET_ID AppRole Secret ID. None
VAULT_K8S_ROLE Kubernetes Role Name (for K8s auth). None
KUBERNETES_SERVICE_ACCOUNT_TOKEN K8s SA Token (injected by K8s). None
VAULT_MOUNT_POINT KV v2 Mount Point. secret
VAULT_VERIFY_SSL Verify SSL certificates. True
VAULT_TOKEN_TTL Token validation interval in seconds. 60

License

This software is licensed under the Prosperity Public License 3.0. Commercial use beyond a 30-day trial requires a separate license. See LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

coreason_vault-0.3.0.tar.gz (12.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

coreason_vault-0.3.0-py3-none-any.whl (17.4 kB view details)

Uploaded Python 3

File details

Details for the file coreason_vault-0.3.0.tar.gz.

File metadata

  • Download URL: coreason_vault-0.3.0.tar.gz
  • Upload date:
  • Size: 12.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for coreason_vault-0.3.0.tar.gz
Algorithm Hash digest
SHA256 3a3756e097fb14b7e1fdbb70586eb755c529308d3647ca295a29498a3d9c4416
MD5 d9cd22de6ac9c9b9304090dd09d255a2
BLAKE2b-256 6448b73f0f17636f85e681da1116b038310942ea1d0f0283a120ecd44ee0d2f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for coreason_vault-0.3.0.tar.gz:

Publisher: publish.yml on CoReason-AI/coreason-vault

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file coreason_vault-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: coreason_vault-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 17.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for coreason_vault-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dd9e495431a7e60037431b56ad3f9ab2695ea3b98d9843b3ae6932d4182805de
MD5 59f774e678f400099bb7f9395c8e0052
BLAKE2b-256 8371e5a1922108a0294055e4de7aab33be21601bf86ae0c27062184f904ed01b

See more details on using hashes here.

Provenance

The following attestation bundles were made for coreason_vault-0.3.0-py3-none-any.whl:

Publisher: publish.yml on CoReason-AI/coreason-vault

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page