Back-End/Spring

[Spring Cloud] Spring Cloud Config 에서 Github Private Repository 접근하기

HMHA 2023. 2. 10. 12:06
300x250
반응형
300x250

지난 포스팅에서 Spring Cloud Config 를 통해 설정 외부화를 하는 과정을 알아보았다. 설정 외부화의 수단은 Github이었고 public repository에 있는 설정 파일에 대해 알아보았다. 이번에는 Github의 private repository에 접근하여 설정값을 가져오는 방법에 대해 알아보겠다. 

 

[MSA 시작 #4] Spring Cloud Config + Github 을 이용한 설정 변경 동적으로 반영하기

MSA를 하면 당연히 어플리케이션 개수가 많아지고 그에 따라 어플리케이션마다 있는 설정 파일도 많아진다. 이렇게 되면 관리의 어려움이 생기고 이번에도 이런 관리의 어려움을 해결해주기 위

oingdaddy.tistory.com

git private repository

Github에 private repository를 하나 생성했다. 그리고 branch는 master를 하나 생성했다. 또한 설정을 가지고 올 oingdaddy.properties 파일을 생성을 해 두었다. 

 

private repository에 있는 값을 가지고 오는 방법은 크게 두가지가 있다. 

첫번째는 ConfigServer application의 application.yml에서 직접 git 계정을 입력해 https로 가져오는 방법

두번째는 ConfigServer application의 application.yml에서 공개키를 이용한 SSH로 가져오는 방법이다. 


1. 직접 git 계정을 입력해 https로 가져오는 방법

ConfigServer application의 application.yml

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git: 
          uri: https://github.com/oingdaddy/msastudy-private.git
          username: git 계정명 
          password: git 패스워드

or application.properties

spring.cloud.config.server.git.uri=https://github.com/oingdaddy/msastudy-private
spring.cloud.config.server.git.username=git 계정명
spring.cloud.config.server.git.password=git 비밀번호

이렇게 입력해주면 끝! uri 부분을 보면 https://~~~ 로 시작을 한다. 하지만 회사에서 사용을 하는거라면 개인의 git 정보가 노출되기 때문에 많이 사용되지는 않을것 같다.

ConfigServer를 동작시키고 http://localhost:8200/oingdaddy/local 이라고 입력했을때 Github에 등록한 oingdaddy-local.properties 파일 안의 oingdaddy라는 key에 대한 value를 뿌려주면 정상 작동을 하는 것이다. 

 

2. 공개키를 이용한 SSH로 가져오는 방법 

일단 SSH Key가 없다면 새로운 SSH key를 생성을 해야 한다. cmd 창을 열고 다음과 같이 명령어를 입력해준다. 

> ssh-keygen -m PEM -t rsa -b 4096 -C "git 계정"

new SSH key generate

위에서 지정한 경로로 들어가보면 아래와 같이 파일이 두개 생성되었을것이다. 열어보자. 

rsa public key

rsa private key

temp.pub 파일에는 공개키가, temp 파일에는 개인키가 들어가있다. 

공개키는 Github에서 사용을 하고 개인키는 ConfigServer에서 사용을 할 것이다. 

(Github SSH Keys 등록

Github에서 User > Settings > SSH and GPG keys > New SSH key 를 눌러서 공개키(.pub)를 등록한다.  

(Deploy Keys 로 하는 방식은 이제 안되는것 같다. )

 

추가시킬때 아래 빈칸이 있으면 등록이 안된다. 주의해서 등록하자. 

 

Github SSH Keys

키 등록이 정상적으로 되었으면 위와 같은 모습으로 나타난다. 

 

Git Clone 방식중 SSH를 선택한다. 그리고 URL을 복사를 한다. Github에서 할일은 끝났다. 

 

 

ConfigServer application의 application.yml

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git: 
          uri: git@github.com:oingdaddy/msastudy-private.git
          ignoreLocalSshSettings: true
          privateKey: |
            -----BEGIN RSA PRIVATE KEY-----
            MIIJKQIBAAKCAgEAoUtrD45Jz6uz31W/DNSj7p4p+2O3nomeLmsAN8WY4z7HLlOF
            /hQxii+CSaMIZfmINdZSE+fctOJKFAnuWq8VG8N1ESExiBqFZMHpZqI390eVG/pb
            sHMO8cPo/1+e+jKvL9VunGhiqenlNQRDALLPwlMQPKUIl3HKtDW3U9yrpWCPhcKI
            Na1mn3yCzyXIjwLL4+4+q0JN214CVGmqzrwIfL450vIAhn7+qeZlT0Js7p3hT3JR
            h/PZJKXJmHTYEFrZkf3ZSVd1JDjHIHrdoK+eXvFl5WpmUpcqIegox9qmQsVnZich
            SIEqjAP1/DMqgV3jPsLEO1wZk5EG4OIn8vkwRSaLoaZ1/KF5laO+8V3DRyj5fVH2
            hZT0ZL9Dfuqv/sMpM+M6aPT3XzPj+T7RPmedfiRgnfYI3qML1h3t+3baGPeVBtBP
            uSCoO00ajiwFQN/d/Ce42dVhJkqP13WINJQh9ROQZOxV7X2+HxFjhRKp2oPkLabI
            JGLHXJz9Oyd99+HjQUe2WwaW8zZ6UyZ3tRD52UCLoWc3zz7H3XrWUCgU2RRa1RQf
            ....
            -----END RSA PRIVATE KEY-----

or application.properties

server.port=8200
spring.application.name=config-server
spring.cloud.config.server.git.uri=git@github.com:oingdaddy/msastudy-private.git
spring.cloud.config.server.git.ignoreLocalSshSettings=true
spring.cloud.config.server.git.privateKey=-----BEGIN RSA PRIVATE KEY-----\n\
  MIIJKQIBAAKCAgEAoUtrD45Jz6uz31W/DNSj7p4p+2O3nomeLmsAN8WY4z7HLlOF\n\
  /hQxii+CSaMIZfmINdZSE+fctOJKFAnuWq8VG8N1ESExiBqFZMHpZqI390eVG/pb\n\
  sHMO8cPo/1+e+jKvL9VunGhiqenlNQRDALLPwlMQPKUIl3HKtDW3U9yrpWCPhcKI\n\
  Na1mn3yCzyXIjwLL4+4+q0JN214CVGmqzrwIfL450vIAhn7+qeZlT0Js7p3hT3JR\n\
  h/PZJKXJmHTYEFrZkf3ZSVd1JDjHIHrdoK+eXvFl5WpmUpcqIegox9qmQsVnZich\n\
  SIEqjAP1/DMqgV3jPsLEO1wZk5EG4OIn8vkwRSaLoaZ1/KF5laO+8V3DRyj5fVH2\n\
  hZT0ZL9Dfuqv/sMpM+M6aPT3XzPj+T7RPmedfiRgnfYI3qML1h3t+3baGPeVBtBP\n\
  uSCoO00ajiwFQN/d/Ce42dVhJkqP13WINJQh9ROQZOxV7X2+HxFjhRKp2oPkLabI\n\
  JGLHXJz9Oyd99+HjQUe2WwaW8zZ6UyZ3tRD52UCLoWc3zz7H3XrWUCgU2RRa1RQf\n\
  ....
  -----END RSA PRIVATE KEY-----\n\

ConfigServer의 application.yml 파일에서는 위와 같이 작성을 한다. uri 부분은 반드시 ssh uri로 입력을 해주고 privateKey 부분에 개인키를 넣는다. 여기서 -----BEGIN RSA PRIVATE KEY----- 이부분은 빼면 안된다.

properties 파일은 잘 안되가지고 좀 고생했다.. 여러라인의 문자열을 하나의 key 값에 매핑을 시키려면 \n\을 문자열 뒤에 추가를 시켜줘야한다..

 

SSH 방식일때의 properties는 다음을 참고하자. 

PropertyName Remarks
ignoreLocalSshSettings If true, use property-based instead of file-based SSH config. Must be set at as spring.cloud.config.server.git.ignoreLocalSshSettings, not inside a repository definition.
privateKey Valid SSH private key. Must be set if ignoreLocalSshSettings is true and Git URI is SSH format.
hostKey Valid SSH host key. Must be set if hostKeyAlgorithm is also set.
hostKeyAlgorithm One of ssh-dss, ssh-rsa, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, or ecdsa-sha2-nistp521. Must be set if hostKey is also set.
strictHostKeyChecking true or false. If false, ignore errors with host key.
knownHostsFile Location of custom .known_hosts file.
preferredAuthentications Override server authentication method order. This should allow for evading login prompts if server has keyboard-interactive authentication before the publickey method.

 

이렇게 했을때 결과는?

바뀐점은 propertySources.name 부분만 https에서 ssh로 변경이 되었고 아까 https 를 통해서 가져오는것과 동일하게 내용을 잘 가지고 오는것을 확인할 수 있다. 

 

끝!

 


출처 : https://oingdaddy.tistory.com/188

 

Spring Cloud Config 에서 Github Private Repository 접근하기

지난 포스팅에서 Spring Cloud Config 를 통해 설정 외부화를 하는 과정을 알아보았다. 설정 외부화의 수단은 Github이었고 public repository에 있는 설정 파일에 대해 알아보았다. 이번에는 Github의 private re

oingdaddy.tistory.com

 

300x250
반응형