TLS ์ธ์ฆ์„œ ๊ฐ€์ ธ์˜ค๊ธฐ: ์˜ˆ์‹œ

์ด ์ฃผ์ œ๋Š” ์˜ˆ์‹œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ธ์ฆ ๊ธฐ๊ด€(CA) Let's Encrypt์—์„œ TLS ์ธ์ฆ์„œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋‹จ๊ณ„๋Š” ์ฃผ๋กœ CA์—์„œ ์Šน์ธํ•œ ์ธ์ฆ์„œ/ํ‚ค ์Œ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์—†๋Š” ๊ฒฝ์šฐ์— ์ˆ˜ํ–‰ํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ์‹œ์—์„œ๋Š” Let's Encrypt CA, Certbot ํด๋ผ์ด์–ธํŠธ, Google Cloud Platform Cloud DNS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ

ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์— ๋…ธ์ถœ๋œ ๋Ÿฐํƒ€์ž„ ์ธ๊ทธ๋ ˆ์Šค ๊ฒŒ์ดํŠธ์›จ์ด์— TLS ์ธ์ฆ์„œ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์™ธ๋ถ€ ์—ฐ๊ฒฐ๋„ ์ฐธ์กฐํ•˜์„ธ์š”.

์š”๊ตฌ์‚ฌํ•ญ

๋„๋ฉ”์ธ ์ด๋ฆ„ ๋“ฑ๋ก๊ธฐ๊ด€์„ ํ†ตํ•ด ๊ฐ€์ ธ์˜จ ๋„๋ฉ”์ธ ์ด๋ฆ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Google Domains ๋˜๋Š” ๋‹ค๋ฅธ ์›ํ•˜๋Š” ๋„๋ฉ”์ธ ๋“ฑ๋ก๊ธฐ๊ด€์„ ํ†ตํ•ด ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Cloud DNS ๊ตฌ์„ฑ

์Šน์ธ๋œ TLS ์ธ์ฆ์„œ๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด ์ •๊ทœํ™”๋œ ๋„๋ฉ”์ธ ์ด๋ฆ„์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ๋Š” Google Cloud DNS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜ค๊ณ  ๋„๋ฉ”์ธ ์„œ๋ฒ„๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
  1. Google Cloud ์ฝ˜์†”์„ ์—ด๊ณ  ๊ณ„์ •์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.
  2. Apigee Hybrid๊ฐ€ ์„ค์น˜๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. ์•„์ง Cloud DNS API๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜์ง€ ์•Š์•˜์œผ๋ฉด ์‚ฌ์šฉ ์„ค์ •ํ•˜์„ธ์š”. API ์‚ฌ์šฉ ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.
  4. ๊ณ ์ • IP ์ฃผ์†Œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    • GKE๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ณ ์ • ์™ธ๋ถ€ IP ์ฃผ์†Œ ๊ตฌ์„ฑ์˜ ์•ˆ๋‚ด์— ๋”ฐ๋ผ ์™ธ๋ถ€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋Ÿฐํƒ€์ž„ ์ธ๊ทธ๋ ˆ์Šค์™€ ํ†ต์‹ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ์ • IP ์ฃผ์†Œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ์ฃผ์†Œ์— ์›ํ•˜๋Š” ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: apigee-hybrid-runtime). ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„์˜ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ์—์„œ IP ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด 34.66.75.196์ž…๋‹ˆ๋‹ค.
    • Google Distributed Cloud๋ฅผ ์‚ฌ์šฉ ์ค‘์ธ ๊ฒฝ์šฐ IP ์ฃผ์†Œ ๊ณ„ํš ๋ฐ ์‚ฌ์šฉ์ž ํด๋Ÿฌ์Šคํ„ฐ ๋งŒ๋“ค๊ธฐ์˜ ์•ˆ๋‚ด์— ๋”ฐ๋ผ ๊ณ ์ • IP ์ฃผ์†Œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  5. ๋ฐฉ๊ธˆ ์˜ˆ์•ฝํ•œ ์™ธ๋ถ€ IP๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  6. ๋Ÿฐํƒ€์ž„ Istio ์ธ๊ทธ๋ ˆ์Šค ์—”๋“œํฌ์ธํŠธ์˜ ๋ ˆ์ฝ”๋“œ ์ง‘ํ•ฉ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ์ฃผ์†Œ๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒŒ์ดํŠธ์›จ์ด์— ๋Œ€ํ•ด API ํ˜ธ์ถœ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด์ „ ๋‹จ๊ณ„์—์„œ ๊ฐ€์ ธ์˜จ ์™ธ๋ถ€ IP๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๋„๋ฉ”์ธ ์ด๋ฆ„์— ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: example-endpoint). ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ƒˆ ๋ ˆ์ฝ”๋“œ ๋งŒ๋“ค๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
    1. ๊ด€๋ฆฌํ˜• ๊ณต๊ฐœ ์˜์—ญ ๋งŒ๋“ค๊ธฐ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ด€๋ฆฌํ˜• ๊ณต๊ฐœ ์˜์—ญ ๋งŒ๋“ค๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
    2. ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ๋ ˆ์ฝ”๋“œ ๋ชจ์Œ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
      • DNS ์ด๋ฆ„: api-services ๋˜๋Š” example-endpoint์™€ ๊ฐ™์ด ์™ธ๋ถ€ API ํ˜ธ์ถœ์ด ํ†ต์‹ ํ•  ์—”๋“œํฌ์ธํŠธ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
      • ๋ฆฌ์†Œ์Šค ๋ ˆ์ฝ”๋“œ ์œ ํ˜•: A
      • TTL ๋ฐ TTL: ๊ธฐ๋ณธ๊ฐ’ ํ—ˆ์šฉ
      • IP ์ฃผ์†Œ: ์ƒ์„ฑํ•œ ๊ณ ์ • IP
  7. ์˜์—ญ ์„ธ๋ถ€์ •๋ณด ๋ทฐ์—๋Š” 4๊ฐœ์˜ DNS ์„œ๋ฒ„๊ฐ€ ์ƒˆ ์˜์—ญ์˜ NS ๋ฐ์ดํ„ฐ๋กœ ๋‚˜์—ด๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜ˆ์‹œ์™€ ๊ฐ™์ด DNS ๋ ˆ์ฝ”๋“œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  8. ๋“ฑ๋ก๊ธฐ๊ด€์˜ ๋„๋ฉ”์ธ ํŽ˜์ด์ง€ (์˜ˆ์‹œ: Google Domains)๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.
  9. ๋„๋ฉ”์ธ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  10. DNS๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  11. ๋„ค์ž„์„œ๋ฒ„ ์„น์…˜์—์„œ ์ˆ˜์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  12. ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค Cloud DNS ํŽ˜์ด์ง€์—์„œ ๋ณต์‚ฌํ•œ ๋„๋ฉ”์ธ ์ด๋ฆ„ ์„œ๋ฒ„๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด์ œ Google Cloud DNS๊ฐ€ ๋„๋ฉ”์ธ์˜ DNS ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

