Janee 설정 가이드: OpenClaw, Claude 및 기타 AI 에이전트를 위한 보안 API 키 관리

발행: (2026년 2월 11일 오후 04:08 GMT+9)
13 분 소요
원문: Dev.to

Source: Dev.to

AI 코딩 에이전트는 소프트웨어 개발을 혁신하고 있습니다. Claude Desktop, Cursor, Cline 같은 도구는 코드를 작성하고, 문제를 디버깅하며, 심지어 여러분을 대신해 API 호출까지 할 수 있습니다.

하지만 문제가 있습니다: 보안을 해치지 않으면서 이 에이전트들에게 API 접근 권한을 어떻게 부여할 수 있을까요?

일반적인 접근 방식 — API 키를 설정 파일이나 프롬프트에 붙여넣는 것 — 은 위험합니다:

  • 키가 디스크에 평문으로 저장됨
  • 에이전트가 .env 파일을 읽을 수 있음
  • 접근된 내용에 대한 감사 로그가 없음
  • 키를 교체하지 않고는 접근 권한을 취소할 방법이 없음
  • 프롬프트 인젝션 하나만으로 전체 API 접근 권한을 얻을 수 있음

이 가이드는 AI‑에이전트 워크플로우를 위해 설계된 로컬 비밀 관리 도구 Janee를 사용하여 이러한 문제를 해결하는 방법을 보여줍니다.

Janee란?

Janee는 MCP (Model Context Protocol) 서버로, API 자격 증명을 머신에 암호화하여 저장하고 안전한 프록시 역할을 합니다.

작동 방식

  1. Store API keys in ~/.janee/config.yaml (encrypted at rest).
  2. Run janee serve to start the MCP server.
  3. Your AI agents connect to Janee via MCP.
  4. When an agent needs to call an API, it requests access through Janee.
  5. Janee injects the real key server‑side, makes the request, and logs everything.
  6. The agent receives the API response without ever seeing your actual key.

주요 장점

✅ 기능설명
Encrypted storageAES‑256‑GCM 로 암호화된 키 저장
Zero‑knowledge agents에이전트가 실제 자격 증명을 절대 볼 수 없음
Full audit trail모든 요청이 타임스탬프, 서비스, 메서드, 경로와 함께 기록됨
Policy enforcement에이전트가 접근할 수 있는 HTTP 메서드/경로를 제어
Configure once, use everywhere하나의 설정으로 모든 MCP 에이전트가 접근 가능
Open source (MIT)완전한 투명성 제공

사전 요구 사항

  • Node.js **18+**가 설치되어 있음
  • MCP를 지원하는 AI 에이전트 (Claude Desktop, Cursor, OpenClaw, Cline 등)
  • 관리하려는 API 키 (Stripe, GitHub, OpenAI 등)

설치

npm install -g @true-and-useful/janee

설치 확인:

janee --version

init 명령을 실행하여 Janee 설정을 구성합니다:

janee init

이렇게 하면 예시 서비스가 포함된 ~/.janee/config.yaml 파일이 생성됩니다. 서비스를 대화식으로 추가하거나 명령줄 인수를 통해 추가할 수 있습니다.

옵션 A – 대화식 (초보자에게 권장)

janee add

