Hermes 파이프라인에 가드레일을 Security 계층으로 끼우기

Hermes 파이프라인에 가드레일을 Security 계층으로 끼우기

2026, Jul 25    

스킬 오케스트레이션 글에서 에이전트를 “버전 관리되는 절차+작업 큐”로 운영하는 법을 정리했다. 그런데 자율 에이전트가 cron/kanban로 돌아가면 사람이 개입하지 않는 시점에 툴을 직접 실행한다 — 즉 가드레일이 없으면 무인 상태로 위험한 행동을 한다. 이 글은 오케스트레이션 파이프라인 위에 Security 계층을 끼우는 법을 정리한다. (이 글의 초안은 설치된 Hermes 에이전트가 직접 작성했다.)

TL;DR: Hermes는 보안을 세 겹으로 제공한다 — ① 공급망 스캔(hermes security audit, OSV 기반) ② egress 방화벽(hermes egress iron-proxy, 아웃바운드 요청에 실제 키 주입·차단) ③ 외부 시크릿 매니저(hermes secrets, .env 미보관). 여기에 오픈소스 가드레일 모델 글의 입출력 레일을 에이전트 프롬프트/스킬 레벨에서 감싸면, AI Factory 가이드의 Security 계층(최소 권한·서명된 스킬 검증·입출력 필터링)이 오픈소스 Hermes pipelines에서 완성된다.

왜 “무인 에이전트”는 가드레일이 필수인가

가드레일 모델 글에서 이미 “에이전트는 툴 실행이라는 실세계 행동이 있어 단순 챗봇보다 가드레일 필요성 큼”을 짚었다. 오케스트레이션 글의 파이프라인(주간 arxiv 수집 → 요약 → 발행)을 떠올려 보자. cron이 매주 도는 동안 사람은 없고, 에이전트는 _reports/를 읽고 git push까지 한다. 이 흐름에서 보호해야 할 지점은 세 가지다.

  1. 의존성/스크립트 취약점 — 스킬·플러그인·MCP 서버가 깨진 패키지를 끌고 오면 무인 실행 중 그대로 쓴다.
  2. 자격증명 유출 — 헤드리스 실행에서 API 키가 로그·프롬프트에 노출되면 누구나 읽는다.
  3. 비정상 아웃바운드 — 탈옥된 에이전트가 예상 밖 외부로 데이터를 보내는 것.

Hermes가 기본 제공하는 1·2·3을 먼저 켜고, 그 위에 모델 기반 입출력 레일을 더하는 순서다.

1. 공급망 스캔 — hermes security audit

OSV.dev 기준으로 Hermes venv(PyPI), 플러그인 의존성, config.yaml에 핀된 npx/uvx MCP 서버를 스캔한다. 전역 패키지나 브라우저 확장은 안 잡으니, 에이전트 런타임 자체만 본다.

$ hermes security --help
On-demand vulnerability scan against OSV.dev. Covers the Hermes venv
(installed PyPI dists), Python deps declared by plugins under
~/.hermes/plugins/, and pinned npx/uvx MCP servers in config.yaml. Does NOT
scan globally-installed packages or editor/browser extensions.

  audit       Run a one-shot supply-chain audit

delegate_task로 스킬을 자주 만들고 MCP 서버를 붙이는 워크플로우라면, 파이프라인의 첫 단계(cron 프롬프트 시작 부분)에 audit를 넣어 두는 것이 합리적이다 — 새 스킬이 깨진 패키지를 끌면 다음 주 실행 전에 잡힌다. 가드레일 모델 글의 운영 체크리스트(회귀 테스트 자동화)와 같은 “무인 환경의 기본 위생”이다.

이 글을 쓰는 환경에서 실제로 hermes doctor를 돌려본 보안 관련 출력:

$ hermes doctor

◆ Security Advisories
  ✓ No active security advisories

◆ MCP Server Security
  ✓ No suspicious MCP stdio commands

