Infrastruktura
Żadnych sekretów w konfiguracji.
Żadnych sekretów w logach.
Każda platforma, każdy orkiestrator, każdy runner CI. Proxy działa z wszystkim, co wykonuje wywołania HTTP. CLI działa z wszystkim, co może wywołać powłokę. Jeśli Państwa system jest starszy niż Państwa kariera, nadal działa.
Proxy to uniwersalna integracja.
Jeśli Twoje obciążenie wykonuje wywołania HTTPS, proxy Clavitor wstrzykuje poświadczenia na poziomie sieci. Żadnych zmian w kodzie. Żadnych SDK. Żadnych sekretów w zmiennych środowiskowych, plikach konfiguracyjnych ani logach. Ustaw HTTPS_PROXY, a Twój istniejący kod będzie działał bez zmian — proxy rozwiązuje odwołania clavitor:// w nagłówkach żądań, zanim żądanie opuści maszynę.
$ 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
Kontenery
Docker i Kubernetes
Docker Compose
Uruchom proxy Clavitor na hoście i skieruj do niego swoje kontenery. Poświadczenia są wstrzykiwane przezroczysto do wychodzących żądań — żadnych sekretów w zmiennych środowiskowych, żadnych sekretów wbudowanych w obrazy.
# 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"Lub użyj render, aby rozwiązać szablon konfiguracji przy starcie:
$ clavitor-cli render app.config.template.yml | docker compose -f - up
Kubernetes
Twórz sekrety z sejfu bez kodowania wartości na stałe w manifestach:
$ 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)"
W celu wstrzykiwania poświadczeń w czasie działania, wdróż proxy jako kontener sidecar w swoim podzie. Kontenery aplikacji ustawiają HTTPS_PROXY na sidecar. Poświadczenia są rozwiązywane na żądanie, nigdy nie są przechowywane w etcd.
IaC
Terraform, Ansible, Pulumi
Terraform
Rozwiąż poświadczenia w środowisku dostawcy przed terraform apply. Dostawca AWS odczytuje swoje poświadczenia ze standardowych zmiennych środowiskowych — Clavitor je wypełnia, plik .tf nie wspomina o żadnym sekrecie.
$ 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
Blok provider "aws" {} pozostaje pusty w Twoim kodzie. Ten sam wzorzec działa dla każdego dostawcy Terraform, który obsługuje poświadczenia przez zmienne środowiskowe (czyli dla większości z nich).
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
Token jest przesyłany na stdin w każdym z poniższych przykładów — dzięki czemu nie pojawia się w argv, /proc/<pid>/cmdline ani w logach kompilacji.
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
Klucze przechowywane w sejfie
$ clavitor-cli get "Deploy Key" --field private_key | ssh-add - $ ssh deploy@production
Klucz prywatny jest przesyłany bezpośrednio do ssh-add. Nigdy nie dotyka dysku, nigdy nie pojawia się w historii powłoki i jest usuwany z agenta po zakończeniu sesji.
Starsze systemy
Jeśli wykonuje wywołanie HTTP, działa.
Proxy nie przejmuje się tym, w jakim języku wykonano żądanie. COBOL, FORTRAN, Perl, Visual Basic, 30-letnie zadanie wsadowe — jeśli proces wykonuje żądanie HTTPS, proxy przechwytuje je, rozwiązuje odwołanie clavitor:// i wstrzykuje rzeczywiste poświadczenia. Nie są wymagane żadne zmiany w kodzie.
W przypadku systemów, które nie mogą wykonywać wywołań HTTP, użyj clavitor-cli render, aby rozwiązać szablon konfiguracji przed uruchomieniem procesu. Szablon można bezpiecznie przechowywać w dowolnym miejscu. Rozwiązany wynik trafia na standardowe wejście lub do pliku tymczasowego z ograniczonymi uprawnieniami.
# 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
Wzorzec jest zawsze taki sam.
CLI dla skryptów i potoków. Proxy dla obciążeń HTTP. Render dla plików konfiguracyjnych. Każdy sekret rozwiązywany w czasie rzeczywistym, nigdy nie przechowywany.