Janee가 다음을 요청합니다:

  • 서비스 이름 (예: stripe)
  • 기본 URL (예: https://api.stripe.com)
  • 인증 유형 (bearer, basic, hmac‑bybit 등)
  • API 키 / 자격 증명

옵션 B – 명령줄 인수

janee add stripe \
  -u https://api.stripe.com \
  --auth-type bearer \
  -k sk_live_xxx

기능 정의

기능은 각 서비스에서 에이전트가 할 수 있는 일을 정의합니다. 여기에는 TTL, 자동 승인, 요청 규칙과 같은 정책이 포함됩니다.

예시: 읽기 전용 Stripe 접근

capabilities:
  stripe_readonly:
    service: stripe
    ttl: 1h
    autoApprove: true
    rules:
      allow:
        - GET *
      deny:
        - POST *
        - DELETE *
        - PUT *

예시: Stripe 청구 (제한된 쓰기 접근)

capabilities:
  stripe_billing:
    service: stripe
    ttl: 15m
    requiresReason: true
    rules:
      allow:
        - GET *
        - POST /v1/refunds/*
        - POST /v1/invoices/*
      deny:
        - POST /v1/charges/*   # Can't charge cards
        - DELETE *

Note: 정책은 서버 측에서 적용됩니다. 에이전트가 이를 우회하려고 시도하더라도, Janee는 무단 요청을 차단합니다.

서버 시작

janee serve

다음과 같은 출력이 표시됩니다:

Janee MCP server running on stdio
Config: /Users/yourname/.janee/config.yaml
Logs:   /Users/yourname/.janee/logs/

이 프로세스를 계속 실행하십시오 – 이제 Janee가 MCP 클라이언트의 요청을 받을 준비가 되었습니다.

AI 에이전트와 통합하기

Claude Desktop (macOS 예시)

~/Library/Application Support/Claude/claude_desktop_config.json 파일을 편집합니다 (또는 사용 중인 OS에 해당하는 경로).

{
  "mcpServers": {
    "janee": {
      "command": "janee",
      "args": ["serve"]
    }
  }
}

Claude Desktop을 재시작합니다.

Cursor

  1. Settings → Extensions → MCP를 엽니다.
  2. 위와 동일한 JSON 스니펫을 붙여넣습니다.

OpenClaw (네이티브 플러그인)

npm install -g @true-and-useful/janee-openclaw
openclaw plugins install @true-and-useful/janee-openclaw

에이전트 설정에 활성화합니다:

{
  "agents": {
    "list": [
      {
        "id": "main",
        "tools": { "allow": ["janee"] }
      }
    ]
  }
}

프롬프트에서 Janee 사용하기

Claude Desktop용 예시 프롬프트

“Janee를 사용해서 내 Stripe 계정 잔액을 확인해 줄 수 있나요?”

Claude는 다음을 수행합니다:

  1. Janee의 MCP 서버에서 execute 도구를 발견합니다.
  2. execute를 capability stripe, 메서드 GET, 경로 /v1/balance와 함께 호출합니다.
  3. Janee가 당신의 Stripe 키를 복호화하고, 요청을 수행하며, 로그를 기록합니다.
  4. 잔액 데이터를 Claude에게 반환합니다.

감사 로그 보기

janee logs

Sample output:

2025-02-11 14:32:15 | stripe | GET /v1/balance | 200 | User asked for account balance

요청‑규칙 구문

규칙은 METHOD PATH 형식으로 표현됩니다. 아래는 빠른 참고표입니다.

Rule의미
GET *모든 GET 요청을 허용
POST /v1/charges/*/v1/charges/ 및 하위 경로에 대한 POST를 허용
DELETE *모든 DELETE 요청을 거부
* /v1/customers/v1/customers에 대한 모든 메서드

규칙 평가 방법

  1. 거부 규칙이 먼저 확인됩니다 – 명시적인 거부가 항상 우선합니다.
  2. 허용 규칙이 다음에 확인됩니다 – 진행하려면 일치가 필요합니다.
  3. 규칙이 없으면모두 허용 (하위 호환).
  4. 규칙이 존재하지만 일치하지 않으면 → 요청이 기본적으로 거부됩니다.

샘플 서비스 및 기능 구성

GitHub (읽기 전용)

services:
  github:
    baseUrl: https://api.github.com
    auth:
      type: bearer
      key: ghp_xxx

capabilities:
  github_readonly:
    service: github
    ttl: 2h
    rules:
      allow: [GET *]
      deny: [POST *, DELETE *, PUT *, PATCH *]

에이전트는 저장소, 이슈, PR을 읽을 수 있지만, 생성, 업데이트 또는 삭제는 할 수 없습니다.

OpenAI

services:
  openai:
    baseUrl: https://api.openai.com
    auth:
      type: bearer
      key: sk-xxx

capabilities:
  openai:
    service: openai
    ttl: 30m
    requiresReason: true

짧은 TTL + 사유 필요 설정을 통해 사용량을 모니터링하고 빠르게 접근 권한을 회수할 수 있습니다.

내부 API (매우 짧은 TTL, 수동 승인)

services:
  internal_api:
    baseUrl: https://api.yourcompany.com
    auth:
      type: bearer
      key: internal_xxx

capabilities:
  internal_readonly:
    service: internal_api
    ttl: 10m
    autoApprove: false   # 수동 승인 필요
    rules:
      allow: [GET /v1/users/*, GET /v1/analytics/*]

요약

  1. 설치 Janee globally (npm i -g @true-and-useful/janee).
  2. 초기화 (janee init) and add your services (janee add).
  3. 정의 capabilities with appropriate TTLs and request rules.
  4. 실행 janee serve and configure your AI agents to use the MCP server.
  5. 프롬프트 your agents to perform API calls – Janee handles the keys, logs, and policy enforcement.

You now have a 보안적이고, 감사 가능하며, 정책 기반의 way to give AI coding agents access to your APIs without ever exposing raw secrets. 코딩 즐겁게 하세요!

Janee Quick‑Reference Guide

Core Commands

ActionCommand
활성 세션 목록 보기janee sessions
세션 취소janee revoke <id>
실시간 감사 로그 보기janee logs -f

Policy Recommendations

  1. 특정 권한만 사용 – 광범위한 접근 권한을 부여하지 마세요.
    예시: stripe_readonly, stripe_billing, stripe_admin.

  2. 적절한 TTL 설정

    • 탐색 작업: 1–2 h
    • 민감한 작업: 5–15 min
  3. requiresReason 활성화 – 민감한 서비스에 대해 에이전트는 이유를 제공해야 하며, 이는 감사 로그에 기록됩니다.

  4. 요청 규칙 사용 – 기본값 deny; 필요한 것만 allow하도록 명시하세요.

  5. 감사 로그 모니터링 – 정기적으로 janee logs를 검토하여 어떤 작업이 접근되었는지 확인하세요.

  6. 키를 주기적으로 교체 – Janee가 이를 쉽게 해줍니다; 설정을 한 번 업데이트하면 모든 에이전트가 새 키를 자동으로 사용합니다.

  7. 구성 파일 백업 – ~/.janee/config.yaml은 암호화되어 있으니 안전하게 백업하세요.

문제 해결

문제해결책
에이전트가 Janee 도구를 볼 수 없음janee serve가 실행 중이며 에이전트의 MCP 설정이 이를 가리키는지 확인하십시오. 에이전트를 재시작하십시오.
“Permission denied” 또는 “Capability not found”설정 파일에 있는 capability 이름이 에이전트가 요청하는 것과 일치하는지 확인하십시오.
규칙에 의해 차단된 요청janee logs를 확인하여 어떤 규칙이 요청을 차단했는지 확인하십시오. 설정에서 허용/거부 패턴을 조정하십시오.
키가 암호화되지 않음Janee가 설정을 읽고 쓸 때 키가 암호화됩니다. config.yaml을 수동으로 편집한 경우, 암호화를 트리거하려면 janee serve를 실행하십시오.

Docker / Kubernetes에서 Janee 실행

에이전트를 컨테이너화하는 경우 HTTP 전송을 사용하십시오:

janee serve --transport http --port 9100

예시 docker‑compose.yml

services:
  janee:
    build: .
    ports:
      - "9100:9100"
    command: janee serve --transport http --port 9100

  agent:
    depends_on:
      - janee
    environment:
      - JANEE_HTTP_URL=http://janee:9100

What You’ve Gained

  • Encrypted credential storage → 암호화된 자격 증명 저장소
  • Zero‑knowledge agents (they never see your keys) → 제로 지식 에이전트(키를 절대 볼 수 없음)
  • Full audit trail → 전체 감사 로그
  • Policy enforcement → 정책 시행
  • One config for all your agents → 모든 에이전트를 위한 하나의 구성

다음 단계

  1. 더 많은 서비스 추가 (janee add)
  2. 요청 정책 실험
  3. 모든 에이전트 도구에 대한 통합 설정
  4. 감사 로그 모니터링 (janee logs -f)

Resources

  • Docs:
  • GitHub:
  • Issues / Support:

이 내용이 도움이 되었다면, Janee에게 GitHub에서 ⭐를 주세요!

0 조회
Back to Blog

관련 글

더 보기 »

bilingual_pdf, @rudifa가 만든 앱

설명: 다른 인간 언어를 배우고 있다면, 자신이 아는 언어의 텍스트와 그 번역이 포함된 bilingual documents를 만들고 싶을 수도 있습니다...