Skip to main content

A Kubernetes operator that syncs and decrypts secrets from pass store git repositories

Project description

pass secrets operator

GitHub Release PyPI - License PyPI - Python Version Docker Pulls CircleCI

A Kubernetes operator to sync and decrypt secrets from a password store (pass) Git repository. This operator is proposed as a proof-of-concept and shouldn't be used in any production capacity.

While this approach to secrets management on Kubernetes is more technically challenging, the advantage is that we don't have to rely on a 3rd party SaaS platform, such as Vault or Doppler, to hold our secrets (the obvious benefits these platforms do provide, however, are better user and access management). We may also use this operator in an airgapped environment with a self-hosted git repository.

How it works

The following flowchart outlines how this operator reacts to PassSecret-related events and pass store updates.

pass operator flow diagram

From a high level, this operator runs git pull on an interval to grab updates from a git repository populated with encrypted secrets by pass. It maps secrets' paths to data values through the application of a PassSecret, a custom resource, such as the following.

apiVersion: secrets.premiscale.com/v1alpha1
kind: PassSecret
metadata:
  name: mysecret
  namespace: pass-operator-test
spec:
  encryptedData:
    mykey: premiscale/mydata
  managedSecret:
    metadata:
      name: mysecret
      namespace: pass-operator-test
    type: Opaque
    immutable: false

The above PassSecret manifest translates to the following Secret.

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
  namespace: pass-operator-test
stringData:
  mykey: <decrypted contents of premiscale/mydata>
immutable: false
type: Opaque

Installation

See the chart README for an overview of operator installation and configuration options.

Development

Unit tests

Run unit tests with

yarn test:unit

End-to-end tests

Run e2e tests against a live (local) environment with

yarn test:e2e

This command will

  1. Stand up a local 1-node minikube cluster with 4 cores, 4GiB memory and 30GiB storage. (Modify ./scripts/minikube.sh if these resources are unsuitable for your local development environment.)
  2. Create a localhost docker registry redirect container.
  3. Build both e2e (hosts a git repository with encrypted pass secrets that match paths found in ./src/test/data/crd) and operator container images, as well as push these images to the local redirect for minikube to access.
  4. Installs both e2e and pass-operator Helm charts.
  5. Run e2e tests.
  6. Tear down the cluster and local registry, as well as cleans up locally-built artifacts.

Coverage

Test coverage against the codebase with

poetry run coverage run -m pytest
poetry run coverage report -m pytest

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

pass_operator-0.4.5.tar.gz (24.9 kB view details)

Uploaded Source

Built Distribution

pass_operator-0.4.5-py3-none-any.whl (38.1 kB view details)

Uploaded Python 3

File details

Details for the file pass_operator-0.4.5.tar.gz.

File metadata

  • Download URL: pass_operator-0.4.5.tar.gz
  • Upload date:
  • Size: 24.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.10.6

File hashes

Hashes for pass_operator-0.4.5.tar.gz
Algorithm Hash digest
SHA256 74e9b71b54005c2eb9f078ba40f9030a2f67dce4a95d7297517268aba3bc5d36
MD5 3a95a775bfb0ef9ee5a4f0a4ca32dd8e
BLAKE2b-256 861e9c09e7183560a737162007b0bec304abdc3adb310ab5c038071fdf34ebf3

See more details on using hashes here.

File details

Details for the file pass_operator-0.4.5-py3-none-any.whl.

File metadata

File hashes

Hashes for pass_operator-0.4.5-py3-none-any.whl
Algorithm Hash digest
SHA256 b1cb2dc8d62355182b6d160625efeaa96887e3849452ee88c2d87e4c13a9c58a
MD5 e2344241d174fed998f42f32d180b293
BLAKE2b-256 b543a91acd9f36de710aff5189e68f2b52234ee58b8f10adc8b7c043864f6b73

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