Skip to main content

A decorator to generate redacted and nicely formatted log entries

Project description

Tests Source code PyPI releases License: AGPL v3 hack.d Lawrence McDaniel

A Python decorator to generate redacted and nicely formatted log entries. Works on all callables: class, class methods, Python module functions. Recursively redacts Python dictionary key values based on a customizable list of case-insensitive keys. Prevents your sensitive application data like cloud provider key-pairs from leaking into your application logs.

Usage

As a decorator

from secure_logger.decorators import secure_logger

class Foo(object):

    @secure_logger()
    def bar(self, dict_data, list_data):
        pass

# call your method, passing some sensitive data
dict_data = {
    'not_a_sensitive_key': 'you-can-see-me',
    'aws-access-key_id': conf.AWS_ACCESS_KEY_ID,
    'aws-secret-access-key': conf.AWS_SECRET_ACCESS_KEY
}
list_data = ['foo', 'bar']
foo = Foo()
foo.bar(dict_data=dict_data, list_data=list_data)

Log output:

INFO:secure_logger: __main__.Foo().bar()  keyword args: {
    "dict_data": {
        "not_a_sensitive_key": "you-can-see-me",
        "aws-access-key-id": "*** -- secure_logger() -- ***",
        "aws-secret-access-key": "*** -- secure_logger() -- ***"
    },
    "list_data": [
        "foo",
        "bar"
    ]
}

As library functions

from secure_logger.masked_dict import masked_dict, masked_dict2str

dict_data = {
    'not_a_sensitive_key': 'you-can-see-me',
    'aws-access-key_id': conf.AWS_ACCESS_KEY_ID,
    'aws-secret-access-key': conf.AWS_SECRET_ACCESS_KEY
}
print(masked_dict2str(dict_data))

Output:

{
    "not_a_sensitive_key": "you-can-see-me",
    "aws-access-key-id": "*** -- secure_logger() -- ***",
    "aws-secret-access-key": "*** -- secure_logger() -- ***"
}

Installation

pip install secure-logger

Configuration

secure_logger accepts optional parameters.

  • sensitive_keys: a Python list of dictionary keys. Not case sensitive.

  • message: a string value that will replace the sensitive key values

  • indent: number of characters to indent JSON string output when logging output

class MyClass():

    @secure_logger(sensitive_keys=["password", "token", "crown_jewels"], message="***", indent=4)
    def another_def(self):
         pass

Configuration Defaults

DEFAULT_REDACTION_MESSAGE = "*** -- secure_logger() -- ***"
DEFAULT_INDENT = 4
DEFAULT_SENSITIVE_KEYS = [
    "password",
    "token",
    "client_id",
    "client_secret",
    "Authorization",
    "secret",
    "access_key_id",
    "secret_access_key",
    "access-key-id",
    "secret-access-key",
    "aws_access_key_id",
    "aws_secret_access_key",
    "aws-access-key-id",
    "aws-secret-access-key",
]

Contributing

Pull requests are welcome, and you can also contact Lawrence McDaniel directly.

Getting Started With Local development

# Run these from within your edx-platform virtual environment
python3 -m venv venv
source venv/bin/activate

pip install -r requirements/local.txt
pip install pre-commit black flake8
pre-commit install

Local development good practices

  • run black on modified code before committing.

  • run flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics

  • run flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics

  • run pre-commit run --all-files before pushing. see: https://pre-commit.com/

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

secure-logger-0.1.17.tar.gz (22.1 kB view details)

Uploaded Source

Built Distribution

secure_logger-0.1.17-py3-none-any.whl (19.7 kB view details)

Uploaded Python 3

File details

Details for the file secure-logger-0.1.17.tar.gz.

File metadata

  • Download URL: secure-logger-0.1.17.tar.gz
  • Upload date:
  • Size: 22.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for secure-logger-0.1.17.tar.gz
Algorithm Hash digest
SHA256 1ac323d2ccc1ffbbae1efbddc19785979d43973d0d88aff021841b5acf42ecfe
MD5 6b8094cede71119a84be99ed24f2300d
BLAKE2b-256 710e575eca7ca1912f4ae79007e57c266618c68b5907684425d1f59f6324446a

See more details on using hashes here.

Provenance

File details

Details for the file secure_logger-0.1.17-py3-none-any.whl.

File metadata

File hashes

Hashes for secure_logger-0.1.17-py3-none-any.whl
Algorithm Hash digest
SHA256 99e62b4e8cce1e6d56e0d53330ad3c1ccf340cca508472bec73ced7c40801a20
MD5 b0691ebc487b96a2523e738ed714f157
BLAKE2b-256 c03b85fa383cd4d5017accc4e2541b965cd8b148ae2ddcaf8560f9ae863b45e8

See more details on using hashes here.

Provenance

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