Sign in 영원히 무료 Get started

인프라

설정에 비밀번호 없음.

로그에 비밀번호 없음.

모든 플랫폼, 모든 오케스트레이터, 모든 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
# 에이전트는 sk_live_...를 절대 보지 않습니다 — 로그에는 clavitor://만 나타납니다

컨테이너

Docker 및 Kubernetes

Docker Compose

호스트에서 Clavitor 프록시를 실행하고 컨테이너를 그곳으로 지정합니다. 자격증명은 발신 요청에 투명하게 주입됩니다 — 환경 변수에 비밀번호가 없고, 이미지에 비밀번호가 포함되지 않습니다.

# Docker 호스트에서
$ clavitor-proxy serve &
# docker-compose.yml — 컨테이너는 호스트 모드 프록시를 통해 라우팅합니다
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)"

런타임 자격증명 주입을 위해 프록시를 파드의 사이드카 컨테이너로 배포합니다. 애플리케이션 컨테이너는 HTTPS_PROXY를 사이드카로 설정합니다. 자격증명은 요청별로 해석되며, 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: 데이터베이스 비밀번호 가져오기
  command: clavitor-cli get "Production DB" --field password
  register: db_pass
  no_log: true

- name: 앱 구성
  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: 배포
  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('배포') {
      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 또는 제한된 권한을 가진 임시 파일로 전달됩니다.

# 배치 작업 시작 전에 자격증명을 해석합니다
$ 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. 모든 비밀번호는 런타임에 해석되며, 절대 저장되지 않습니다.