Utility to decrypt and encrypt secrets using AWS KMS keys that is compatible with pydantic models
Project description
pydantic-kms-secrets
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
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | f1f84c574198f7defb1cb378839de7fbad4386154e6af1f284fe9a884cf3c455 |
|
MD5 | 7590330bf39ff3194f540025e80bda41 |
|
BLAKE2b-256 | 8ef426541c4916a0b571997e90db31653d1152e50ebd36b06002a603306aa283 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | e1e746320332a85f4a7b64bb005377a70df5153f40e40ad4ba0a715d996bf96b |
|
MD5 | e0820eed5074c8dfbd6a37a57d8a6dbd |
|
BLAKE2b-256 | 94c58b4ee3cddccd69ce4670c591d0cca024d2ceb8d1d5e3726eb84de2582c5c |