Inloggen Gratis voor altijd Aan de slag

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.