Увійти Безкоштовно назавжди Почати роботу

Інфраструктура

Жодних секретів у конфігурації.
Жодних секретів у журналах.

Кожна платформа, кожен оркестратор, кожен CI-раннер. Проксі працює з будь-чим, що робить HTTP-запити. CLI працює з будь-чим, що може виконати команду оболонки. Якщо Ваша система старша за Вашу кар'єру, вона все одно працюватиме.

Проксі — це універсальна інтеграція.

Якщо Ваше навантаження робить HTTPS-запити, проксі Clavitor впроваджує облікові дані на мережевому рівні. Жодних змін у коді. Жодних SDK. Жодних секретів у змінних середовища, файлах конфігурації чи журналах. Встановіть HTTPS_PROXY, і Ваш існуючий код працюватиме без змін — проксі підставляє посилання clavitor:// у заголовках запитів перед тим, як запит покине машину.

$ 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

Контейнери

Docker та Kubernetes

Docker Compose

Запустіть проксі Clavitor на хості та спрямуйте Ваші контейнери на нього. Облікові дані вставляються прозоро у вихідні запити — жодних секретів у змінних середовища, жодних секретів, вбудованих у образи.

# 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"

Або використовуйте render для розпізнавання шаблону конфігурації під час запуску:

$ clavitor-cli render app.config.template.yml | docker compose -f - up

Kubernetes

Створюйте секрети зі сховища без жорсткого кодування значень у маніфестах:

$ 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)"

Для впровадження облікових даних під час виконання розгорніть проксі як sidecar-контейнер у Вашому поді. Контейнери застосунків встановлюють HTTPS_PROXY на sidecar. Облікові дані підставляються для кожного запиту, ніколи не зберігаються в etcd.

IaC

Terraform, Ansible, Pulumi

Terraform

Підставте облікові дані у середовище провайдера перед terraform apply. Провайдер AWS читає свої облікові дані зі стандартних змінних середовища — Clavitor заповнює їх вбудовано, файл .tf не згадує жодного секрету.

$ 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" {} залишається порожнім у Вашому коді. Той самий шаблон працює для будь-якого Terraform-провайдера, який підтримує облікові дані через змінні середовища (а це більшість із них).

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

Токен передається через stdin у кожному прикладі нижче — це запобігає його появі в argv, тому він не відображається в /proc/<pid>/cmdline або журналах збірки.

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

Ключі зі сховища

$ clavitor-cli get "Deploy Key" --field private_key | ssh-add -
$ ssh deploy@production

Приватний ключ передається безпосередньо в ssh-add. Він ніколи не торкається диска, ніколи не з'являється в історії оболонки та видаляється з агента після завершення сеансу.

Застарілі системи

Якщо він робить HTTP-виклик, він працює.

Проксі не має значення, якою мовою було зроблено запит. COBOL, FORTRAN, Perl, Visual Basic, 30-річний пакетний процес — якщо процес робить HTTPS-запит, проксі перехоплює його, розпізнає посилання clavitor:// та вставляє справжні облікові дані. Зміни у коді не потрібні.

Для систем, які не можуть робити HTTP-виклики, використовуйте clavitor-cli render для обробки шаблону конфігурації перед запуском процесу. Шаблон безпечно зберігати будь-де. Оброблений вивід надходить на stdin або у тимчасовий файл з обмеженими правами доступу.

# 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

Шаблон завжди однаковий.

CLI для скриптів та конвеєрів. Проксі для HTTP-навантажень. Render для файлів конфігурації. Кожен секрет підставляється під час виконання, ніколи не зберігається.