환경설정은 보안을 신경써야 하는 부부이라 노출되면 안되는 정보들이 있습니다.
예를 들어 비밀번호나 토큰키 같은 정보들입니다.
아래 사진처럼 rabbitmq의 username/password인 guest/guest 정보에서 비밀번호가 해당합니다.
spring cloud config에서는 이를 암호화 할 수 있는 종단점을 기본적으로 제공합니다.
POST형태의 /encrypt와 /decrypt이며 key store를 등록해야 사용 가능합니다.
1. config-server -> 의존성 추가
bootstrap.yml은 application.yml보다 먼저 로드하며 어떤 설정 정보를 주입하기 위해 사용됩니다.
spring cloud에서는 bootstrap.yml 의존성이 없으므로 bootstrap을 의존성에 추가해주어야 합니다.
implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'
2. confing-server -> bootstrap.yml 생성 및 설정
아래 설정을 하면 키를 사용한다고 선언하게 됩니다.
encrypt:
key: my_config_key
3. config-server -> Post /encrypt 테스트
인텔리제이에서 PostMan을 대체할 수 있는 기능으로 .http가 있어서 사용했습니다.
Run -> Endpoints -> Mappings를 보면 /encrypt가 추가된걸 확인할 수 있습니다.
.http로 요청을 하고 리턴받은 결과로 암호화가 된걸 확인할 수 있습니다.
4. config-server -> 환경설정에 저장하기
POST로 보낼때는 값만 보내야 합니다.
guest를 암호화한 결과를 가지고 테스트 하도록 하겠습니다.
member-service.yml에 암호화 키를 저장합니다.
{cipher}를 입력해야 암호화키인지를 인식합니다.
원격지에 저장이 잘되었는지도 확인합니다.
my-config.name: default update spring cloud bus gogo
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: "{cipher}08fde35c4f79cc080854c47871e241fc293fa157b5d9151be5a05fc5aed1d2bb"
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
shutdown:
enabled: true
5. config-server -> /actuator로 조회
암호화 된 password를 복호화한 결과를 확인할 수 있습니다.
6. 클라이언트측에서 암호화하도록 구성
config-server와 config-client의 application.yml과 bootstrap.yml을 재구성합니다.
6-1. confiig-server -> application.yml
server:
port: 8888
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
shutdown:
enabled: true
6-2. config-server -> bootstrap.yml
spring:
application:
name: configserver
# profiles:
# active: composite
cloud:
config:
server:
encrypt:
enabled: false # Config Server에서 복호화 비화성화
git:
uri: file:///D:/__otrodevym/git/spring-cloud-config-repo
# uri: https://github.com/otrodevym/spring-cloud-config-repo.git
# label: master
# composite:
# - type: native
# search-locations: file:D:/__otrodevym/git/spring-cloud-config-repo/
# bootstrap: true
encrypt:
key: my_config_key
암호화 된 결과를 그대로 가져오는걸 확인할 수 있습니다.
6-3. client-server -> 의존성 추가
spring-security-rsa를 추가하면 암호화 된 값을 자동으로 복호화합니다.
// https://mvnrepository.com/artifact/org.springframework.security/spring-security-rsa
implementation 'org.springframework.security:spring-security-rsa'
implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'
6-4. client-server -> application.yml
server:
port: 9091
6-5. client-server -> bootstrap.yml
spring:
application:
name: member-service
profiles:
active: default
config:
import: optional:configserver:http://localhost:8888
# cloud:
# config:
# uri: http://localhost:8888 # Config Server
encrypt:
key: my_config_key
6-6. config-client -> /actuator/env 조회
복호화 된 비밀번호는 *로 마스킹 처리되어 표시됩니다.
'개발(합니다) > Java&Spring' 카테고리의 다른 글
[spring boot 설정하기-17] spring cloud eureka(1) 설정 및 테스트 소스 (0) | 2021.05.18 |
---|---|
[spring boot 설정하기-16] spring cloud config(3) git 연동 설정 및 테스트 소스 (0) | 2021.05.08 |
[spring boot 설정하기-14] spring cloud config(1) 설정 및 테스트 소스 (1) | 2021.05.06 |
[spring boot 설정하기-13] spring cloud feign 설정 및 테스트 소스 (0) | 2021.05.02 |
[spring boot 설정하기-12] admin(+security) 설정 및 테스트 소스 (0) | 2021.05.01 |