Infrastructuur
Geen geheimen in configuratie.
Geen geheimen in logs.
Elk platform, elke orchestrator, elke CI-runner. De proxy werkt met alles wat HTTP-aanroepen doet. De CLI werkt met alles wat een shell kan aanroepen. Als je systeem ouder is dan je carrière, werkt het nog steeds.
De proxy is de universele integratie.
Als je workload HTTPS-aanroepen doet, injecteert de Clavitor-proxy inloggegevens op netwerkniveau. Geen codeaanpassingen. Geen SDK's. Geen geheimen in omgevingsvariabelen, configuratiebestanden of logs. Stel HTTPS_PROXY in en je bestaande code werkt ongewijzigd — de proxy lost clavitor://-verwijzingen in request headers op voordat het verzoek de machine verlaat.
$ export HTTPS_PROXY=http://localhost:1983 $ curl -H "Authorization: Bearer clavitor://Stripe API/key" \ https://api.stripe.com/v1/charges # The agent never sees sk_live_... — only clavitor:// appears in logs
Containers
Docker en Kubernetes
Docker Compose
Draai de Clavitor-proxy op de host en laat je containers ernaar verwijzen. Inloggegevens worden transparant geïnjecteerd in uitgaande verzoeken — geen geheimen in omgevingsvariabelen, geen geheimen ingebakken in images.
# On the Docker host $ clavitor-proxy serve &
# docker-compose.yml — containers route through the host-mode proxy
services:
app:
environment:
- HTTPS_PROXY=http://host.docker.internal:1983
extra_hosts:
- "host.docker.internal:host-gateway"Of gebruik render om een configuratiesjabloon op te lossen bij het opstarten:
$ clavitor-cli render app.config.template.yml | docker compose -f - up
Kubernetes
Maak geheimen aan vanuit de kluis zonder waarden hard te coderen in manifests:
$ kubectl create secret generic app-secrets \ --from-literal=db-pass="$(clavitor-cli get 'Production DB' --field password)" \ --from-literal=api-key="$(clavitor-cli get 'Stripe API' --field key)"
Voor runtime-injectie van inloggegevens, implementeer de proxy als een sidecar-container in je pod. Applicatiecontainers stellen HTTPS_PROXY in op de sidecar. Inloggegevens worden per verzoek opgelost, nooit opgeslagen in etcd.
IaC
Terraform, Ansible, Pulumi
Terraform
Los inloggegevens op in de provideromgeving voordat terraform apply wordt uitgevoerd. De AWS-provider leest zijn inloggegevens uit standaard omgevingsvariabelen — Clavitor vult deze inline aan, het .tf-bestand vermeldt geen geheim.
$ export AWS_ACCESS_KEY_ID=$(clavitor-cli get "AWS Root" --field access_key_id) $ export AWS_SECRET_ACCESS_KEY=$(clavitor-cli get "AWS Root" --field secret_key) $ terraform apply
Het provider "aws" {}-blok blijft leeg in je code. Hetzelfde patroon werkt voor elke Terraform-provider die ondersteuning biedt voor omgevingsvariabele-inloggegevens (wat de meeste zijn).
Ansible
- name: Get database password
command: clavitor-cli get "Production DB" --field password
register: db_pass
no_log: true
- name: Configure app
template:
src: app.conf.j2
vars:
db_password: "{{ db_pass.stdout }}"Pulumi
import { execSync } from 'child_process';
const dbPass = execSync('clavitor-cli get "Production DB" --field password').toString().trim();
new aws.rds.Instance("db", { masterPassword: new pulumi.secret(dbPass) });CI/CD
GitHub Actions, GitLab CI, Jenkins
De token wordt in elk voorbeeld hieronder via stdin doorgegeven — zodat deze niet in argv terechtkomt en dus niet verschijnt in /proc/<pid>/cmdline of build logs.
GitHub Actions
- name: Deploy
env:
CLAVITOR_TOKEN: ${{ secrets.CLAVITOR_TOKEN }}
run: |
echo "$CLAVITOR_TOKEN" | clavitor-cli init
kubectl create secret generic app-secrets \
--from-literal=api-key="$(clavitor-cli get 'Deploy Token' --field key)" \
--dry-run=client -o yaml | kubectl apply -f -GitLab CI
deploy:
script:
- echo "$CLAVITOR_TOKEN" | clavitor-cli init
- clavitor-cli get "Deploy Key" --field private_key | ssh-add -
- ssh deploy@production "systemctl restart app"Jenkins
pipeline {
stages {
stage('Deploy') {
steps {
sh 'echo "$CLAVITOR_TOKEN" | clavitor-cli init'
sh 'clavitor-cli get "Deploy Key" --field private_key | ssh-add -'
sh 'ssh deploy@production "systemctl restart app"'
}
}
}
}SSH
In de kluis opgeslagen sleutels
$ clavitor-cli get "Deploy Key" --field private_key | ssh-add - $ ssh deploy@production
De privésleutel wordt rechtstreeks naar ssh-add gepiped. Deze raakt nooit de schijf, verschijnt nooit in de shell-geschiedenis en wordt uit de agent verwijderd wanneer de sessie eindigt.
Legacy systemen
Als het een HTTP-aanroep doet, werkt het.
De proxy geeft niet om welke taal het verzoek heeft gedaan. COBOL, FORTRAN, Perl, Visual Basic, een 30 jaar oude batch-taak — als het proces een HTTPS-verzoek doet, onderschept de proxy het, lost de clavitor://-verwijzing op en injecteert de echte inloggegevens. Geen codeaanpassingen vereist.
Voor systemen die geen HTTP-aanroepen kunnen doen, gebruik clavitor-cli render om een configuratiesjabloon op te lossen voordat het proces start. Het sjabloon kan veilig overal worden opgeslagen. De opgeloste uitvoer gaat naar stdin of een tijdelijk bestand met beperkte rechten.
# Resolve credentials before the batch job starts $ clavitor-cli render db-connect.template.cfg > /tmp/db-connect.cfg $ chmod 600 /tmp/db-connect.cfg $ /opt/legacy/batch-job --config /tmp/db-connect.cfg $ rm /tmp/db-connect.cfg
Het patroon is altijd hetzelfde.
CLI voor scripts en pipelines. Proxy voor HTTP-workloads. Render voor configuratiebestanden. Elk geheim wordt op runtime opgelost, nooit opgeslagen.