Hạ tầng
Không có bí mật nào trong cấu hình.
Không có bí mật nào trong nhật ký.
Mọi nền tảng, mọi bộ điều phối, mọi CI runner. Proxy hoạt động với bất cứ thứ gì thực hiện HTTP call. CLI hoạt động với bất cứ thứ gì có thể gọi shell. Nếu hệ thống của bạn cũ hơn cả sự nghiệp của bạn, nó vẫn hoạt động.
Proxy là tích hợp phổ quát.
Nếu khối lượng công việc của bạn thực hiện HTTPS request, proxy Clavitor sẽ tiêm thông tin xác thực tại lớp mạng. Không cần thay đổi mã. Không cần SDK. Không có bí mật nào trong biến môi trường, tệp cấu hình hay nhật ký. Thiết lập HTTPS_PROXY và mã hiện tại của bạn sẽ hoạt động không thay đổi — proxy giải quyết tham chiếu clavitor:// trong các header request trước khi request 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 # Agent không bao giờ thấy sk_live_... — chỉ có clavitor:// xuất hiện trong nhật ký
Container
Docker và Kubernetes
Docker Compose
Chạy proxy Clavitor trên host và trỏ container của bạn tới nó. Thông tin xác thực được tiêm một cách minh bạch vào các request gửi đi — không có bí mật nào trong biến môi trường, không có bí mật nào được nhúng vào image.
# Trên Docker host $ clavitor-proxy serve &
# docker-compose.yml — container định tuyến qua proxy host-mode
services:
app:
environment:
- HTTPS_PROXY=http://host.docker.internal:1983
extra_hosts:
- "host.docker.internal:host-gateway"Hoặc sử dụng render để giải quyết template cấu hình khi khởi động:
$ clavitor-cli render app.config.template.yml | docker compose -f - up
Kubernetes
Tạo secrets từ vault mà không cần hardcode giá trị trong 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)"
Để tiêm thông tin xác thực tại thời gian chạy, triển khai proxy như một sidecar container trong pod của bạn. Các container ứng dụng thiết lập HTTPS_PROXY trỏ tới sidecar. Thông tin xác thực được giải quyết cho từng request, không bao giờ được lưu trữ trong etcd.
IaC
Terraform, Ansible, Pulumi
Terraform
Giải quyết thông tin xác thực vào môi trường 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 inline, tệp .tf không đề cập đến bí mật 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
Khối provider "aws" {} vẫn trống trong mã của bạn. Mẫu tương tự hoạt động với mọi Terraform provider hỗ trợ thông tin xác thực qua biến môi trường (đó là hầu hết tất cả).
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ó ngoài argv để nó không xuất hiện trong /proc/<pid>/cmdline hay 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 lưu trữ trong vault
$ clavitor-cli get "Deploy Key" --field private_key | ssh-add - $ ssh deploy@production
Khóa private được truyền trực tiếp vào ssh-add. Nó không bao giờ được ghi vào ổ đĩa, 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 kế thừa
Nếu nó thực hiện HTTP call, nó sẽ hoạt động.
Proxy không quan tâm ngôn ngữ nào tạo ra request. COBOL, FORTRAN, Perl, Visual Basic, một công việc batch 30 năm tuổi — nếu tiến trình thực hiện HTTPS request, proxy sẽ chặn nó, giải quyết tham chiếu clavitor://, và tiêm thông tin xác thực thực sự. Không cần thay đổi mã.
Đối với các hệ thống không thể thực hiện HTTP call, sử dụng clavitor-cli render để giải quyết template cấu hình trước khi tiến trình bắt đầu. Template an toàn để lưu ở bất kỳ đâu. Kết quả giải quyết được gửi tới stdin hoặc một tệp tạm thời với quyền hạn chế.
# Giải quyết thông tin xác thực trước khi công việc batch bắt đầu $ 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 khối lượng công việc HTTP. Render cho tệp cấu hình. Mọi bí mật được giải quyết tại thời gian chạy, không bao giờ được lưu trữ.