Skip to main content

Django app to create configurable anonymised DB dumps.

Project description

django-db-anonymiser

Django app to create configurable anonymised DB dumps.

django-db-anonymiser provides a django app with a management command dump_and_anonymise. This command runs a pg_dump against a postgresql DB, applies anonymisation functions to data dumped from the DB and then writes the anonymised dump to S3. See here for lite-api's example anonymisation configuration; https://github.com/uktrade/lite-api/blob/dev/api/conf/anonymise_model_config.yaml

This pattern is designed as a replacement for Lite's old DB anonymisation process (although it is general purpose and can be used for any django project which uses postgresql). The previous process was baked in to an airflow installation and involved making a pg_dump from production, anonymising that dump with python and pushing the file to S3. See; https://github.com/uktrade/lite-airflow-dags/blob/master/dags/export_lite_db.py

django-db-anonymiser follows the same overall pattern, but aims to achieve it through a django management command instead of running on top of airflow. In addition, the configuration for how DB columns are anonymised can be configured in simple YAML.

Note: This repository depends upon code forked from https://github.com/andersinno/python-database-sanitizer This is housed under the database_sanitizer directory and has been forked from the above repository because it is unmaintained.

Getting started

  • Add faker>=4.18.0, boto3>=1.26.17 to python requirements; it is assumed python/psycopg and co are already installed.
  • Either add this github repository as a submodule to your django application named django_db_anonymiser or install the python package (django-db-anonymiser)[https://pypi.org/project/django-db-anonymiser/] from PyPI.
  • Add django_db_anonymiser.db_anonymiser to INSTALLED_APPS
  • Set the following django settings;
    • DB_ANONYMISER_CONFIG_LOCATION - the location of your anonymisation yaml file
    • DB_ANONYMISER_AWS_ENDPOINT_URL - optional, custom URL for AWS (e.g. if using minio)
    • DB_ANONYMISER_AWS_ACCESS_KEY_ID - AWS access key ID for the S3 bucket to upload dumps to
    • DB_ANONYMISER_AWS_SECRET_ACCESS_KEY - AWS secret key for the S3 bucket to upload dumps to
    • DB_ANONYMISER_AWS_REGION - AWS region for the S3 bucket to upload dumps to
    • DB_ANONYMISER_AWS_STORAGE_BUCKET_NAME - AWS bucket name for the S3 bucket to upload dumps to
    • DB_ANONYMISER_DUMP_FILE_NAME - Name for dumped DB file
    • DB_ANONYMISER_AWS_STORAGE_KEY - optional, key under which file will be stored in AWS S3 bucket

Running tests

For local unit testing from the root of the repository run:

$ poetry run pytest django_db_anonymiser

Note: Currently for full test coverage, it is necessary to run tests in circleci, where we spin up a postgres db and test the db_anonymiser command directly

Publishing

Publishing to PyPI is currently a manual process:

  1. Acquire API token from Passman.
    • Request access from the SRE team.
    • Note: You will need access to the platform group in Passman.
  2. Run poetry config pypi-token.pypi <token> to add the token to your Poetry configuration.

Update the version, as the same version cannot be published to PyPI.

poetry version patch

More options for the version command can be found in the Poetry documentation. For example, for a minor version bump: poetry version minor.

Build the Python package.

poetry build

Publish the Python package.

Note: Make sure your Pull Request (PR) is approved and contains the version upgrade in pyproject.toml before publishing the package.

poetry publish

Check the PyPI Release history to make sure the package has been updated.

For an optional manual check, install the package locally and test everything works as expected.

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

django_db_anonymiser-0.3.1.tar.gz (30.6 kB view details)

Uploaded Source

Built Distribution

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

django_db_anonymiser-0.3.1-py3-none-any.whl (42.9 kB view details)

Uploaded Python 3

File details

Details for the file django_db_anonymiser-0.3.1.tar.gz.

File metadata

  • Download URL: django_db_anonymiser-0.3.1.tar.gz
  • Upload date:
  • Size: 30.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.4 CPython/3.10.12 Linux/6.8.0-1044-aws

File hashes

Hashes for django_db_anonymiser-0.3.1.tar.gz
Algorithm Hash digest
SHA256 4584c6e7d52691d27c019f0ad069e7e3fae64e379d5c7f70d3268ac3083022c3
MD5 aad5d6426f0280f60c90d3ceea5b09d8
BLAKE2b-256 aa8e7a18c5dac9e1fda9ad566c0135844cf9f243a2fc696bcda5e04e9fc23d8c

See more details on using hashes here.

File details

Details for the file django_db_anonymiser-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: django_db_anonymiser-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 42.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.4 CPython/3.10.12 Linux/6.8.0-1044-aws

File hashes

Hashes for django_db_anonymiser-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 7432361c9373abe68518643f43ffe67032b4d85b3538945a864bcbcbf126e209
MD5 41ba4852602aa7981672a0c246949b66
BLAKE2b-256 1812d0e24fd7bbe768dd6d94428d893c2ddd018496f6da5321076267fe6396d2

See more details on using hashes here.

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