Cơ sở hạ tầng
Không có secret nào trong cấu hình.
Không có secret nào trong nhật ký.
Mọi nền tảng, mọi trình điều phối, mọi CI runner. Proxy hoạt động với bất kỳ thứ gì thực hiện lệnh gọi HTTP. CLI hoạt động với bất kỳ thứ gì có thể gọi shell. Nếu hệ thống của bạn cũ hơn cả thâm niên của bạn, nó vẫn hoạt động.
Proxy là giải pháp tích hợp phổ quát.
Nếu workload của bạn thực hiện các lệnh gọi HTTPS, proxy Clavitor sẽ chèn thông tin xác thực ở lớp mạng. Không cần thay đổi mã. Không cần SDK. Không có secret nào trong các biến môi trường, tệp cấu hình hoặc nhật ký. Đặt HTTPS_PROXY và mã hiện có của bạn vẫn hoạt động bình thường — proxy phân giải các tham chiếu clavitor:// trong header yêu cầu trước khi yêu cầu rời khỏi máy.
$ 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
Container
Docker và Kubernetes
Docker Compose
Chạy proxy Clavitor trên host và trỏ các container của bạn vào đó. Thông tin xác thực được chèn minh bạch vào các yêu cầu gửi đi — không có secret nào trong các biến môi trường, không có secret nào được nhúng sẵn vào image.
# 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"Hoặc sử dụng render để phân giải một mẫu cấu hình khi khởi động:
$ clavitor-cli render app.config.template.yml | docker compose -f - up
Kubernetes
Tạo secret từ két an toàn mà không cần hardcode giá trị trong các manifest:
$ 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)"
Để chèn thông tin xác thực tại thời gian chạy, hãy triển khai proxy dưới dạng một sidecar container trong pod của bạn. Các container ứng dụng đặt HTTPS_PROXY trỏ tới sidecar. Thông tin xác thực được phân giải theo từng yêu cầu và không bao giờ được lưu trữ trong etcd.
IaC
Terraform, Ansible, Pulumi
Terraform
Phân giải thông tin xác thực vào môi trường của provider trước khi terraform apply. AWS provider đọc thông tin xác thực từ các biến môi trường tiêu chuẩn — Clavitor điền chúng trực tiếp, file .tf không đề cập đến bất kỳ secret nào.
$ 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
Block provider "aws" {} vẫn để trống trong mã của bạn. Mẫu tương tự hoạt động với bất kỳ Terraform provider nào hỗ trợ thông tin xác thực qua biến môi trường (hầu hết đều hỗ trợ).
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 được truyền qua stdin trong mọi ví dụ bên dưới — giữ nó khỏi argv để không xuất hiện trong /proc/<pid>/cmdline hoặc nhật ký build.
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
Khóa được lưu trữ trong két an toàn
$ clavitor-cli get "Deploy Key" --field private_key | ssh-add - $ ssh deploy@production
Private key được truyền trực tiếp vào ssh-add. Nó không bao giờ được ghi xuống disk, không bao giờ xuất hiện trong lịch sử shell và được xóa khỏi agent khi phiên kết thúc.
Hệ thống legacy
Nếu nó thực hiện một lệnh gọi HTTP, nó sẽ hoạt động.
Proxy không quan tâm ngôn ngữ nào đã thực hiện yêu cầu. COBOL, FORTRAN, Perl, Visual Basic, một batch job 30 năm tuổi — nếu tiến trình thực hiện yêu cầu HTTPS, proxy sẽ chặn nó, phân giải tham chiếu clavitor:// và chèn thông tin xác thực thực. Không cần thay đổi mã.
Đối với các hệ thống không thể thực hiện lệnh gọi HTTP, hãy sử dụng clavitor-cli render để phân giải một config template trước khi tiến trình bắt đầu. Template này có thể được lưu trữ an toàn ở bất kỳ đâu. Output đã phân giải được chuyển đến stdin hoặc một file tạm với quyền hạn chế.
# 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
Mẫu luôn giống nhau.
CLI cho script và pipeline. Proxy cho HTTP workload. Render cho config file. Mọi secret được phân giải tại thời gian chạy, không bao giờ bị lưu trữ.