Computer >> 컴퓨터 >  >> 프로그래밍 >> Redis

Upstash로 EnvShare에서 환경변수를 안전하게 공유하는 방법

envshare.dev는 개발자가 누구에게나 안전하게 환경변수를 공유할 수 있도록 도와주는 오픈소스 프로젝트입니다. .env 파일을 업로드하거나 직접 환경변수를 입력하면 데이터베이스에 저장되기 전에 암호화됩니다. 이후 생성된 링크를 공유하면 받은 사람이 해당 링크를 통해 환경변수를 복호화할 수 있습니다.


EnvShare는 무료로 사용할 수 있으며 오픈소스로 공개되어 있어, 소스 코드는 GitHub에서 확인할 수 있습니다.

주요 기능

  • 공유 링크: 링크 하나만 보내면 환경변수를 안전하게 공유할 수 있습니다
  • 종단간 암호화: 저장 전 AES 암호화 방식으로 데이터를 보호합니다
  • 읽기 횟수 제한: 링크를 열람할 수 있는 횟수를 지정하고 암호화할 수 있습니다
  • 자동 만료: 일정 시간이 지나면 링크가 만료되고 데이터가 자동으로 삭제됩니다

작동 원리

환경변수를 공유할 때마다 브라우저에서 새로운 무작위 암호화 키가 생성됩니다. 민감한 데이터는 AES로 암호화된 후 Redis에 저장됩니다.

그다음 고유한 문서 ID와 암호화 키가 결합되어 공유 가능한 링크가 만들어지며, 이 링크를 통해 데이터에 접근하고 복호화할 수 있습니다.

Upstash로 EnvShare에서 환경변수를 안전하게 공유하는 방법

데이터 구조

EnvShare는 암호화된 환경변수를 Redis에 저장합니다. Redis는 빠른 키-값 스토어로 활용할 수 있을 뿐만 아니라 리스트, 셋(set), 해시(hash) 같은 더 복잡한 자료 구조도 지원하기 때문에 탁월한 선택입니다. 또한 만료된 키를 자동으로 삭제해 주므로 이번 사용 사례에 딱 맞습니다.

데이터는 다음과 같은 구조의 Redis 해시에 저장됩니다:

{
"remainingReads": 20, // 선택 사항, 링크를 읽을 수 있는 횟수
"encrypted": "...", // 암호화된 환경변수
"iv": "..." // AES-CBC용 초기화 벡터
}

해시를 사용하면 암호화된 데이터와 함께 메타데이터를 저장할 수 있고, HINCRBY 명령으로 남은 읽기 횟수를 원자적으로 감소시킬 수도 있습니다. Redis는 놀랄 만큼 유연해서 새로운 아이디어를 빠르게 실험하고 구현할 수 있습니다. 예를 들어 앞으로 접속 로그 같은 기능을 추가한다면 정렬된 셋(sorted set)이 적합할 것입니다.

유일한 문제점은 Redis가 일반적으로 TCP를 통해서만 접근 가능하다는 점인데, 이는 엣지 함수(edge function) 환경에서는 동작하지 않습니다. 다행히 Upstash는 HTTP를 통해 Redis에 접근할 수 있는 Redis API를 제공하며, 이것이 바로 EnvShare에 필요한 기능입니다. Upstash는 하루 10,000건의 요청을 처리할 수 있는 무료 Redis 데이터베이스를 제공하므로 충분히 여유롭습니다. EnvShare를 직접 호스팅하고 싶다면 무료 계정을 만들어 활용할 수 있습니다.

셀프 호스팅 가이드는 공식 문서를 참고하세요.

엣지 함수에 Redis를 설정하는 과정은 매우 간단합니다. 데이터베이스를 생성하고 @upstash/redis 패키지만 설치하면 됩니다.

그러면 엣지 함수에서 다음과 같이 데이터를 저장할 수 있습니다:

/api/share.ts
import { Redis } from "@upstash/redis";

const redis = new Redis({
url: "..." // UPSTASH_REDIS_REST_URL
token: "..." // UPSTASH_REDIS_REST_TOKEN
});

await redis.hset(key, {
remainingReads: 20,
encrypted: "...",
iv: "...",
});

마치며

읽어주셔서 감사합니다! EnvShare는 Next.js와 Upstash Redis를 얼마나 쉽게 시작할 수 있는지 보여주기 위해 만든 재미있는 프로젝트입니다. 실무에서 유용하게 활용하시길 바랍니다. 궁금한 점이나 피드백이 있다면 Twitter로 언제든지 연락해 주세요.

관련 링크:

  • EnvShare 공식 사이트
  • GitHub 저장소
  • 배포 가이드