OpenAI에 .env를 보내지 마세요: OpenCode를 위한 프라이버시 레이어
I’m ready to translate the article for you, but I need the full text of the post (the part you’d like translated). Could you please paste the content you want translated below? I’ll keep the source line exactly as you provided and preserve all formatting, markdown, and code blocks.
Overview
AI 코딩 에이전트는 여러분의 머신에서 가장 생산적이면서도 가장 위험한 도구입니다.
이들은 여러분의 파일을 읽고, 셸 명령을 실행하며, 인프라 코드를 작성하고, 전체 프로젝트 컨텍스트에 대해 추론합니다. 이를 잘 수행하려면 실제 값에 접근해야 합니다: API 키, 데이터베이스 자격 증명, JWT, 연결 문자열 등 .env 파일에 저장되고 절대 디바이스를 떠나서는 안 되는 값들 말이죠.
하지만 이들은 디바이스를 떠납니다. 코딩 에이전트에게 보내는 모든 메시지(예: 웹훅 디버깅을 위해 Stripe 비밀 키를 붙여넣은 경우도 포함)는 LLM 제공자의 추론 엔드포인트로 전송됩니다. 모델은 모든 내용을 보게 됩니다.
이것이 근본적인 긴장 관계입니다: 에이전트가 유용하려면(또는 최소한 자율적으로 동작하려면) 여러분의 비밀이 필요하지만, LLM이 비밀을 볼 필요는 없습니다.
우리는 이를 해결하기 위해 플러그인을 만들었습니다. 오늘 우리는 @rehydra/opencode를 공개합니다. 이는 OpenCode용 프라이버시 레이어로, 비밀을 LLM에 도달하기 전에 익명화하고, 로컬에서 도구가 실행되기 전에 다시 복원합니다.
Source: https://www.rehydra.ai/blog/semantic-redaction-vs-regex-why-context-matters-for-pii
LLM이 실제로 보는 것
당신은 에이전트에게 환경 변수를 설정하도록 요청합니다:
You: "Set the Stripe key to sk_live_4eC39HqLyjWDarjtT1zdp7dc"
플러그인을 사용하지 않을 경우, 해당 비밀값이 그대로 LLM 제공자의 API에 전달됩니다.
플러그인을 사용할 경우, LLM은 다음과 같은 내용을 받습니다:
Set the Stripe key to
모델은 이 자리표시자를 실제 값으로 간주합니다. 이를 기반으로 추론하고, 해당 값을 포함한 명령을 생성하며, 후속 메시지에서도 참조합니다. 예를 들어 다음과 같은 도구 호출을 만들 때:
export STRIPE_KEY=
플러그인이 명령이 실행되기 전에 가로채어 실제 자격 증명을 복원합니다. 당신의 셸은 다음과 같이 실행됩니다:
export STRIPE_KEY=sk_live_4eC39HqLyjWDarjtT1zdp7dc
LLM은 비밀을 전혀 보지 못했습니다.
이는 Semantic Redaction과 동일한 원리입니다. 구조와 의미를 유지하는 자리표시자를 사용하고, 대화 내용을 쓰레기로 만들 수 있는 일반적인 [REDACTED] 토큰을 사용하지 않는 것이 핵심입니다.
세션 일관성의 중요성
PII에 대한 컨텍스트가 왜 중요한지에 대한 글을 읽어보셨다면, 모든 것을 *** 로 교체하는 순진한 삭제가 LLM의 추론 능력을 파괴한다는 것을 아실 겁니다. 동일한 원리가 여기에도 적용됩니다.
각 OpenCode 세션은 일관된 매핑을 갖는 Rehydra 세션을 별도로 사용합니다:
- 같은 API 키는 항상 동일한 자리표시자에 매핑됩니다.
- 서로 다른 비밀(예: 데이터베이스 비밀번호와 Redis 비밀번호)은 각각 별개의 자리표시자를 갖습니다.
- 동일한 비밀을 서로 다른 메시지에서 세 번 참조하면, 매번 같은 “ 가 사용됩니다.
이 일관성 덕분에 모델은 긴 대화 동안 참조 무결성을 유지할 수 있습니다. 실제 값을 알 필요 없이 어떤 비밀이 어디에 들어가는지 추론할 수 있습니다.
무엇이 잡히는가
플러그인은 Rehydra의 전체 탐지 엔진을 사용합니다—코딩 에이전트 사용 사례에 맞게 조정된 동일한 하이브리드 Regex + ONNX 파이프라인입니다.
| Category | Details |
|---|---|
| 시크릿 (패턴 기반) | 주요 제공업체(OpenAI, Anthropic, GitHub, Stripe, AWS, Slack)의 API 키, JWT, PEM 개인 키, 연결 문자열, AWS 자격 증명. |
| 환경 변수 | 플러그인은 .env 파일을 읽고 해당 정확한 값을 대화 어디에서든 나타나는 경우에도 일치시킵니다. 알려진 패턴을 따르지 않더라도 마찬가지입니다. .env에 있으면 삭제됩니다. |
| 구조화된 PII | 이메일, 전화번호, 신용카드 번호, IBAN, 세금 ID(총 28가지 유형). |
| 선택적 탐지 | URL 및 IP 주소 탐지는 기본적으로 비활성화되어 있습니다(코딩 에이전트는 종종 localhost:3000 등을 필요로 함). 구성 플래그로 활성화할 수 있습니다. 구조화되지 않은 PII(이름, 장소, 생일 등) 역시 지연을 방지하기 위해 기본적으로 비활성화되어 있으며, 필요에 따라 켤 수 있습니다. |
설정
npm install @rehydra/opencode
opencode.json에 플러그인을 추가합니다:
{
"plugin": ["@rehydra/opencode"]
}
이것으로 끝입니다. 플러그인은 프로젝트 루트에 있는 .env 파일을 읽고 바로 스크러빙을 시작합니다—추가 설정 파일, API 키, 혹은 계정이 필요하지 않습니다.
맞춤 설정 (선택 사항)
import { createRehydraPlugin } from "@rehydra/opencode";
export default createRehydraPlugin({
envFiles: [".env", ".env.local", ".env.production"],
redactValues: ["sk-live-abc123..."],
minValueLength: 6,
disableTypes: [], // URL 및 IP 감지를 다시 활성화
});
이것이 하지 않는 것
- VPN이 아닙니다. 신원을 가리거나 네트워크 트래픽을 익명화하지 않습니다.
- 컴플라이언스 인증이 아닙니다. 이는 기술적 제어이며, AI‑지원 개발 중에 특정 민감한 값이 머신을 떠나는 것을 방지하는 결정론적 레이어입니다.
- 파괴적이지 않습니다. 분석 파이프라인을 위한 정규식 스크러빙과 달리, 이것은 완전히 되돌릴 수 있습니다. 데이터는 전송 중에 추상화되고 로컬 실행을 위해 복원됩니다. 아무것도 손실되지 않습니다(그것이 바로 Rehydra의 핵심입니다).
전체 그림
코딩 에이전트가 자동완성 스타일 도우미에서 완전 자율 개발자로 진화함에 따라 “로컬 실행”과 “원격 추론” 사이의 경계가 흐려집니다. @rehydra/opencode와 같은 프라이버시 보호 레이어를 사용하면 AI의 힘을 유지하면서 비밀을 제자리인 여러분의 머신에 보관할 수 있습니다.
증가하는 보안 표면
인프라를 배포하고, 비밀을 관리하며, 프로덕션 API와 상호작용하는 자율 시스템에 대해 보안 표면은 이들과 함께 커집니다. 우리는 원시 자격 증명을 제3자 추론 엔드포인트에 계속 보내면서 최선이라고 기대할 수 없습니다.
힘을 희생하지 않는 보안
Security doesn’t have to mean crippling your tools. By applying the same semantic anonymization we use for translation workflows, we let coding agents reason about your secrets without ever seeing them.
- The agent stays powerful.
- Your secrets stay local.
시작하기
- GitHub:
- NPM:
npm install @rehydra/opencode - 문서:
