이미 모두 알고 있었을 수 있지만 나는 요새 알게 됐는데 유용한 것 같아 공유한다.
infisical 이란 말하기 힘든 이름을 가진 이 오픈소스는 시크릿 관리 플랫폼입니다. (https://infisical.com/)
서비스 하다 보면 당연하게 local 환경에서 개발하고 테스트 환경에서 개발하고 스테이징 환경에서 개발하고 라이브 환경에서 개발하게 되는데 이때마다 다른 데이터베이스를 참조하거나 다른 써드파티를 참조하거나 하게 되면 그 동안은 .env 파일을 .env.dev, .env.stage, .env.prod 등으로 나누어 쓰거나, docker로 감쌀 때 환경변수 들어가게 설정하거나, 아니면 클라우드에서 각각의 환경변수를 등록해 실행될 때 참조하도록 하는 방식을 이용해 왔다.
심지어는 환경변수 파일들을 slack, notion, email을 통해 전달해야 하는 뭔가 꺼림칙한 상황들이 전개되어 왔는데 이걸 사용하면 개발하는 동안 환경변수 파일들을 보지 않고 api 요청하듯 불러와 사용할 수 있다.
우선 오픈 소스이니 무료로 사용할 수 있다! 그리고 self-hosting을 통해 private하게 인프라에 넣어 두고 쓸 수도 있고 cloud도 제공해 줘서 무료로 바로 시작해 볼 수 있다.
로그인 하게 되면 바로 보이는 화면이다. 여기서 프로젝트를 추가할 수 있고 무료 플랜이니 3개 프로젝트까지 가능하다.
바로 example project의 explore 버튼을 눌러준 뒤 프로젝트 설정에 들어간다!
들어가면 프로젝트 이름을 설정할 수 있고 환경을 관리하는 메뉴가 있다. 환경은 처음에 말했듯 로컬, 테스트, 라이브 등의 개발하는 인프라 환경을 말한다. 일단 샘플 프로젝트에서는 dev, staging, prod로 나눠져 있다. 원하는데로 변경하면 된다.
하단에는 secret tags를 추가해 시크릿 정보들에 대해 tag를 입혀서 database 시크릿 정보면 데이터베이스 시크릿 정보로 태그를 나눌 수도 있다.(아마도 시크릿 정보가 많아지면 검색하기 편하라고 이렇게 한 것으로 보임)
그리고 auto capitalization 온오프 기능으로 대문자를 자동으로 쓰겠끔 하는 기능도 있고 End to end encrytion enalbed기능을 통해 End to End 간 암호화 기능을 통해 서버와 시크릿을 암호화된 형태로 서로 해독할 수 있도록 통신한다.
이제 시크릿 메뉴로 넘어가면 환경 관리에서 설정한 대로 시크릿 목록이 보인다. 시크릿 중 하나를 클릭하면 이런식으로 각 환경에서의 값들이 ....으로 나타나고 마우스를 가까이 가면 복사할 수도 있다. reveal values를 통해 전체 값을 한번에 볼 수도 있다.
explore 버튼을 누르면 아래와 같이 본격 시크릿 값 관리 페이지로 가게 된다.
눈 모양을 누르면 시크릿 값이 모두 보이고 이미 저장한 시크릿 값들은 .env 파일로 저장할 수도 있고 또는 .env 파일을 바로 가져와 import 할 수도 있다. 심지어 시크릿 값 변경에 대한 커밋 내역도 확인할 수 있는 것 같은데 이건 무료 플랜 기능은 아니라서 확인하진 못했다. 아무튼 이런식으로 환경변수를 각 환경에 맞게 저장하고 관리하면 된다.
맴버로 가면 이제 같이 개발하는 팀원들을 초대한다. add member를 통해 어떤 프로젝트(현재는 example project)에 초대할지 선택하고 이메일을 적어주면 초대가 간다. 그러고 그 팀원에게 ROLE 도 정해줄 수 있다. 각 ROLE은 만들 수 있고 각각이 어떤 권한을 가지게 할지도 세밀하게 설정할 수 있다.
여러 써드파티들과 연동도 가능하고 점점 더 쉽게 사용할 수 있도록 빠르게 업데이트 중이다.
Secret Rotation을 통해 주기적으로 시크릿들을 관리해야 하는 것들은 관리를 편히 할 수 있고 Secret Approvals를 통해 정책을 만들고 시크릿 변경을 차단할 수도 있다. 심지어 IP 제한도 가능하다. 그리고 Audit Logs에서 모든 변경에 대한 로그도 쌓인다. 하지만 안타깝게도 이 4가지 기능은 또 무료 플랜에서는 안된다.
이제 설정 방법이 거의 끝났는데, 이제 실제 코드에서는 어떻게 사용하냐를 보면!
node js 앱을 예로 들면 아래와 같다.
https://infisical.com/docs/cli/overview 를 참조해 os에 맞게 cli 를 설치해준다.
그러면 이제 쉬워진다.
infisical login
을 실행해 웹에서 로그인 하거나 infisical login -i
를 통해 터미널에서 로그인할 수도 있다.
그런 뒤 infisical run --env=dev -- nest start
해주면 터미널에서 시크릿 몇 개를 가져왔고 성공이다 실패다를 알려주고 그 시크릿을 이용해 개발을 시작할 수 있다.
만약 self-hosting하고 있을 경우 infisical login으로 self-hosting 을 선택하고
infisical run --domain=<self hosting server domain/api> --env=dev -- nest start
실행하면 된다.
물론 infisical login
을 통해 로그인을 하면 그 다음에는 로그인 안 하고 바로 run 할 수 있지만 그래도 로그인을 패스하고 바로 run 하고 싶다면 아래에서 create token
을 눌러 토큰을 생성해 주고 그 토큰 값을 복사해 아래 명령어와 같이 실행해 주면 된다.
infisical run --domain=<self hosting server domain/api> --token=st.65659813c1cf250cbaacdc5c.fc0b02ffc470e645aebc7c5484d4bfe2.52f3c5c75c19b92276cd22b1b8ab5edd --env=dev -- nest start
팀원들 간에 간단하고 안전하게 시크릿 값을 공유하고 관리할 수 있는 infisical을 한번 사용해 보는 것도 좋아 보인다.
추천합니다!
Your Jenkins data directory /var/lib/jenkins (AKA JENKINS_HOME) is almost full. You should act on it before it gets completely full. (0) | 2023.12.06 |
---|---|
python requests InsecureRequestWarning 해결법 (0) | 2023.11.29 |
Nextjs에 GA 적용해 유저 행동 분석하기! (1) | 2023.11.27 |
Naver Expert - 개발 외주 진행할 뻔한 후기 (2) | 2023.11.23 |
Exception & Error Handling in Python For Professional (0) | 2023.09.26 |
댓글 영역