GitHub 리포지토리에 저장된 구성 속성을 암호화된 형식으로 저장하고, Spring Cloud Config 서버에서 이를 해독하는 방법을 다룹니다. 이 방법을 통해 GitHub 리포지토리에 접근할 수 있는 사람도 민감한 데이터를 직접 볼 수 없도록 할 수 있습니다.
Spring Cloud Config 서버의 application.yml 파일을 열고, 암호화에 사용할 비밀 키를 설정합니다.
예를 들어, 다음과 같이 설정합니다:
encrypt:
key: your_complex_secret_key_here
이 키는 암호화 및 복호화에 사용되며, 복잡하고 예측하기 어려운 값이어야 합니다.
실제 예:
encrypt:
key: "45D81EC1EF61DF9AD8D3E5BB397F9"
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 서버가 GitHub 리포지토리에서 암호화된 값을 읽어와서 복호화할 수 있는지 확인합니다.
http://localhost:8071/accounts/prod 같은 API를 호출하면 Config 서버가 암호화된 값을 복호화하여 반환합니다.
accounts 마이크로서비스를 실행한 후, 해당 마이크로서비스가 Config 서버에서 복호화된 값을 수신하는지 확인합니다.
예를 들어, contact-info API를 호출하여 복호화된 이메일 주소가 반환되는지 확인합니다.
실무에서는 Config 서버를 방화벽 뒤에 배치하고, 외부에서는 직접 접근할 수 없도록 설정합니다.
필요 시, Spring Security를 사용하여 추가적인 인증 및 권한 관리 기능을 적용할 수 있습니다.