Skip to main content

Burrow SDK for Python

Read secrets from a self-hosted RatelKey Burrow with a machine identity.

  • Single and structured secrets, and individual fields of a structured secret.
  • The machine's own access map (list_projects, list_secrets).
  • Certificate pinning, or standard CA trust (TlsMode).
  • An OIDC token instead of a key (Burrow.oidc).

Requirements

  • Python 3.9+.
  • One dependency: cryptography (Ed25519 signing and the certificate pin).

Install

pip install ratelkey-burrow-sdk

Bootstrap a machine

From the Burrow dashboard, Machines → Add machine, and run the install it gives you on the target host. The identity lands at ~/.burrow/burrows/<slug>/identity.json.

Quick start

from ratelkey_burrow import Burrow

# The single machine identity on this host (under ~/.burrow, or $BURROW_HOME).
burrow = Burrow()

# A single-value secret:
api_key = burrow.get_secret("payments/prod/API_KEY").value

# A structured secret — one read, projected locally (no re-fetch):
db = burrow.get_secret("payments/prod/DATABASE")
everything = db.to_dict()                                  # every field as name -> value
host = db.get_field("host")                                # one field
user, password = db.get_fields("username", "password")     # in order

# What this machine can read:
for p in burrow.list_projects():
    print(p.project, p.categories)

Point it at a specific identity by selector or path:

Burrow("burrow-a1b2c3d4e5f60718")                            # slug / name / machine id / URL
Burrow("/home/you/.burrow/burrows/burrow-a1b2c3d4e5f60718")  # path (a burrow dir or identity.json)

Without ~/.burrow

For an app that manages its own key material:

import os
from ratelkey_burrow import Burrow

burrow = Burrow.connect(
    burrow_url="https://burrow.internal:12010",
    machine_id="...",
    private_key_pem=os.environ["BURROW_MACHINE_KEY"],  # PKCS#8 PEM
)

OIDC

import os
from ratelkey_burrow import Burrow

burrow = Burrow.oidc(
    burrow_url="https://burrow.example.com",
    fingerprint=os.environ.get("BURROW_FINGERPRINT"),  # omit for a publicly-trusted certificate
)

api_key = burrow.get_secret("payments/prod/API_KEY").value

audience defaults to burrow_url. GitHub Actions currently requires permissions: id-token: write.

Certificate trust

from ratelkey_burrow import Burrow, TlsMode

burrow = Burrow(tls=TlsMode.SystemTrust)
  • TlsMode.Pinned (default) — trust-on-first-use, stored at ~/.burrow/burrows/<slug>/known_cert.
  • TlsMode.PinnedTo("aa:bb:...") — a fixed fingerprint (from the Burrow's network settings).
  • TlsMode.SystemTrust — CA + hostname verification, for a Burrow on a custom domain or Let's Encrypt.
  • TlsMode.Insecure — no verification; accepts any certificate. Opt-in only, for a network you already trust. Shortcut: Burrow().insecure_tls(True).

Errors

Every failure is a BurrowError: BurrowAuthError (401), BurrowForbiddenError (403, no grant), BurrowNotFoundError (404), BurrowServerError (5xx), BurrowCertificateError (pin mismatch), BurrowTransportError (unreachable / unparsable), BurrowIdentityError (no/ambiguous/invalid identity), plus two projection errors on the result handle — SecretShapeError (e.g. .value on a structured secret) and FieldNotFoundError. The message carries the Burrow's own reason.

Build

python -m build

Release files for ratelkey-burrow-sdk 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ratelkey-burrow-sdk 0.1.1
File Size Uploaded
ratelkey_burrow_sdk-0.1.1.tar.gz 20.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ratelkey-burrow-sdk 0.1.1
File Interpreter ABI Platform
ratelkey_burrow_sdk-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size:46.0 kB

Release files / ratelkey_burrow_sdk-0.1.1.tar.gz

Download URL ratelkey_burrow_sdk-0.1.1.tar.gz
Size 20.3 kB
Tags Source
SHA-256 checksum
How to use checksums
f2a38bf42c64938a4493da5c452bcb70ca1f19ad380c2c7dfecf1f1dbebf3476
BLAKE2b-256 checksum
How to use checksums
08f1cc20819f4040fc2928723ec91e56ceecadd9c48f3d62bc76f77243900fc3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via ktor-client

Release files / ratelkey_burrow_sdk-0.1.1-py3-none-any.whl

Download URL ratelkey_burrow_sdk-0.1.1-py3-none-any.whl
Size 25.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
aaad45d778a4121b65d6075fc775de690102ee400391e13d0f074c3ba2a86dea
BLAKE2b-256 checksum
How to use checksums
163a2a60e38844a650d2ee86d78ce2cf37e5dee9aeb7d9d5e5c2bd86c267af79
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via ktor-client

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page