Infrastruktuuri
Ei salaisuuksia konfiguraatiossa.
Ei salaisuuksia lokeissa.
Jokainen alusta, jokainen orkestroija, jokainen CI-ajuri. Välityspalvelin toimii kaiken kanssa, joka tekee HTTP-kutsuja. CLI toimii kaiken kanssa, joka voi suorittaa komentoja. Jos järjestelmäsi on vanhempi kuin urasi, se toimii silti.
Välityspalvelin on universaali integraatio.
Jos työkuormasi tekee HTTPS-kutsuja, Clavitor-välityspalvelin injektoi tunnistetiedot verkkotasolla. Ei koodimuutoksia. Ei SDK:ita. Ei salaisuuksia ympäristömuuttujissa, konfiguraatiotiedostoissa tai lokeissa. Aseta HTTPS_PROXY ja olemassa oleva koodisi toimii muuttumattomana — välityspalvelin ratkaisee clavitor://-viittaukset pyyntöotsikoissa ennen kuin pyyntö poistuu koneelta.
$ 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
Kontit
Docker ja Kubernetes
Docker Compose
Suorita Clavitor-välityspalvelin isännällä ja osoita konttisi siihen. Tunnistetiedot injektoidaan läpinäkyvästi lähteviin pyyntöihin — ei salaisuuksia ympäristömuuttujissa, ei salaisuuksia sisäänrakennettuna kuviin.
# 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"Tai käytä render ratkaisemaan konfiguraatiomalli käynnistyksen yhteydessä:
$ clavitor-cli render app.config.template.yml | docker compose -f - up
Kubernetes
Luo salaisuuksia holvista ilman arvojen kovakoodausta manifestissa:
$ 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)"
Ajonaikaista tunnistetietojen injektointia varten, ota välityspalvelin käyttöön podisi sidecar-konttina. Sovelluskontit asettavat HTTPS_PROXY:n sidecariin. Tunnistetiedot ratkaistaan pyyntökohtaisesti, niitä ei koskaan tallenneta etcd:hen.
IaC
Terraform, Ansible, Pulumi
Terraform
Ratkaise tunnistetiedot provider-ympäristöön ennen terraform apply -komentoa. AWS-provider lukee tunnistetietonsa standardeista ympäristömuuttujista — Clavitor täyttää ne inline, .tf-tiedosto ei mainitse mitään salaisuutta.
$ 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
provider "aws" {} -lohko pysyy tyhjänä koodissasi. Sama malli toimii kaikille Terraform-providereille, jotka tukevat ympäristömuuttuja-tunnistetietoja (eli useimmille niistä).
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
Tokeni syötetään stdin:iin jokaisessa alla olevassa esimerkissä — pitäen sen poissa argv:stä, jotta se ei ilmesty /proc/<pid>/cmdline-tiedostoon tai build-lokeihin.
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
Holviin tallennetut avaimet
$ clavitor-cli get "Deploy Key" --field private_key | ssh-add - $ ssh deploy@production
Yksityinen avain syötetään suoraan ssh-add-komentoon. Se ei koskaan kosketa levyä, ei koskaan ilmesty komentohistoriaan, ja se tyhjennetään agentista istunnon päättyessä.
Vanhat järjestelmät
Jos se tekee HTTP-kutsun, se toimii.
Välityspalvelin ei välitä, mikä kieli pyynnön teki. COBOL, FORTRAN, Perl, Visual Basic, 30 vuotta vanha batch-työ — jos prosessi tekee HTTPS-pyynnön, välityspalvelin sieppaa sen, ratkaisee clavitor://-viittauksen ja injektoi todellisen tunnistetiedon. Ei koodimuutoksia vaadita.
Järjestelmille, jotka eivät voi tehdä HTTP-kutsuja, käytä clavitor-cli render ratkaisemaan konfiguraatiomalli ennen prosessin alkua. Malli on turvallista tallentaa mihin tahansa. Ratkaistu tulos menee stdin:iin tai väliaikaiseen tiedostoon, jolla on rajoitetut käyttöoikeudet.
# 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
Kaava on aina sama.
CLI skripteille ja putkistoille. Välityspalvelin HTTP-työkuormille. Renderöinti konfiguraatiotiedostoille. Jokainen salaisuus ratkaistaan ajonaikaisesti, ei koskaan tallenneta.