본문 바로가기

개발(합니다)/Java&Spring

[spring boot 설정하기-15] spring cloud config(2) 암호화 설정 및 테스트 소스

반응형

환경설정은 보안을 신경써야 하는 부부이라 노출되면 안되는 정보들이 있습니다.

예를 들어 비밀번호나 토큰키 같은 정보들입니다.

아래 사진처럼 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 조회

복호화 된 비밀번호는 *로 마스킹 처리되어 표시됩니다.

반응형