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.
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.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ratelkey_burrow_sdk-0.1.0.tar.gz | 19.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ratelkey_burrow_sdk-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size:44.6 kB
Release files / ratelkey_burrow_sdk-0.1.0.tar.gz
| Download URL | ratelkey_burrow_sdk-0.1.0.tar.gz |
|---|---|
| Size | 19.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
dbc1672ddf90bb3d81d68d45f53cbe68ef4983f35daebac3bb448a17e1f27d4c
|
|
BLAKE2b-256 checksum How to use checksums |
59d6c0611d6fa5eef5850bcad34a86b30deaeedcd7fa199988b24006b1416f82
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
ktor-client
|
Release files / ratelkey_burrow_sdk-0.1.0-py3-none-any.whl
| Download URL | ratelkey_burrow_sdk-0.1.0-py3-none-any.whl |
|---|---|
| Size | 25.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
60165098e5d531f5063f5cccce2caa93bf76e2bc2d25fc06d850b4dfc19d14fa
|
|
BLAKE2b-256 checksum How to use checksums |
d2c2656548821b8184f6ea702ee96e57713e291ee8f5e0e976db0aeda5d266c0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
ktor-client
|