BackEnd/Spring Cloud

[Spring Cloud] Spring Cloud Config Server ์„ค์ •๊ฐ’์„ Private Repository ์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ

ddonghyeo 2024. 2. 12. 02:35

์ €๋ฒˆ ํฌ์ŠคํŒ…์—์„  ์ž„์‹œ๋กœ Public Repository๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ์ค‘์š”ํ•œ ํŒŒ์ผ์ด ๋“ค์–ด์žˆ๋Š” ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋Š” ๋‹น์—ฐํžˆ private์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋Ÿผ ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„ , Config Server์—์„œ private repository๋กœ๋ถ€ํ„ฐ ์„ค์ • ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์„ธํŒ…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

1. ๋น„๋Œ€์นญ ํ‚ค ์ƒ์„ฑ

 

๋งฅ์—์„œ๋Š” ssh ๋น„๋Œ€์นญ ํ‚ค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

$  ssh-keygen -m PEM -t rsa -b 4096 -C {๊นƒํ—ˆ๋ธŒ ๊ณ„์ •}

 

์ €์žฅํ•  ์œ„์น˜์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ(passphrase)๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋งŒ๋“ค์–ด์ฃผ์ž.

 

2. Deploy Key ๋“ฑ๋ก

 

๋งŒ๋“ค์–ด ์ฃผ๋ฉด, .pub ์˜ Public key๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ 

 

์ด๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋Š” Private repository์— Deploy Key๋กœ ๋“ฑ๋กํ•ด์ฃผ์ž.

 

 

์ƒ์„ฑํ•œ ํ‚ค๋ฅผ cat ๋ช…๋ น์–ด๋กœ ๋ณด๊ณ , ํ‚ค๋กœ ๋“ฑ๋กํ•ด์ฃผ์ž.

 

$ cat ~/.ssh/id_rsa.pub

 

3. yml ์„ค์ •

config server์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด yml ์„ค์ •์„ ํ•ด์ฃผ์ž.

spring:
  cloud:
    config:
      server:
        git:
          uri: {๊นƒํ—ˆ๋ธŒ ์ฃผ์†Œ}
          ignore-local-ssh-settings: true
          passphrase: {passphrase}
          private-key: |
            -----BEGIN RSA PRIVATE KEY-----
            Proc-Type: 4,ENCRYPTED
            DEK-Info: AES-128-CBC,660C2ED7C6F0A4A92AC04CCA7E052C79
              
            ~์ƒ๋žต~
            -----END RSA PRIVATE KEY-----

 

- uri๋Š” ๊นƒํ—ˆ๋ธŒ ๋ ˆํฌ์—์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

- passphrase์—” ํ‚ค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋„ฃ์—ˆ๋˜ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์ž.

- private-key๋Š” 

$ cat ~/.ssh/id_rsa

์—์„œ ๋‚˜์˜จ private key๋ฅผ ๋„ฃ์ž.

 

 

 

์ด์ œ ์ •์ƒ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.

 

 

์ž˜ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

 

์ธ์ฆ์— ์‹คํŒจํ•˜๋ฉด, no authorize ์ด๋ผ๊ณ  ๋‚˜์˜ค๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

 

 

4. private key ์•”ํ˜ธํ™”(๋ฏธ๊ฒฐ)

 

๊ทธ๋Ÿฐ๋ฐ, ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

 

Config Server ์— ๋“ค์–ด๊ฐ€๋Š” ๋น„๋Œ€์นญ ํ‚ค ๊ฐ’์€ ๊นƒํ—ˆ๋ธŒ์— ๊ทธ๋Œ€๋กœ ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋œ๋‹ค.

 

์ด ๋น„๋Œ€์นญ ํ‚ค ๊ฐ’์ด ์žˆ๋‹ค๋ฉด ๋ˆ„๊ตฌ๋“ ์ง€ ๋‚ด private repository์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

๋”ฐ๋ผ์„œ, yml์— ์žˆ๋Š” ์ด private ํ‚ค ๊ฐ’์„ ์•”ํ˜ธํ™” ํ•ด์•ผํ•œ๋‹ค.

 

์ด ๋ฐฉ๋ฒ•์— ๊ด€ํ•œ ์ž๋ฃŒ๋Š” ๋งŽ์ด ์—†์–ด์„œ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค ๐Ÿฅน

 

๊ทธ๋‚˜๋งˆ ์ฐพ์€ ๋ฐฉ๋ฒ•์€ Spring Cloud์—์„œ ์ œ๊ณตํ•˜๋Š” ๋Œ€์นญ ํ‚ค ์•”ํ˜ธํ™” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋งž์ง€ ์•Š์„๊นŒ..?

 

1. ํ‚ค ์Šคํ† ์–ด ์ƒ์„ฑ

$ keytool -genkeypair -alias privateKey -keyalg RSA -dname "CN=Web Server, OU=Unit, O=Organization, L=Seoul, C=KR" -keypass "password" -keystore privateKey.jks -storepass "password"

 

2. ์ธ์ฆ์„œ ์ถ”์ถœ

$ keytool -export -alias privateKey -keystore privateKey.jks -rfc -file trustServer.cer

 

3. public key ์ƒ์„ฑ

$ keytool -import -alias trustServer -file trustServer.cer -keystore publicKey.jks

 

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด, privateKey.jks, publicKey.jks, trust.cer ์„ธ ํŒŒ์ผ์ด ์ƒ๊ธด๋‹ค.

 

์ด์ œ, Spring Cloud Config์— ํ‚ค๋ฅผ ์„ค์ •ํ•ด ๋‘๊ณ ,

encrypt:
  key-store: # ๋น„๋Œ€์นญ ํ‚ค ์‚ฌ์šฉ
    location: file:///Users/kimdonghyun/.ssh/jks/privateKey.jks #private key์˜ ์œ„์น˜
    password: password
    alias: privateKey

private key ๊ฐ’์„ encrypt ํ•˜์—ฌ

 

cipher ํ˜•ํƒœ๋กœ ๋„ฃ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๊ฒ ์ง€๋งŒ.. private key๋ฅผ ์œ„ํ•ด์„œ ํ•œ๋ฒˆ ๋” ๋Œ€์นญ ํ‚ค๋ฅผ ๋งŒ๋“ค๊ณ  ๋ณตํ˜ธํ™” ..? 

 

๋ญ”๊ฐ€ ๋น„ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™๋‹ค. ๊ณผ์—ฐ ํ˜„์—…์—์„  ์–ด๋–ป๊ฒŒ ํ•˜๋Š”๊ฑธ๊นŒ .. 

 

๋งŒ์•ฝ ๋‚ด๊ฐ€ ์‹ค์ œ ๊ฐœ๋ฐœํ•˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด, ๋กœ์ปฌ์—์„œ๋Š” private key๊ฐ’์ด ๋“ค์–ด์žˆ๋Š” yml์„ ์˜ฌ๋ฆฌ์ง€ ์•Š๊ณ ,

 

์‹ค์ œ ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ๋Š” Github Action + Secret ์„ ํ†ตํ•ด์„œ Private key๋ฅผ ์ฃผ์ž…ํ•  ๊ฒƒ ๊ฐ™๋‹ค.