
터미널 화면에서 tene로 비밀값을 암호화해 가져오고, .env 파일을 삭제한 뒤에도 앱이 동일한 환경변수로 실행되는 과정을 보여준다. 평문 .env 없이도 로컬에서 secrets를 안전하게 관리하는 워크플로를 설명하는 예시다.
한줄 요약
tene는 평문 .env의 비밀값을 암호화된 vault로 옮긴 뒤, 실행 시에는 기존과 같은 환경변수로 주입해 앱 코드를 바꾸지 않게 해주는 도구다.1
이 글의 문제의식
평문
.env는 실수로 저장소에 커밋되기 쉽다.1AI 코딩 세션이나 자동화 환경에서도 파일 내용이 그대로 노출될 수 있다.1
핵심은 비밀값이 디스크에 평문으로 남지 않게 하면서도, 앱 사용 방식은 바꾸지 않는 것이다.1
60초 마이그레이션 절차
설치
curl -sSfL https://tene.sh/install.sh | sh프로젝트에서 vault 초기화
tene init이 과정에서 마스터 비밀번호를 설정하고,
.tene/vault.db가 생성되며, 12단어 BIP-39 복구 mnemonic이 출력된다.1기존
.env가져오기
tene import .env각
KEY=VALUE가 암호화된 레코드로 저장된다.1평문
.env삭제
rm .env기존 실행 명령을
tene run으로 감싸서 실행
tene run -- npm start앱은 그대로
process.env.KEY같은 방식으로 값을 읽을 수 있다.1
내부 동작/보안 방식 요약
마스터 비밀번호에서 Argon2id(64MB, 3 iterations)로 256-bit master key를 만든다.1
이 master key에서 HKDF-SHA256으로 실제 암호화 키를 파생한다.1
vault는 SQLite 기반이며, 데이터는 XChaCha20-Poly1305로 암호화된다.1
키는 macOS Keychain, Linux libsecret, Windows Credential Vault 같은 OS keychain에 캐시된다.1
가져오기 과정에서 평문 값은 메모리에서 암호화되고, 이후 남기지 않는 방향으로 동작한다는 점이 이 도구의 핵심이다.1
운영 시 주의사항
12단어 복구 mnemonic은 반드시 안전한 곳에 보관해야 한다. 비밀번호를 잃으면 사실상 이 문구가 유일한 복구 수단이다.1
tene get KEY는 평문을 stdout으로 출력하므로, AI 코딩 세션에서는tene list를 쓰는 편이 안전하다.1CI 같은 비대화형 환경에서는 OS keychain을 기대하면 안 되므로
--no-keychain과TENE_MASTER_PASSWORD를 함께 사용해야 한다.1이때 CI에 넣는 마스터 비밀번호는 vault를 처음 만들 때 사용한 값과 같아야 한다.1
환경별 분리 사용법
기본 환경은
default다.1스테이징, 운영 환경을 따로 만들 수 있다.1
tene env create staging
tene env create prod특정 환경에만 값 저장
tene set DATABASE_URL ... --env staging특정 환경으로 실행
tene run --env prod -- node server.js같은 프로젝트 안에서도 환경을 분리해 운영할 수 있어,
.env.production,.env.staging식의 파일 관리 부담을 줄이기 좋다.1
핵심 장점 정리
평문
.env를 없애 비밀값 노출 위험을 줄인다.1앱 코드 수정 없이 바로 옮길 수 있다.1
실행 시점에는 기존 환경변수 방식 그대로 유지된다.1
언어와 무관하게 사용할 수 있다.1
로컬 개발, 스테이징, 운영 환경을 한 도구 안에서 나눠 관리할 수 있다.1
출처
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.