◆ Python Environment
  ✓ Python 3.11.15
  ✓ Virtual environment active
  ✓ Version files consistent (0.19.0)

◆ Configuration Files
  ✓ ~/AppData\Local\hermes/.env file exists
  ✓ API key or custom endpoint configured
  ✓ Config version up to date (v33)
  ✓ No deprecated config keys or env vars

doctor는 보안 권고·MCP stdio 명령 의심·설정 만료를 한 번에 점검한다. 무인 파이프라인에서는 security audit(OSV 의존성 스캔)와 doctor(구성·버전 점검)를 함께 cron 전단계에 두면 된다.

2. Egress 방화벽 — hermes egress (iron-proxy)

가장 강력한 레이어. 아웃바운드 요청이 샌드박스를 떠나기 전에 프록시 토큰을 실제 API 키로 바꿔주는 TLS 인터셉트 방화벽이다. 기본 끄져 있고(opt-in) 명시적으로 켜야 한다.

$ hermes egress --help
Manage iron-proxy, the optional TLS-intercepting egress firewall that swaps
proxy tokens for real API credentials before outbound requests leave a
sandbox. Disabled by default.

  install    Download iron-proxy binary (v0.39.0)
  setup      Interactive wizard: install + CA + mint tokens + write config
  start      Start the managed iron-proxy
  stop       Stop the managed iron-proxy
  reload     Hot-reload the running daemon's ruleset from proxy.yaml
  status     Show proxy state and mappings
  disable    Turn off the proxy integration
  config     Print the generated proxy.yaml path

동작 모델의 핵심: 에이전트 코드에는 프록시 토큰만 두고, 실제 키는 프록시가 주입한다. 즉 스킬 파일·로그·프롬프트에 진짜 키가 박히지 않는다. reload로 프록시 재시작 없이 규칙을 핫로드할 수 있어, 차단 대상을 운영 중에 갱신할 수 있다. 무인 cron 파이프라인에서 “에이전트가 갈 수 있는 외부”를 화이트리스트로 조일 때 딱 맞다.

이 글을 쓰는 환경의 hermes egress status — 기본값이 꺼져 있음을 확인:

$ hermes egress status
  Enabled           no
  Binary            (missing)
  Binary version    (unknown)
  Config            (not generated)
  CA cert           (not generated)
  Tunnel port       9090
  Process           (stopped)
  Listening         no
  Credential src    env
  Docker enforce    yes

Enabled: no, Process: (stopped)가 보이듯 opt-in이다. 도입하려면 hermes egress setup(설치+CA+mint tokens+config 한 번에) 후 hermes egress start로 띄운다. Credential src: env는 아직 .env에서 키를 가져오는 상태 — 3번 secrets 통합과 조합하면 디스크에도 남지 않는다.

3. 외부 시크릿 매니저 — hermes secrets

.env에 키를 두는 대신 프로세스 기동 시 외부 시크릿 매니저에서 끌어오게 한다. Bitwarden Secrets Manager와 1Password(op:// 레퍼런스)를 지원.

이 글을 쓰는 환경의 hermes status가 보여주는 현재 자격증명 상태 — 아직은 .env에 OpenRouter 키만 박혀 있음:

$ hermes status

◆ API Keys
  OpenRouter    ✓ sk-o...0dee
  OpenAI        ✗ (not set)
  Google / Gemini  ✗ (not set)
  DeepSeek      ✗ (not set)
  xAI / Grok    ✗ (not set)
  NVIDIA NIM    ✗ (not set)
  ...
  GitHub        ✗ (not set)
  Anthropic     ✗ (not set)

◆ Auth Providers
  Nous Portal   ✓ logged in
    Inference:  https://inference-api.nousresearch.com/v1
    Access exp: 2026-07-25 22:27:25 대한민국 표준시

status는 설정된 키와 로그인된 provider를 한눈에 보여준다. 현재는 OpenRouter 키가 로컬 .env에 있고, 추론은 Nous Portal OAuth로 돌아간다. secrets 통합을 켜면 .env 대신 1Password에서 op://vault/api-key 형태로 주입되어, 디스크에 평문 키가 남지 않는다. doctor가 “.env file exists”를 체크하는 것과 대비되는, 더 강한 격리 방식이다.

$ hermes secrets --help
Pull API keys from an external secret manager at process startup instead of
storing them in ~/.hermes/.env. Supports Bitwarden Secrets Manager and
1Password.

AI Factory 가이드가 Security 계층에서 요구한 “시크릿 관리(Istio/Vault 류)”를, 온프레미스 Hermes에서는 이 secrets 통합으로 충족한다. egress와 조합하면 키가 디스크(.env)에도, 코드에도, 로그에도 남지 않는다.

4. 모델 기반 입출력 레일 — 프롬프트/스킬 레벨

1~3은 인프라 레벨. 여기에 가드레일 모델 글에서 정리한 입력 레일 / 출력 레일을 에이전트 레벨에서 감싼다. 무인 파이프라인에서는 오케스트레이터(NeMo Guardrails) 없이 프롬프트+스킬로 충분하다.

# 스킬: guarded-pipeline
# 사용 전 입력 검사
1. 에이전트에 도달하는 보고서/사용자 입력에 대해 자체 분류 프롬프트로
   인젝션 패턴·파괴적 명령 선차단
# 툴 실행 전 결정적 규칙(LLM 판정보다 우선)
2. 허용 툴 화이트리스트만 실행 — `git push`는 지정 브랜치로만,
   임의 셸/파일 삭제 명령은 코드 레벨에서 차단
# 출력 검사
3. 발행 전 생성 텍스트를 정밀 분류기(Granite Guardian 등)로 통과시켜
   근거 없는 수치·링크 창작 여부 확인

가드레일 모델 글에서 “실행 레일은 결정적 규칙이 LLM 판정보다 우선”이라고 한 원칙을, 여기서는 스킬의 2번 항목(허용 툴 화이트리스트)으로 옮겼다. 그리고 블로그 자동화 글에서 검증한 “사실 창작 금지” 안전장치가 출력 레일의 소형 판정과 같은 목적이다.

엮어보기 — 가드레일을 갖춘 오케스트레이션 파이프라인

오케스트레이션 글의 파이프라인에 Security 계층을 덧붙이면:

cronjob(매주 토 "arxiv 수집+요약")
   ├─ hermes security audit     # ① 공급망 스캔
   ├─ egress iron-proxy ON       # ② 아웃바운드 키 주입·차단
   └─ guarded-pipeline 스킬      # ④ 입출력/실행 레일
        └─ delegate_task(배치) 병렬 요약
cronjob(매주 일 "보고서 → 블로그 글 발행")
   └─ secrets(1Password) 로 키 로드  # ③ 디스크 비보관
        └─ 출력 레일 통과 후 push
kanban(장기 테마 조사) — 워커는 egress 규칙 하에서만 외부 호출

이 구조는 AI Factory 가이드의 Security 컴포넌트(최소 권한 에이전트·서명된 스킬 검증·입출력 콘텐츠 필터링)와 일대일로 매핑된다. 오픈소스 Hermes에서는 ①security auditegresssecrets ④스킬 레일 조합으로 같은 그림이 나온다.

마무리

무인 에이전트 파이프라인에서 보안은 “나중에 덧붙이는 것”이 아니라 오케스트레이션과 동시에 설계하는 것이다. 인프라 레벨(스캔·방화벽·시크릿)은 Hermes가 기본 도구로 주고, 모델 레벨(입출력 레일)은 앞선 가드레일 서베이의 모델을 스킬로 감싸면 된다. 다음 글에서는 이 파이프라인 위에 OKF 지식 번들을 올려, 에이전트가 “파일을 직접 읽는 결정적” 컨텍스트 제공을 어떻게 조합하는지 다뤄볼 예정이다.

참고