Đăng nhập Miễn phí mãi mãi Bắt đầu

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ữ.