VM์— Certbot ์„ค์น˜

๋„๋ฉ”์ธ ์„œ๋ฒ„๋ฅผ ๊ด€๋ฆฌํ•˜๋„๋ก Cloud DNS๋ฅผ ์„ค์ •ํ–ˆ์œผ๋ฏ€๋กœ ์ด์ œ Cloud VM์—์„œ dns_google ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ Certbot ํด๋ผ์ด์–ธํŠธ๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด Let's Encrypt ์—”๋“œํฌ์ธํŠธ์—์„œ ๋„๋ฉ”์ธ์— ๋Œ€ํ•ด ์Šน์ธ๋œ ์ธ์ฆ์„œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. Google Cloud ์ฝ˜์†”์„ ์—ด๊ณ  1๋‹จ๊ณ„: Google Cloud ๊ณ„์ • ๋งŒ๋“ค๊ธฐ์—์„œ ๋งŒ๋“  ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.
  2. 2๋‹จ๊ณ„: Google Cloud ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ์—์„œ ๋งŒ๋“  ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. IAM ๋ฐ ๊ด€๋ฆฌ์ž > ์„œ๋น„์Šค ๊ณ„์ •์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    ์„œ๋น„์Šค ๊ณ„์ • ๋ณด๊ธฐ์— ํ”„๋กœ์ ํŠธ์˜ ์„œ๋น„์Šค ๊ณ„์ • ๋ชฉ๋ก์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  4. ์ƒˆ ์„œ๋น„์Šค ๊ณ„์ •์„ ๋งŒ๋“ค๋ ค๋ฉด ๋ทฐ ์ƒ๋‹จ์— ์žˆ๋Š” +์„œ๋น„์Šค ๊ณ„์ • ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    ์„œ๋น„์Šค ๊ณ„์ • ์„ธ๋ถ€์ •๋ณด ๋ณด๊ธฐ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  5. ์„œ๋น„์Šค ๊ณ„์ • ์ด๋ฆ„ ํ•„๋“œ์— ์„œ๋น„์Šค ๊ณ„์ • ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์„œ๋น„์Šค ๊ณ„์ • ์„ค๋ช… ํ•„๋“œ์— ์„ค๋ช…์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค๋ช…์€ ํŠน์ • ์„œ๋น„์Šค ๊ณ„์ •์˜ ์šฉ๋„๋ฅผ ์•Œ๋ฆฌ๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  6. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    Google Cloud๊ฐ€ ์ƒˆ๋กœ์šด ์„œ๋น„์Šค ๊ณ„์ •์„ ๋งŒ๋“ค๊ณ  ์„œ๋น„์Šค ๊ณ„์ • ๊ถŒํ•œ ๋ณด๊ธฐ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ณด๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ์„œ๋น„์Šค ๊ณ„์ •์— ์—ญํ• ์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

  7. ์—ญํ•  ์„ ํƒ ๋“œ๋กญ๋‹ค์šด ๋ชฉ๋ก์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  8. ํ”„๋กœ์ ํŠธ ์†Œ์œ ์ž ์—ญํ• ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  9. ๊ณ„์†์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  10. ์™„๋ฃŒ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  11. Google Cloud ์ฝ˜์†”์—์„œ Compute Engine > VM ์ธ์Šคํ„ด์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  12. certmanager๋ผ๋Š” VM ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  13. ๋ถ€ํŒ… ๋””์Šคํฌ ์„น์…˜์—์„œ SSD ์˜๊ตฌ ๋“œ๋ผ์ด๋ธŒ์— CentOS7 ๋ฐ 20GB๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  14. ์„œ๋น„์Šค ๊ณ„์ •์„ ์œ„์—์„œ ๋งŒ๋“  ๊ณ„์ •์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  15. ๋จธ์‹ ์— Certbot ๋ฐ dns_google ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๊ณ  Certbot ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
      sudo su -
      yum -y install yum-utils
      yum install certbot -y
      yum install certbot-dns-google -y
      certbot certonly --dns-google -d *.your_domain_name,*.your_domain_name --server https://acme-v02.api.letsencrypt.org/directory
      

    ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    sudo su -
    yum -y install yum-utils
    yum install certbot -y
    yum install certbot-dns-google -y
    certbot certonly --dns-google -d *.apigee-hybrid-docs.net,*.apigee-hybrid-docs.net --server https://acme-v02.api.letsencrypt.org/directory
  16. ์ด์ œ cd /etc/letsencrypt/live/your_domain_name/ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์Šน์ธ๋œ ์ธ์ฆ์„œ์™€ ๋น„๊ณต๊ฐœ ํ‚ค ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์˜ˆ:

    cd /etc/letsencrypt/live/apigee-hybrid-docs.net
    ls
      cert.pem  chain.pem  fullchain.pem  privkey.key  README
  17. fullchain.pem ํŒŒ์ผ๊ณผ privkey.key ํŒŒ์ผ์„ ๋กœ์ปฌ ๋จธ์‹ ์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  18. ์„ ํƒ์‚ฌํ•ญ: ์ธ์ฆ์„œ/ํ‚ค ์Œ์œผ๋กœ Kubernetes ๋ณด์•ˆ ๋น„๋ฐ€์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Istio ์ธ๊ทธ๋ ˆ์Šค์—์„œ TLS ๋ฐ mTLS ๊ตฌ์„ฑ์—์„œ ์˜ต์…˜ 2: Kubernetes ๋ณด์•ˆ ๋น„๋ฐ€์˜ ์•ˆ๋‚ด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
  19. ์ธ์ฆ์„œ์™€ ๋น„๊ณต๊ฐœ ํ‚ค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์žฌ์ •์˜ ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

    ์˜ˆ:

    ...
    envs:
      - name: test
        serviceAccountPaths:
          synchronizer: "your_keypath/synchronizer-manager-service-account.json
          udca: "your_keypath/analytic-agent-service-account.json
    
    virtualhosts:
      - name: my-env-group
        sslCertPath: "$HOME/hybrid/apigee-hybrid-setup/tls/fullchain.pem"
        sslKeyPath: "$HOME/hybrid/apigee-hybrid-setup/tls/privkey.key"

    ๋˜๋Š” Kubernetes ๋ณด์•ˆ ๋น„๋ฐ€์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    ...
    envs:
      - name: test
        serviceAccountPaths:
          synchronizer: "your_keypath/synchronizer-manager-service-account.json
          udca: "your_keypath/analytic-agent-service-account.json
    
    virtualhosts:
      - name: my-env-group
        tlsMode: SIMPLE  # Note: SIMPLE is the default, MUTUAL is also an available value.
        sslSecret: myorg-test-policy-secret"
    
    ...  
  20. envs ๊ตฌ์„ฑ์— ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

    ์—…๋ฐ์ดํŠธํ•  ๊ฐ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ helm ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    helm upgrade ENV_NAME apigee-env/ \
      --namespace apigee \
      --set env=ENV_NAME \
      --atomic \
    -f OVERRIDES_FILE.yaml
    
  21. ๊ตฌ์„ฑ ํ…Œ์ŠคํŠธ

    ํ”„๋ก์‹œ๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ API ํ”„๋ก์‹œ ๋นŒ๋“œ ๊ฐœ์š”๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.