Hanzo KMS is a centralized secret management platform for the Hanzo ecosystem.
<!-- Updated: 2026-03-26T15:03:36Z -->
Category: Hanzo Ecosystem Related Skills: hanzo/hanzo-id.md, hanzo/hanzo-platform.md, hanzo/hanzo-vault.md, hanzo/hanzo-k8s.md
Hanzo KMS is a centralized secret management platform for the Hanzo ecosystem. Fork of Hanzo KMS with Hanzo branding, 9 ported Vault subsystems, Universal Auth, and K8s-native secret sync via KMSSecret CRD. Live at kms.hanzo.ai. Every secret in the Hanzo stack flows through KMS -- no plaintext credentials in manifests, ever.
hanzo-paas not paas)| Item | Value | |------|-------| | UI | https://kms.hanzo.ai | | API | https://kms.hanzo.ai/api/v1 | | Auth | Universal Auth (client ID + secret) | | K8s CRD | KMSSecret | | Go SDK | github.com/hanzoai/kms-go-sdk | | Node SDK | @hanzo/kms-node-sdk | | Python SDK | hanzo-kms (pip) | | Upstream | Hanzo KMS | | Repo | github.com/hanzoai/kms | | K8s manifests | universe/infra/k8s/kms/ | | Image | ghcr.io/hanzoai/kms:latest | | Operator | hanzoai/kms-operator | | Backend | Node.js/Fastify/TypeScript | | Frontend | React 18/Vite | | Database | PostgreSQL + Redis |
# Login via Universal Auth
export KMS_TOKEN=$(curl -s -X POST https://kms.hanzo.ai/api/v1/auth/universal-auth/login \
-H "Content-Type: application/json" \
-d '{"clientId": "'$KMS_CLIENT_ID'", "clientSecret": "'$KMS_CLIENT_SECRET'"}' \
| jq -r '.accessToken')
# Fetch secrets
curl -s https://kms.hanzo.ai/api/v1/secrets \
-H "Authorization: Bearer ${KMS_TOKEN}" \
-G -d "workspaceId=${PROJECT_ID}&environment=production"
import kms "github.com/hanzoai/kms-go-sdk"
client := kms.NewClient(kms.Config{
SiteURL: "https://kms.hanzo.ai",
ClientID: os.Getenv("KMS_CLIENT_ID"),
ClientSecret: os.Getenv("KMS_CLIENT_SECRET"),
})
secret, err := client.GetSecret(kms.GetSecretOptions{
ProjectID: "hanzo-paas",
Environment: "production",
SecretName: "DATABASE_URL",
})
import { KMSClient } from "@hanzo/kms-node-sdk"
const client = new KMSClient({
siteUrl: "https://kms.hanzo.ai",
clientId: process.env.KMS_CLIENT_ID!,
clientSecret: process.env.KMS_CLIENT_SECRET!,
})
const secret = await client.getSecret({
projectId: "hanzo-paas",
environment: "production",
secretName: "DATABASE_URL",
})
from hanzo_kms import KMSClient
client = KMSClient(
site_url="https://kms.hanzo.ai",
client_id=os.environ["KMS_CLIENT_ID"],
client_secret=os.environ["KMS_CLIENT_SECRET"],
)
secret = client.get_secret(
project_id="hanzo-paas",
environment="production",
secret_name="DATABASE_URL",
)
The KMS operator watches KMSSecret resources and auto-syncs to K8s Secrets:
apiVersion: kms.hanzo.ai/v1
kind: KMSSecret
metadata:
name: my-app-secrets
namespace: hanzo
spec:
project: hanzo-paas
environment: production
syncInterval: 5m
secretRef:
name: my-app-secrets # K8s Secret created/updated
secrets:
- DATABASE_URL
- REDIS_URL
- HANZO_API_KEY
Deployments reference the synced secret:
spec:
containers:
- name: my-app
envFrom:
- secretRef:
name: my-app-secrets
# values.yaml for kms-standalone chart
kms:
autoBootstrap:
additionalOrganizations:
- hanzo
- lux
- zoo
additionalOrganizationAdminEmails:
- [email protected]
additionalOrganizationsTokenSecretKey: token
# .github/workflows/deploy.yml
jobs:
deploy:
steps:
- name: Login to KMS
run: |
export KMS_TOKEN=$(curl -s -X POST $KMS_URL/api/v1/auth/universal-auth/login \
-d '{"clientId":"${{ secrets.KMS_CLIENT_ID }}","clientSecret":"${{ secrets.KMS_CLIENT_SECRET }}"}' \
| jq -r '.accessToken')
echo "KMS_TOKEN=$KMS_TOKEN" >> $GITHUB_ENV
- name: Fetch deploy secrets
run: |
DOCKERHUB_TOKEN=$(curl -s "$KMS_URL/api/v1/secrets/raw/DOCKERHUB_TOKEN?workspaceId=$PROJECT_ID&environment=production" \
-H "Authorization: Bearer $KMS_TOKEN" | jq -r '.secret.secretValue')
| Variable | Required | Purpose | |----------|----------|---------| | ENCRYPTION_KEY | Yes | 16-byte hex key for platform encryption | | AUTH_SECRET | Yes | JWT signing secret | | DB_CONNECTION_URI | Yes | PostgreSQL connection string | | REDIS_URL | Yes | Redis connection string | | SITE_URL | Yes | Base URL for KMS frontend |
| Issue | Cause | Solution | |-------|-------|----------| | Slug error on project creation | Slug < 5 chars | Use hanzo-paas not paas | | Universal Auth login fails | Wrong client credentials | Regenerate in KMS UI | | KMSSecret not syncing | Operator not running | Check kms-operator pod | | Token key mismatch | Custom bootstrap template | Set additionalOrganizationsTokenSecretKey | | HSM connection failed | Wrong PKCS#11 path | Verify HSM_LIBRARY_PATH and slot number |
hanzo/hanzo-id.md -- IAM (KMS uses IAM for user auth)hanzo/hanzo-vault.md -- PCI card tokenizationhanzo/hanzo-platform.md -- PaaS (uses KMS for secrets)hanzo/hanzo-k8s.md -- K8s infrastructurehanzo/hanzo-deploy.md -- Deployment workflowLast Updated: 2026-05-12 Category: Hanzo Ecosystem Related: secrets, kms, kms, encryption, security, vault Prerequisites: API key concepts, K8s basics