Spring/Spring

스프링환경설정파일(.properties,.yml),노출되면 안되는 정보 파일 관리, 빌드/배포 [미완]

backend dev 2023. 1. 20.

Spring boot 프로젝트를 github  public repository에 올리게 되면 

application.*  또는 노출되면 안되는 정보가 적힌 파일이 노출될 수 있다.

 

외부에 중요한 정보가 노출되지 않고 팀과 파일 공유 / 빌드,배포하는 방법을 알아보자

 

1. git ignore

중요한 파일들을 .gitignore 설정하여 깃허브 리포지토리에 올라가지않게 하는 방법이다.

하지만 application.* 등 빌드에 필요한 파일들은 빌드할때 직접 넣어줘야하고

팀과 파일을 공유할때 어떻게 공유할지 문제가 발생한다.

 

 

2. Git Secrets 이용

[해당 방법은 git action을 이용한 ci/cd에서도 사용되는 방법이다.]

application.*이라던지 중요정보가 적힌 파일 자체 또는 중요한 키값을 Git Action Secrets에 저장하여

git workflow를 진행할때 사용할 수 있다.

다음과 같이 저장해둔다, 값을 한번 저장하면 확인할 수 없고 수정하거나 삭제만 가능하다.

workflow를 작성하는 yml에서

${}를 이용하여 git secrets의 내용을 가져와 파일을 만들어 넣어줄 수 있다 (secrets에 파일 내용 전체를 저장했을경우)

또는 키값을 저장한 secret을 가져와 설정해줄수도 있다.

또는 application.* 안에서 secret을 가져와 설정 할 수 있다. 

 

 

이렇게 설정해두고 workflow가 실행되면서 값이 알아서 잘 들어가고 workflow에서 빌드 및 배포까지 설정해줬다면

잘 동작할 것이다.

 

단점 : 배포환경에 따라 (dev,prod,test 등) 각기 다른 secret값을 가져와 일일이 설정해주어야 할것같다.

 

추가 

git actions secret은 저장된값을 확인 못하는데

git action variable은 확인이 가능하다.( 해당 리포지토리의 collaborator만)

variable로 중요값들을 저장하면 팀과 공유가 되겠지만, 노출될 가능성이 존재한다.

 

암호화된 비밀 - GitHub Docs

About encrypted secrets Secrets are encrypted variables that you create in an organization, repository, or repository environment. The secrets that you create are available to use in GitHub Actions workflows. GitHub uses a libsodium sealed box to help ensu

docs.github.com

 

Variables - GitHub Docs

About variables Variables provide a way to store and reuse non-sensitive configuration information. You can store any configuration data such as compiler flags, usernames, or server names as variables. Variables are interpolated on the runner machine that

docs.github.com

 

3. git submodules이용

git submodule은  하나의 리포지토리 안에 하위 리포지토리의 데이터를 가져오고 관리할 수 있다.

 

저장소 a,b 가 있고 저장소 c에는 a,b가 공통으로 사용하는 모듈(라이브러리,환경설정,비밀키값등)이 있다고 했을때

a,b 저장소에 c를 서브모듈로 두어 공통되게 사용할 수 있다. 만약 c의 값이 수정되면 a,b 모두 수정된 코드를 사용할 수 있다.

 

적용 및 테스트 해보지않음

 

단점 : c가 private 리포지토리로 두어도, 암호화되서 데이터가 리포지토리에 올라가는것이 아니니까 노출될 가능성이 있다.

 

c를 팀원끼리 공유하면 공통으로 사용되는 모듈데이터를 쉽게 확인가능하다.

- CI에서 사용한다면, private repo를 clone 할 수 있는 Github Key를 넘겨 설정 파일을 clone 할 수 있다고 한다.

 

 

Git - 서브모듈

gitmodules 파일에 있는 URL은 조건에 맞는 사람이면 누구든지 Clone 하고 Fetch 할 수 있도록 접근할 수 있어야 한다. 예를 들어 다른 사람이 Pull을 하는 URL과 라이브러리의 작업을 Push 하는 URL이 서로

git-scm.com

4. Jasypt를 이용한 암호화

 

java의 Jasypt를 이용하여 중요한 설정값등을 암호화하여 사용할 수 있다.

 

적용 및 실험해보지 않음.

 

장점 : 암호화 되어있으므로 유출되어도 비교적 안전

단점 : 암호화할때 사용할 비밀키값을 설정하고 관리해야하는것 같다.

 

 

 

[Spring] JASYPT를 사용한 프로퍼티 암호화

목적 git의 public repository와 CI/CD를 연동해 어플리케이션을 배포하는데 있어 중요한 정보가 탈취되는 것을 막기 위함 목차 JASYPT란? 사용방법 1. JASYPT란? 홈페이지에 가보면 아래와 같이 적혀있다. J

emgc.tistory.com

 

Jasypt(Java Simplified Encryption)

<br /><br />

junhyunny.github.io

 

[Spring] Jasypt - 자바 코드 암호화 (시크릿 키 암호화하기)

jasypt (자바 키 암호화 방식) 출처 : 우디가 공유해주신 필기노트🙇‍♂️ Jasypt Java Simplified Encryption 자바 코드 암호화 서비스 제공 DB 패스워드, OAuth Client Secret 등 민감정보를 암호화하기 위해 사

bibi6666667.tistory.com

 

5. 외부 서비스 이용

별도의 Config를 관리하는 Server를 사용하고, 배포시 Config Server와 통신하여 설정파일을 가져오는 방식인

Spring Cloud Config 또는 Aws System Manger,AppConfig 등을 사용할 수 있다.

 

적용 및 실험해보지 않음.

 

여러 서버 설정파일을 별도 서버에서 관리 할 수 있다.

Spring Cloud Config 사용시, 서버를 재배포하지않고 설정값을 수정 할 수 있다.

 

 

 

 

Spring Cloud Config: 소개와 예제

스프링 설정이 바뀌었을 때 빌드, 배포없이 갱신하려면 어떻게 해야할까? 스프링의 설정 파일들을 어떻게 외부로 분리시킬 수 있을까?

madplay.github.io

 

Spring Cloud Config

As long as Spring Boot Actuator and Spring Config Client are on the classpath any Spring Boot application will try to contact a config server on http://localhost:8888, the default value of spring.cloud.config.uri. If you would like to change this default,

spring.io

 

어떤것을 사용해야할까

방법1은 나혼자 개발할때 쓰면될것같고

방법2는 git action Secret을 사용한다고 하면 저장한 설정값을 까먹을 수도 있다. (git action variable은 위험할수도있다)

 

방법3,4,5가 괜찮은 방법같다. 5는 서버를 하나 더 구성해야하는 부담이 있을 수 있다(큰 프로젝트에서 사용하면 될거같다)

 

 

 

 

 

secret, config 파일 관리 방법 소개(feat. SpringBoot의 application.*)

잘못된 내용이나 다른 의견 있다면 편하게 말씀해주세요 🙏🏻 들어가며 SpringBoot 프로젝트를 GitHub public repo에서 작업 후 배포한다고 가정하자. SpringBoot의 설정 파일은 application.* 또는 DB 초기 설

kukim.tistory.com

 

댓글