Skip to main content

Utility to decrypt and encrypt secrets using AWS KMS keys that is compatible with pydantic models

Project description

pydantic-kms-secrets

PyPI version Upload Python Package codecov

Utility to decrypt and encrypt secrets using AWS KMS keys that also integrates with pydantic models which allows for encrypted values to be stored in .env files and be decrypted at runtime.

Installation

From PyPi:

$ pip install pydantic-kms-secrets

Usage

CLI

Encrypt a secret:

$ pks -k your-kms-key-id -v my-secret-password -e

Decrypt a secret:

$ pks -k your-kms-key-id -v your-encrypted-secret -d

Help docs:

$ pks --help
usage: pks [-h] [-k KEY_ID] -v VALUE [-e] [-d]

Tool to encrypt and decrypt secrets via a KMS key

optional arguments:
  -h, --help            show this help message and exit
  -k KEY_ID, --key-id KEY_ID
                        ID of the KMS key to use
  -v VALUE, --value VALUE
                        The value to be encrypted
  -e, --encrypt         Set to encrypt value
  -d, --decrypt         Set to decrypt value

Pydantic

Pydantic KMS Secrets is able to integrate and add functionality on top of Pydantic's dotenv extension by allowing you to store encrypted values in your .env files and decrypt them at runtime. A basic implementation would look something like:

Pydantic Settings Model

from pydantic import BaseSettings
from pydantic_kms_secrets import KMSSecretStr, decrypt_kms_secrets


class Settings(BaseSettings):
    env: str
    secrets_kms_key_id: str  # This model attribute must exist to decrypt secrets
    kms_secret_1: KMSSecretStr
    kms_secret_2: KMSSecretStr

    class Config:
        env_file = ".env"

# Don't forget to call decrypt_kms_secrets, if you don't the secrets will not be decrypted
settings = decrypt_kms_secrets(Settings())

.env File

ENV="prod"

SECRETS_KMS_KEY_ID="your-kms-key-id"  # This environment variable must be set to decrypt secrets
KMS_SECRET_1="my-first-encrypted-secret"
KMS_SECRET_2="my-second-encrypted-secret"

KMSSecretStr Class

The KMSSecretStr class is almost identical to the SecretStr type in pydantic.

# This example uses the settings value from the python example above

# Standard access methods will not display the secret
print(settings)
#> env='prod' secrets_kms_key_id='your-kms-key-id' kms_secret_1=KMSSecretStr('**********') kms_secret_2=KMSSecretStr('**********')
print(settings.kms_secret_1)
#> **********
print(settings.dict())
"""
{
    'env': 'prod',
    'secret_kms_key_id': 'your-kms-key-id',
    'kms_secret_1': KMSSecretStr('**********'),
    'kms_secret_2': KMSSecretStr('**********'),
}
"""
print(settings.json())
#> {"env": "prod", "secret_kms_key_id": "your-kms-key-id", "kms_secret_1": "**********", "kms_secret_2": "**********"}

# Use get_secret_value method to see the secret's content.
print(settings.kms_secret_1.get_secret_value())
#> my-first-encrypted-secret
print(settings.kms_secret_2.get_secret_value())
#> my-second-encrypted-secret

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

pydantic_kms_secrets-0.3.0.tar.gz (4.4 kB view details)

Uploaded Source

Built Distribution

pydantic_kms_secrets-0.3.0-py3-none-any.whl (6.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pydantic_kms_secrets-0.3.0.tar.gz
  • Upload date:
  • Size: 4.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.11

File hashes

Hashes for pydantic_kms_secrets-0.3.0.tar.gz
Algorithm Hash digest
SHA256 f1f84c574198f7defb1cb378839de7fbad4386154e6af1f284fe9a884cf3c455
MD5 7590330bf39ff3194f540025e80bda41
BLAKE2b-256 8ef426541c4916a0b571997e90db31653d1152e50ebd36b06002a603306aa283

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pydantic_kms_secrets-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 6.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.11

File hashes

Hashes for pydantic_kms_secrets-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e1e746320332a85f4a7b64bb005377a70df5153f40e40ad4ba0a715d996bf96b
MD5 e0820eed5074c8dfbd6a37a57d8a6dbd
BLAKE2b-256 94c58b4ee3cddccd69ce4670c591d0cca024d2ceb8d1d5e3726eb84de2582c5c

See more details on using hashes here.

Supported by

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