---
title: "인프라"
description: "설정 파일에 시크릿이 없고, 로그에도 시크릿이 없어요. Docker, Kubernetes, Terraform, Ansible, CI/CD 등 모든 환경에 적용돼요."
lang: ko
url: https://clavitor.ai/ko/developers/infrastructure
markdown: https://clavitor.ai/ko/developers/infrastructure.md
translation_of: https://clavitor.ai/en/developers/infrastructure.md
authoritative: false
publisher: Clavitor LLC
---

> This is the Korean translation of [Infrastructure](https://clavitor.ai/en/developers/infrastructure.md). The original English text is authoritative; where the two differ, the English version prevails.

# 인프라: 설정 파일에 시크릿이 없어요. 로그에도 시크릿이 없어요.

모든 플랫폼, 모든 오케스트레이터, 모든 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)"
```

런타임 자격 증명 주입을 위해 프록시를 파드의 사이드카 컨테이너로 배포해요. 애플리케이션 컨테이너는 `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: 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를 사용해요. 모든 시크릿은 런타임에 처리되며 절대 저장되지 않아요.
[무료로 시작하기](https://clavitor.ai/ko/checkout)
[개발자 개요 →](https://clavitor.ai/ko/developers)
