구성 파일 내 민감 정보 암호화하기

날아올라돼지야·2024년 8월 27일
0

GitHub 리포지토리에 저장된 구성 속성을 암호화된 형식으로 저장하고, Spring Cloud Config 서버에서 이를 해독하는 방법을 다룹니다. 이 방법을 통해 GitHub 리포지토리에 접근할 수 있는 사람도 민감한 데이터를 직접 볼 수 없도록 할 수 있습니다.

암호화 키 설정

application.yml 업데이트

Spring Cloud Config 서버의 application.yml 파일을 열고, 암호화에 사용할 비밀 키를 설정합니다.
예를 들어, 다음과 같이 설정합니다:

encrypt:
  key: your_complex_secret_key_here

이 키는 암호화 및 복호화에 사용되며, 복잡하고 예측하기 어려운 값이어야 합니다.

실제 예:

encrypt:
  key: "45D81EC1EF61DF9AD8D3E5BB397F9"

구성 속성 암호화

암호화 API 사용

Config 서버는 /encrypt API를 제공하여 속성 값을 암호화할 수 있습니다.

Postman에서 POST 메서드를 사용해 http://localhost:8071/encrypt 경로로 요청을 보내면, 평문 텍스트를 암호화된 값으로 변환해 줍니다.

예를 들어, email 속성을 암호화하려면 해당 값을 요청 본문에 넣어 보내면 됩니다.

※ 우리가 직접 /encrypt 엔드포인트에 대한 컨트롤러 처리를 하지 않습니다. Config 서버 자체에 있는 기능입니다.

test@naver.com 이라고 보내면 1i23ji12j3jsisaf234eaa344a34afdvdvf 식의 응답이 올 것입니다.

암호화된 값 저장

암호화된 값을 GitHub 리포지토리의 구성 파일에 저장합니다.
이때, 암호화된 값 앞에 {cipher} 접두사를 붙여야 Config 서버가 이를 암호화된 값으로 인식합니다.

email: "{cipher}encrypted_value_here"

예를 들어 앞서 test@naver.com 의 암호화 값인 1i23ji12j3jsisaf234eaa344a34afdvdvf 를 github 레포지토리 내 구성 파일에 저장합니다.

이렇게 함으로써 github repo가 외부에 노출되더라도 값이 암호화되어 있기 때문에 보안상 유리합니다.

Config 서버에서 복호화

Config 서버 복호화 확인

Config 서버가 GitHub 리포지토리에서 암호화된 값을 읽어와서 복호화할 수 있는지 확인합니다.
http://localhost:8071/accounts/prod 같은 API를 호출하면 Config 서버가 암호화된 값을 복호화하여 반환합니다.

마이크로서비스와의 통합 테스트

마이크로서비스에서 복호화된 값 수신

accounts 마이크로서비스를 실행한 후, 해당 마이크로서비스가 Config 서버에서 복호화된 값을 수신하는지 확인합니다.

예를 들어, contact-info API를 호출하여 복호화된 이메일 주소가 반환되는지 확인합니다.

추가 보안 조치

Config 서버 보호

실무에서는 Config 서버를 방화벽 뒤에 배치하고, 외부에서는 직접 접근할 수 없도록 설정합니다.
필요 시, Spring Security를 사용하여 추가적인 인증 및 권한 관리 기능을 적용할 수 있습니다.

profile
무슨 생각하며 사니

0개의 댓글