SSL/TLS ์ธ์ฆ์„œ ๊ด€๋ฆฌ

์ด ํŽ˜์ด์ง€์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ ๋ฐ ์„œ๋ฒ„ ์ธ์ฆ ๊ธฐ๊ด€(CA) ์ธ์ฆ์„œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ ๊ด€๋ฆฌ

๋‹ค์Œ ์ ˆ์ฐจ์— ๋”ฐ๋ผ Cloud SQL์—์„œ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ ๊ฒ€์ƒ‰

์‚ฌ์šฉ์ž๋Š” ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ์˜ ๊ณต๊ฐœ ํ‚ค ๋ถ€๋ถ„์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋น„๊ณต๊ฐœ ํ‚ค๋Š” ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋น„๊ณต๊ฐœ ํ‚ค๋ฅผ ๋ถ„์‹คํ•  ๊ฒฝ์šฐ ์ƒˆ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ Cloud SQL ์ธ์Šคํ„ด์Šค ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    Cloud SQL ์ธ์Šคํ„ด์Šค๋กœ ์ด๋™

  2. ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์š” ํŽ˜์ด์ง€๋ฅผ ์—ด๋ ค๋ฉด ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. SQL ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ์—ฐ๊ฒฐ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ณด์•ˆ ํƒญ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  5. ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ ๊ด€๋ฆฌ์—์„œ ์ธ์ฆ์„œ ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  6. SSL ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ ํŽ˜์ด์ง€๊ฐ€ ์—ด๋ฆฌ๊ณ  ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ(client-cert.pem)๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์— ์ธ์ฆ์„œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ๋งํฌ๋„ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

gcloud

ssl client-certs describe ๋ช…๋ น์–ด๋กœ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ ๊ณต๊ฐœ ํ‚ค๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

gcloud sql ssl client-certs describe CERT_NAME \
--instance=INSTANCE_NAME \
--format="value(cert)" > client-cert.pem

REST v1

  1. ์ธ์Šคํ„ด์Šค์˜ ์ธ์ฆ์„œ๋ฅผ ๋‚˜์—ดํ•˜์—ฌ ๊ฒ€์ƒ‰ํ•˜๋ ค๋Š” ์ธ์ฆ์„œ์˜ ๋””์ง€ํ„ธ ์ง€๋ฌธ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • project-id: ํ”„๋กœ์ ํŠธ ID
    • instance-id: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    ๊ฒ€์ƒ‰ํ•˜๋ ค๋Š” ์ธ์ฆ์„œ์˜ sha1Fingerprint ํ•„๋“œ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ์˜ดํ‘œ๋ฅผ ํฌํ•จํ•˜์ง€ ๋งˆ์„ธ์š”.

  2. ์ธ์ฆ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • project-id: ํ”„๋กœ์ ํŠธ ID
    • instance-id: ์ธ์Šคํ„ด์Šค ID
    • sha1FingerPrint: ์ธ์ฆ์„œ์˜ sha1FingerPrint

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  3. ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ์ธ์ฆ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ํŒŒ์ผ(์˜ˆ: client-cert.pem)์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ์˜ดํ‘œ๋ฅผ ๋ณต์‚ฌํ•˜์ง€ ๋งˆ์„ธ์š”.

REST v1beta4

  1. ์ธ์Šคํ„ด์Šค์˜ ์ธ์ฆ์„œ๋ฅผ ๋‚˜์—ดํ•˜์—ฌ ๊ฒ€์ƒ‰ํ•˜๋ ค๋Š” ์ธ์ฆ์„œ์˜ ๋””์ง€ํ„ธ ์ง€๋ฌธ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • project-id: ํ”„๋กœ์ ํŠธ ID
    • instance-id: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    ๊ฒ€์ƒ‰ํ•˜๋ ค๋Š” ์ธ์ฆ์„œ์˜ sha1Fingerprint ํ•„๋“œ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ์˜ดํ‘œ๋ฅผ ํฌํ•จํ•˜์ง€ ๋งˆ์„ธ์š”.

  2. ์ธ์ฆ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • project-id: ํ”„๋กœ์ ํŠธ ID
    • instance-id: ์ธ์Šคํ„ด์Šค ID
    • sha1FingerPrint: ์ธ์ฆ์„œ์˜ sha1FingerPrint

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  3. ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ์ธ์ฆ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ํŒŒ์ผ(์˜ˆ: client-cert.pem)์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ์˜ดํ‘œ๋ฅผ ๋ณต์‚ฌํ•˜์ง€ ๋งˆ์„ธ์š”.

ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ ์‚ญ์ œ

ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๋ฅผ ์‚ญ์ œํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋ฏ€๋กœ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

Console

  1. Google Cloud ์ฝ˜์†”์—์„œ Cloud SQL ์ธ์Šคํ„ด์Šค ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    Cloud SQL ์ธ์Šคํ„ด์Šค๋กœ ์ด๋™

  2. ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์š” ํŽ˜์ด์ง€๋ฅผ ์—ด๋ ค๋ฉด ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. SQL ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ์—ฐ๊ฒฐ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ณด์•ˆ ํƒญ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  5. ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ ๊ด€๋ฆฌ์—์„œ ์‚ญ์ œํ•  ์ธ์ฆ์„œ๋ฅผ ์ฐพ์•„ ์‚ญ์ œ๋ฅผ ํƒญํ•ฉ๋‹ˆ๋‹ค. ์•„์ด์ฝ˜์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  6. ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ ์‚ญ์ œ ์ฐฝ์—์„œ ํ™•์ธ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

ssl client-certs delete ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

gcloud sql ssl client-certs delete CERT_NAME \
--instance=INSTANCE_NAME

REST v1

  1. ์ธ์Šคํ„ด์Šค์˜ ์ธ์ฆ์„œ๋ฅผ ๋‚˜์—ดํ•˜์—ฌ ์‚ญ์ œํ•˜๋ ค๋Š” ์ธ์ฆ์„œ์˜ ๋””์ง€ํ„ธ ์ง€๋ฌธ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • project-id: ํ”„๋กœ์ ํŠธ ID
    • instance-id: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    ์‚ญ์ œํ•˜๋ ค๋Š” ์ธ์ฆ์„œ์˜ sha1Fingerprint ํ•„๋“œ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ์˜ดํ‘œ๋ฅผ ํฌํ•จํ•˜์ง€ ๋งˆ์„ธ์š”.

  2. ์ธ์ฆ์„œ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • project-id: ํ”„๋กœ์ ํŠธ ID
    • instance-id: ์ธ์Šคํ„ด์Šค ID
    • sha1FingerPrint: ์ธ์ฆ์„œ์˜ sha1FingerPrint

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    DELETE https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

REST v1beta4

  1. ์ธ์Šคํ„ด์Šค์˜ ์ธ์ฆ์„œ๋ฅผ ๋‚˜์—ดํ•˜์—ฌ ์‚ญ์ œํ•˜๋ ค๋Š” ์ธ์ฆ์„œ์˜ ๋””์ง€ํ„ธ ์ง€๋ฌธ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • project-id: ํ”„๋กœ์ ํŠธ ID
    • instance-id: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    ์‚ญ์ œํ•˜๋ ค๋Š” ์ธ์ฆ์„œ์˜ sha1Fingerprint ํ•„๋“œ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ์˜ดํ‘œ๋ฅผ ํฌํ•จํ•˜์ง€ ๋งˆ์„ธ์š”.

  2. ์ธ์ฆ์„œ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • project-id: ํ”„๋กœ์ ํŠธ ID
    • instance-id: ์ธ์Šคํ„ด์Šค ID
    • sha1FingerPrint: ์ธ์ฆ์„œ์˜ sha1FingerPrint

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    DELETE https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„ CA ์ธ์ฆ์„œ ๊ด€๋ฆฌ(์ธ์Šคํ„ด์Šค๋ณ„ CA)

์ด ์„น์…˜์—์„œ๋Š” Cloud SQL์—์„œ ๋‚ด๋ถ€์ ์œผ๋กœ ์ƒ์„ฑ๋œ ์„œ๋ฒ„ CA ์ธ์ฆ์„œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ธ์ฆ์„œ๋Š” Cloud SQL์˜ ๊ธฐ๋ณธ ์„œ๋ฒ„ CA ๋ชจ๋“œ์ž…๋‹ˆ๋‹ค. ์ด ์ธ์ฆ ๊ธฐ๊ด€ ๊ณ„์ธต ๊ตฌ์กฐ์—์„œ Cloud SQL์€ ์ธ์Šคํ„ด์Šค๋งˆ๋‹ค ์„œ๋ฒ„ CA๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์„œ๋ฒ„ CA ์ธ์ฆ์„œ ์ˆœํ™˜

์ธ์ฆ์„œ ๋งŒ๋ฃŒ ์•Œ๋ฆผ์„ ๋ฐ›์•˜๊ฑฐ๋‚˜ ์ˆœํ™˜์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ˆœํ™˜์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ์ˆœํ™˜์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์ธ์Šคํ„ด์Šค์— ์ƒˆ ์„œ๋ฒ„ CA๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ์„œ๋ฒ„ CA๊ฐ€ ์ด๋ฏธ ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ ๋‹ค์Œ ์ ˆ์ฐจ์˜ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ฐ์–ด๋„ ๋ฉ๋‹ˆ๋‹ค.

  1. ์ƒˆ ์„œ๋ฒ„ CA๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  2. ์ƒˆ ์„œ๋ฒ„ CA ์ธ์ฆ์„œ ์ •๋ณด๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  3. ์ƒˆ ์„œ๋ฒ„ CA ์ธ์ฆ์„œ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํด๋ผ์ด์–ธํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  4. ์ˆœํ™˜์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ™œ์„ฑํ™”๋œ ์ธ์ฆ์„œ๊ฐ€ '์ด์ „' ์Šฌ๋กฏ์œผ๋กœ ์ด๋™ํ•˜๊ณ  ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ์ธ์ฆ์„œ๊ฐ€ ํ™œ์„ฑ ์ธ์ฆ์„œ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

์ฝ˜์†”

PEM ํŒŒ์ผ๋กœ ์ธ์ฝ”๋”ฉ๋œ ์ƒˆ ์„œ๋ฒ„ CA ์ธ์ฆ์„œ๋ฅผ ๋กœ์ปฌ ํ™˜๊ฒฝ์— ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

  1. Google Cloud ์ฝ˜์†”์—์„œ Cloud SQL ์ธ์Šคํ„ด์Šค ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    Cloud SQL ์ธ์Šคํ„ด์Šค๋กœ ์ด๋™

  2. ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์š” ํŽ˜์ด์ง€๋ฅผ ์—ด๋ ค๋ฉด ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. SQL ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ์—ฐ๊ฒฐ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ณด์•ˆ ํƒญ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  5. ์ธ์ฆ์„œ ๊ด€๋ฆฌ๋ฅผ ํด๋ฆญํ•˜์—ฌ ํŽผ์นฉ๋‹ˆ๋‹ค.
  6. CA ์ธ์ฆ์„œ ์ˆœํ™˜์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    ์ ๊ฒฉํ•œ ์ธ์ฆ์„œ๊ฐ€ ์—†์œผ๋ฉด ์ˆœํ™˜ ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ƒˆ ์„œ๋ฒ„ CA ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  7. ์ธ์ฆ์„œ ๋‹ค์šด๋กœ๋“œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์šด๋กœ๋“œ๋œ ํŒŒ์ผ์„ ํด๋ผ์ด์–ธํŠธ ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์— ๋ณต์‚ฌํ•˜์—ฌ ๊ธฐ์กด server-ca.pem ํŒŒ์ผ์„ ๋Œ€์ฒดํ•ด์„œ ์ƒˆ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ชจ๋“  ๊ธฐ์กด PostgreSQL ํด๋ผ์ด์–ธํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•œ ํ›„ ์ˆœํ™˜์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ณด์•ˆ ํƒญ์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.
  2. ์ธ์ฆ์„œ ๊ด€๋ฆฌ๋ฅผ ํด๋ฆญํ•˜์—ฌ ํŽผ์นฉ๋‹ˆ๋‹ค.
  3. CA ์ธ์ฆ์„œ ์ˆœํ™˜์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์—ฐ๊ฒฐ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  5. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ƒˆ๋กœ ์ˆœํ™˜๋œ ์ธ์ฆ์„œ๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฉด CA ์ธ์ฆ์„œ ๋กค๋ฐฑ์„ ์„ ํƒํ•˜์—ฌ ์ด์ „ ๊ตฌ์„ฑ์œผ๋กœ ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud

  1. ์„œ๋ฒ„ CA ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    gcloud sql ssl server-ca-certs create \
    --instance=INSTANCE
  2. ์ธ์ฆ์„œ ์ •๋ณด๋ฅผ ๋กœ์ปฌ PEM ํŒŒ์ผ๋กœ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
    gcloud sql ssl server-ca-certs list \
    --format="value(cert)" \
    --instance=INSTANCE_NAME > \
    FILE_PATH/FILE_NAME.pem
  3. ๋‹ค์šด๋กœ๋“œ๋œ ํŒŒ์ผ์„ ํด๋ผ์ด์–ธํŠธ ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์— ๋ณต์‚ฌํ•˜๊ณ  ๊ธฐ์กด server-ca.pem ํŒŒ์ผ์„ ๋Œ€์ฒดํ•˜์—ฌ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์—์„œ ์ƒˆ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  4. ํด๋ผ์ด์–ธํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•œ ํ›„ ์ˆœํ™˜์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
    gcloud sql ssl server-ca-certs rotate \
    --instance=INSTANCE_NAME
          
  5. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์—ฐ๊ฒฐ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  6. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ƒˆ๋กœ ์ˆœํ™˜๋œ ์ธ์ฆ์„œ๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ด์ „ ๊ตฌ์„ฑ์œผ๋กœ ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

REST v1

  1. ์„œ๋ฒ„ CA ์ธ์ฆ์„œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • project-id: ํ”„๋กœ์ ํŠธ ID
    • instance-id: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/listServerCas

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  2. ์ˆœํ™˜์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • project-id: ํ”„๋กœ์ ํŠธ ID
    • instance-id: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/rotateServerCa

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

REST v1beta4

  1. ์„œ๋ฒ„ CA ์ธ์ฆ์„œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • project-id: ํ”„๋กœ์ ํŠธ ID
    • instance-id: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/listServerCas

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  2. ์ˆœํ™˜์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • project-id: ํ”„๋กœ์ ํŠธ ID
    • instance-id: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/rotateServerCa

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

No upcoming/previous Server CA Certificate exists๋ผ๊ณ  ํ‘œ์‹œ๋œ ์ธ์ฆ์„œ๋ฅผ ์ˆœํ™˜ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ธ์Šคํ„ด์Šค๋ณ„ CA ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ธ์Šคํ„ด์Šค์—์„œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. gcloud sql instances describe ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Cloud SQL ์ธ์Šคํ„ด์Šค์— ๊ตฌ์„ฑ๋œ CA ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ธ์Šคํ„ด์Šค ์ •๋ณด ๋ณด๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ธ์ฆ์„œ ์ˆœํ™˜ ์ž‘์—… ๋กค๋ฐฑ

์ธ์ฆ์„œ ์ˆœํ™˜์„ ์™„๋ฃŒํ•˜๊ณ  ๋‚˜๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ชจ๋‘ ์ƒˆ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Cloud SQL ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ƒˆ ์ธ์ฆ์„œ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์œผ๋ฉด SSL/TLS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” ์ด์ „ ์ธ์ฆ์„œ ๊ตฌ์„ฑ์œผ๋กœ ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋กค๋ฐฑ ์ž‘์—…์€ ํ™œ์„ฑํ™”๋œ ์ธ์ฆ์„œ๋ฅผ '์˜ˆ์ •' ์Šฌ๋กฏ์œผ๋กœ ์˜ฎ๊น๋‹ˆ๋‹ค(๋ชจ๋“  '์˜ˆ์ •' ์ธ์ฆ์„œ๊ฐ€ ๋Œ€์ฒด๋จ). '์ด์ „' ์ธ์ฆ์„œ๊ฐ€ ํ™œ์„ฑ ์ธ์ฆ์„œ๊ฐ€ ๋˜๊ณ , ์ธ์ฆ์„œ ๊ตฌ์„ฑ์ด ์ˆœํ™˜์ด ์™„๋ฃŒ๋˜๊ธฐ ์ด์ „์˜ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

์ด์ „ ์ธ์ฆ์„œ ๊ตฌ์„ฑ์œผ๋กœ ๋กค๋ฐฑํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ Cloud SQL ์ธ์Šคํ„ด์Šค ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    Cloud SQL ์ธ์Šคํ„ด์Šค๋กœ ์ด๋™

  2. ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์š” ํŽ˜์ด์ง€๋ฅผ ์—ด๋ ค๋ฉด ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. SQL ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ์—ฐ๊ฒฐ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ณด์•ˆ ํƒญ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  5. ์ธ์ฆ์„œ ๊ด€๋ฆฌ๋ฅผ ํด๋ฆญํ•˜์—ฌ ํŽผ์นฉ๋‹ˆ๋‹ค.
  6. CA ์ธ์ฆ์„œ ๋กค๋ฐฑ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    ์ ๊ฒฉํ•œ ์ธ์ฆ์„œ๊ฐ€ ์—†์œผ๋ฉด ๋กค๋ฐฑ ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋กค๋ฐฑ ์ž‘์—…์€ ๋ช‡ ์ดˆ ํ›„์— ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

gcloud

gcloud sql ssl server-ca-certs rollback \
--instance=INSTANCE_NAME
   

REST v1

  1. ์„œ๋ฒ„ CA ์ธ์ฆ์„œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • project-id: ํ”„๋กœ์ ํŠธ ID
    • instance-id: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/listServerCas

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  2. ๋กค๋ฐฑํ•˜๋ ค๋Š” ๋ฒ„์ „์˜ sha1Fingerprint ํ•„๋“œ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    activeVersion์œผ๋กœ ํ‘œ์‹œ๋˜๋Š” sha1Fingerprint ๊ฐ’์„ ํฌํ•จํ•œ ๋ฒ„์ „์˜ ๋ฐ”๋กœ ์ด์ „ ๋ฒ„์ „(createTime ๊ฐ’ ํฌํ•จ)์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

  3. ์ˆœํ™˜์„ ๋กค๋ฐฑํ•ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • project-id: ํ”„๋กœ์ ํŠธ ID
    • instance-id: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/rotateServerCa

    JSON ์š”์ฒญ ๋ณธ๋ฌธ:

    {
      "rotateServerCaContext": {"nextVersion": "sha1Fingerprint"}
    }
    

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

REST v1beta4

  1. ์„œ๋ฒ„ CA ์ธ์ฆ์„œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • project-id: ํ”„๋กœ์ ํŠธ ID
    • instance-id: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/listServerCas

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  2. ๋กค๋ฐฑํ•˜๋ ค๋Š” ๋ฒ„์ „์˜ sha1Fingerprint ํ•„๋“œ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    activeVersion์œผ๋กœ ํ‘œ์‹œ๋˜๋Š” sha1Fingerprint ๊ฐ’์„ ํฌํ•จํ•œ ๋ฒ„์ „์˜ ๋ฐ”๋กœ ์ด์ „ ๋ฒ„์ „(createTime ๊ฐ’ ํฌํ•จ)์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

  3. ์ˆœํ™˜์„ ๋กค๋ฐฑํ•ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • project-id: ํ”„๋กœ์ ํŠธ ID
    • instance-id: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/rotateServerCa

    JSON ์š”์ฒญ ๋ณธ๋ฌธ:

    {
      "rotateServerCaContext": {"nextVersion": "sha1Fingerprint"}
    }
    

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

No upcoming/previous Server CA Certificate exists๋ผ๊ณ  ํ‘œ์‹œ๋œ ์ธ์ฆ์„œ CA ์ˆœํ™˜์„ ๋กค๋ฐฑํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ธ์Šคํ„ด์Šค๋ณ„ CA ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ธ์Šคํ„ด์Šค์—์„œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. gcloud sql instances describe ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Cloud SQL ์ธ์Šคํ„ด์Šค์— ๊ตฌ์„ฑ๋œ CA ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ธ์Šคํ„ด์Šค ์ •๋ณด ๋ณด๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์ˆœํ™˜ ์‹œ์ž‘

Cloud SQL์˜ ์ด๋ฉ”์ผ์„ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์ˆœํ™˜์„ ์‹œ์ž‘ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์–ธ์ œ๋“ ์ง€ ์ˆœํ™˜์„ ์‹œ์ž‘ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค. ์ˆœํ™˜์„ ์‹œ์ž‘ํ•˜๋ฉด ์ƒˆ ์ธ์ฆ์„œ๊ฐ€ ์ƒ์„ฑ๋˜์–ด '์˜ˆ์ •' ์Šฌ๋กฏ์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. ์š”์ฒญ ์‹œ์ ์— ์ธ์ฆ์„œ๊ฐ€ '์˜ˆ์ •' ์Šฌ๋กฏ์— ์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์ธ์ฆ์„œ๋Š” ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ •๋œ ์ธ์ฆ์„œ๋Š” 1๊ฐœ๋งŒ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ˆœํ™˜์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ Cloud SQL ์ธ์Šคํ„ด์Šค ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    Cloud SQL ์ธ์Šคํ„ด์Šค๋กœ ์ด๋™

  2. ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์š” ํŽ˜์ด์ง€๋ฅผ ์—ด๋ ค๋ฉด ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. SQL ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ์—ฐ๊ฒฐ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ณด์•ˆ ํƒญ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  5. ์ธ์ฆ์„œ ๊ด€๋ฆฌ๋ฅผ ํด๋ฆญํ•˜์—ฌ ํŽผ์นฉ๋‹ˆ๋‹ค.
  6. ์ƒˆ CA ์ธ์ฆ์„œ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  7. CA ์ธ์ฆ์„œ ์ˆœํ™˜์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    ์ ๊ฒฉํ•œ ์ธ์ฆ์„œ๊ฐ€ ์—†์œผ๋ฉด ์ˆœํ™˜ ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  8. ์„œ๋ฒ„ CA ์ธ์ฆ์„œ ์ˆœํ™˜์— ์„ค๋ช…๋œ ๋Œ€๋กœ ์ˆœํ™˜์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

gcloud

  1. ์ˆœํ™˜์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
    gcloud sql ssl server-ca-certs create \
    --instance=INSTANCE_NAME
         
  2. ์„œ๋ฒ„ CA ์ธ์ฆ์„œ ์ˆœํ™˜์— ์„ค๋ช…๋œ ๋Œ€๋กœ ์ˆœํ™˜์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

REST v1

  1. ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • project-id: ํ”„๋กœ์ ํŠธ ID
    • instance-id: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/rotateServerCa

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  2. ์„œ๋ฒ„ CA ์ธ์ฆ์„œ ์ˆœํ™˜์— ์„ค๋ช…๋œ ๋Œ€๋กœ ์ˆœํ™˜์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

REST v1beta4

  1. ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • project-id: ํ”„๋กœ์ ํŠธ ID
    • instance-id: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/rotateServerCa

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  2. ์„œ๋ฒ„ CA ์ธ์ฆ์„œ ์ˆœํ™˜์— ์„ค๋ช…๋œ ๋Œ€๋กœ ์ˆœํ™˜์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„ CA ์ธ์ฆ์„œ์— ๋Œ€ํ•œ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ

์„œ๋ฒ„ CA ์ธ์ฆ์„œ๊ฐ€ ๋งŒ๋ฃŒ๋˜๋Š” ์‹œ๊ธฐ, ์„œ๋ฒ„ ์ธ์ฆ์„œ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์•”ํ˜ธํ™” ์ˆ˜์ค€๊ณผ ๊ฐ™์€ ์„œ๋ฒ„ ์ธ์ฆ์„œ ๊ด€๋ จ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ Cloud SQL ์ธ์Šคํ„ด์Šค ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    Cloud SQL ์ธ์Šคํ„ด์Šค๋กœ ์ด๋™

  2. ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์š” ํŽ˜์ด์ง€๋ฅผ ์—ด๋ ค๋ฉด ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. SQL ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ์—ฐ๊ฒฐ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ณด์•ˆ ํƒญ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    ์„œ๋ฒ„ CA ์ธ์ฆ์„œ ๊ด€๋ฆฌ์˜ ํ‘œ์—์„œ ์„œ๋ฒ„ CA ์ธ์ฆ์„œ์˜ ๋งŒ๋ฃŒ์ผ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ธ์ฆ์„œ ์œ ํ˜•์„ ํ™•์ธํ•˜๋ ค๋ฉด gcloud sql ssl server-ca-certs list --instance=INSTANCE_NAME ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

gcloud

gcloud sql ssl server-ca-certs list \
--instance=INSTANCE_NAME

REST v1

์ธ์Šคํ„ด์Šค๋ฅผ ์„ค๋ช…ํ•  ๋•Œ ์„œ๋ฒ„ CA ์ธ์ฆ์„œ์— ๋Œ€ํ•œ ์„ธ๋ถ€์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • project-id: ํ”„๋กœ์ ํŠธ ID
  • instance-id: ์ธ์Šคํ„ด์Šค ID

HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id?fields=serverCaCert

์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

REST v1beta4

์ธ์Šคํ„ด์Šค๋ฅผ ์„ค๋ช…ํ•  ๋•Œ ์„œ๋ฒ„ CA ์ธ์ฆ์„œ์— ๋Œ€ํ•œ ์„ธ๋ถ€์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • project-id: ํ”„๋กœ์ ํŠธ ID
  • instance-id: ์ธ์Šคํ„ด์Šค ID

HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=serverCaCert

์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

CA ์ธ์ฆ์„œ ์ฝ˜ํ…์ธ  ๋ณด๊ธฐ

openssl storeutl์„ ์‚ฌ์šฉํ•˜์—ฌ CA ์ธ์ฆ์„œ ์ฝ˜ํ…์ธ ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

sql ssl server-ca-certs list ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ด์ „ ์ˆœํ™˜ ๊ด€๋ จ ์ž‘์—…์—์„œ CA ์ธ์ฆ์„œ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋ฐ˜ํ™˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud

  1. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    gcloud sql ssl server-ca-certs list \
      --instance=INSTANCE_NAME \
      --format='value(cert)' > temp_cert.pem

    INSTANCE_NAME์„ ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  2. openssl์„ ์‚ฌ์šฉํ•˜์—ฌ CA ์ธ์ฆ์„œ ์ฝ˜ํ…์ธ ๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  3. openssl storeutl -noout -text temp_cert.pem
       

์„œ๋ฒ„ ์ธ์ฆ์„œ ์ฝ˜ํ…์ธ  ๋ณด๊ธฐ

openssl s_client๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ์ธ์ฆ์„œ ์ฝ˜ํ…์ธ ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud

์„œ๋ฒ„ ์ธ์ฆ์„œ ์ฝ˜ํ…์ธ ๋ฅผ ๋ณด๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

openssl s_client -starttls postgres -connect INSTANCE_IP_ADDRESS:5432

INSTANCE_IP_ADDRESS๋ฅผ ์ธ์Šคํ„ด์Šค IP ์ฃผ์†Œ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

์™ธ๋ถ€ ์„œ๋ฒ„ SSL ๋งŒ๋ฃŒ ์•Œ๋ฆผ

  • ์™ธ๋ถ€ ์„œ๋ฒ„์˜ ์„œ๋ฒ„ CA ์ธ์ฆ์„œ๊ฐ€ ๋งŒ๋ฃŒ๋˜๋ฉด ์˜จํ”„๋ ˆ๋ฏธ์Šค ์ธ์Šคํ„ด์Šค์˜ ์„œ๋ฒ„ CA ์ธ์ฆ์„œ๋ฅผ ํฌํ•จํ•˜์—ฌ SSL ์ธ์ฆ์„œ๋ฅผ ์ˆœํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„๋Š” ์˜จํ”„๋ ˆ๋ฏธ์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ด€๋ฆฌ๋˜๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด RDS ์„œ๋ฒ„ CA ์ธ์ฆ์„œ, Cloud SQL ์„œ๋ฒ„ CA ์ธ์ฆ์„œ ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ผ๋ฐ˜ ์„œ๋ฒ„ CA ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹จ๊ณ„๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๊ฐ€ ๋งŒ๋ฃŒ๋˜๋ฉด ์ƒˆ ์ธ์ฆ์„œ์™€ ํ‚ค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Google Cloud๊ด€๋ฆฌํ˜• SSL ์ธ์ฆ์„œ์™€ ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ ๋ชจ๋‘์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ SSL ์ธ์ฆ์„œ๋กœ Cloud SQL ์†Œ์Šค ํ‘œํ˜„ ์ธ์Šคํ„ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์ธ์ฆ์„œ ๊ด€๋ฆฌ(๊ณต์œ  CA)

์ด ์„น์…˜์—์„œ๋Š” ๊ณต์œ  CA ๋˜๋Š” ๊ณ ๊ฐ ๊ด€๋ฆฌ CA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ธ์Šคํ„ด์Šค์—์„œ ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ serverCaMode ์„ค์ •(Cloud SQL Admin API)์— GOOGLE_MANAGED_CAS_CA๋ฅผ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ --server-ca-mode ํ”Œ๋ž˜๊ทธ(gcloud CLI)๋ฅผ ์ง€์ •ํ•˜์—ฌ ๊ณต์œ  CA๋ฅผ ์ธ์Šคํ„ด์Šค์˜ ์„œ๋ฒ„ CA ๋ชจ๋“œ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณ ๊ฐ ๊ด€๋ฆฌ CA๋ฅผ ์ธ์Šคํ„ด์Šค์˜ ์„œ๋ฒ„ CA ๋ชจ๋“œ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ serverCaMode ์„ค์ •(Cloud SQL Admin API)์— CUSTOMER_MANAGED_CAS_CA๋ฅผ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ --server-ca-mode ํ”Œ๋ž˜๊ทธ(gcloud CLI)๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•˜๋ฉฐ ์œ ํšจํ•œ CA ํ’€๊ณผ CA๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ณ ๊ฐ ๊ด€๋ฆฌ CA ์‚ฌ์šฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์„œ๋ฒ„ ์ธ์ฆ์„œ ์ˆœํ™˜

์„œ๋ฒ„ ์ธ์ฆ์„œ ๋งŒ๋ฃŒ ์•Œ๋ฆผ์„ ๋ฐ›์•˜๊ฑฐ๋‚˜ ์ˆœํ™˜์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ˆœํ™˜์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ์ˆœํ™˜์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์˜ˆ์ •๋œ ์ˆœํ™˜์„ ์œ„ํ•ด ์ƒˆ ์„œ๋ฒ„ ์ธ์ฆ์„œ๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ •๋œ ์ˆœํ™˜์„ ์œ„ํ•ด ์ด๋ฏธ ์ƒˆ ์„œ๋ฒ„ ์ธ์ฆ์„œ๊ฐ€ ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ ๋‹ค์Œ ์ ˆ์ฐจ์˜ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ฐ์–ด๋„ ๋ฉ๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค์—์„œ ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ์ˆœํ™˜ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ƒˆ ์„œ๋ฒ„ ์ธ์ฆ์„œ๊ฐ€ ํ•„์š”ํ•˜๋ฉด ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  2. ํด๋ผ์ด์–ธํŠธ์—์„œ ์ด๋ฏธ ๋ฃจํŠธ CA๋ฅผ ์‹ ๋ขฐํ•˜๋Š” ๊ฒฝ์šฐ ์ด ๋‹จ๊ณ„๋Š” ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์„œ๋ฒ„ CA ์ •๋ณด๋กœ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    1. ์ตœ์‹  ์„œ๋ฒ„ CA ์ •๋ณด๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
    2. ํด๋ผ์ด์–ธํŠธ์—์„œ ์ตœ์‹  ์„œ๋ฒ„ CA ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  3. ํ™œ์„ฑ ์ธ์ฆ์„œ๋ฅผ ์ด์ „ ์Šฌ๋กฏ์œผ๋กœ ์ด๋™ํ•˜๊ณ  ์ƒˆ ์ธ์ฆ์„œ๊ฐ€ ํ™œ์„ฑ ์ธ์ฆ์„œ๊ฐ€ ๋˜๋„๋ก ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ˆœํ™˜์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

์ฝ˜์†”

PEM ํŒŒ์ผ๋กœ ์ธ์ฝ”๋”ฉ๋œ ์„œ๋ฒ„ CA ์ธ์ฆ์„œ ์ •๋ณด๋ฅผ ๋กœ์ปฌ ํ™˜๊ฒฝ์— ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

  1. Google Cloud ์ฝ˜์†”์—์„œ Cloud SQL ์ธ์Šคํ„ด์Šค ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    Cloud SQL ์ธ์Šคํ„ด์Šค๋กœ ์ด๋™

  2. ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์š” ํŽ˜์ด์ง€๋ฅผ ์—ด๋ ค๋ฉด ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. SQL ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ์—ฐ๊ฒฐ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ณด์•ˆ ํƒญ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  5. ์ธ์ฆ์„œ ๊ด€๋ฆฌ๋ฅผ ํด๋ฆญํ•˜์—ฌ ํŽผ์นฉ๋‹ˆ๋‹ค.
  6. ์„œ๋ฒ„ ์ธ์ฆ์„œ ์ˆœํ™˜ ์˜ต์…˜์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜์œผ๋กœ ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•„์ง ์„ ํƒํ•˜์ง€ ๋งˆ์„ธ์š”.

    ์ ๊ฒฉํ•œ ์ธ์ฆ์„œ๊ฐ€ ์—†์œผ๋ฉด ์ˆœํ™˜ ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ƒˆ ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  7. ์ธ์ฆ์„œ ๋‹ค์šด๋กœ๋“œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์šด๋กœ๋“œ๋œ ํŒŒ์ผ์„ ํด๋ผ์ด์–ธํŠธ ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์— ๋ณต์‚ฌํ•˜์—ฌ ๊ธฐ์กด server-ca.pem ํŒŒ์ผ์„ ๋Œ€์ฒดํ•ด์„œ ์ƒˆ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ชจ๋“  ๊ธฐ์กด PostgreSQL ํด๋ผ์ด์–ธํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•œ ํ›„ ์ˆœํ™˜์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ณด์•ˆ ํƒญ์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.
  2. ์ธ์ฆ์„œ ๊ด€๋ฆฌ๋ฅผ ํด๋ฆญํ•˜์—ฌ ํŽผ์นฉ๋‹ˆ๋‹ค.
  3. ์ธ์ฆ์„œ ์ˆœํ™˜์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. ์ธ์ฆ์„œ ์ˆœํ™˜ ํ™•์ธ ๋Œ€ํ™”์ƒ์ž์—์„œ ์ˆœํ™˜์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  5. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์—ฐ๊ฒฐ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ƒˆ๋กœ ์ˆœํ™˜๋œ ์ธ์ฆ์„œ๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฉด ์ธ์ฆ์„œ ๋กค๋ฐฑ์„ ์„ ํƒํ•˜์—ฌ ์ด์ „ ๊ตฌ์„ฑ์œผ๋กœ ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud

  1. ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    gcloud sql ssl server-certs create \
    --instance=INSTANCE
  2. INSTANCE์„ ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
  3. ์ตœ์‹  CA ๋ฒˆ๋“ค์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ตœ์‹  CA ๋ฒˆ๋“ค์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ธ์Šคํ„ด์Šค์˜ ์ตœ์‹  ์„œ๋ฒ„ CA ์ •๋ณด๋ฅผ ๋กœ์ปฌ PEM ํŒŒ์ผ์— ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
    gcloud sql ssl server-certs list \
    --format="value(ca_cert.cert)" \
    --instance=INSTANCE_NAME > \
    FILE_PATH/server-ca.pem

    ๋˜๋Š” ์ด ํŽ˜์ด์ง€์˜ ๋ฃจํŠธ ๋ฐ ๋ฆฌ์ „ CA ์ธ์ฆ์„œ ๋ฒˆ๋“ค ํ‘œ์—์„œ CA ๋ฒˆ๋“ค์„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

    ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์šด๋กœ๋“œํ•œ ํŒŒ์ผ์„ ํด๋ผ์ด์–ธํŠธ ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์— ๋ณต์‚ฌํ•˜๊ณ  ๊ธฐ์กด server-ca.pem ํŒŒ์ผ์„ ๋Œ€์ฒดํ•˜์—ฌ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์—์„œ ์ƒˆ ์„œ๋ฒ„ CA ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

  4. ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•œ ํ›„(ํด๋ผ์ด์–ธํŠธ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ) ์ˆœํ™˜์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
    gcloud sql ssl server-certs rotate \
    --instance=INSTANCE_NAME
          
  5. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์—ฐ๊ฒฐ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ƒˆ๋กœ ์ˆœํ™˜๋œ ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฉด ์ด์ „ ๊ตฌ์„ฑ์œผ๋กœ ๋กค๋ฐฑํ•ฉ๋‹ˆ๋‹ค.

REST v1

  1. ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID
    • INSTANCE_ID: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/addServerCertificate

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  2. ์„œ๋ฒ„ CA ์ธ์ฆ์„œ ์ •๋ณด๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID
    • INSTANCE_ID: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/listServerCertificates

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  3. ์ˆœํ™˜์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID
    • INSTANCE_ID: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/rotateServerCertificate

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

REST v1beta4

  1. ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID
    • INSTANCE_ID: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/addServerCertificate

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  2. ์„œ๋ฒ„ CA ์ธ์ฆ์„œ ์ •๋ณด๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID
    • INSTANCE_ID: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/listServerCertificates

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  3. ์ˆœํ™˜์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID
    • INSTANCE_ID: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/rotateServerCertificate

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ธ์ฆ์„œ ์ˆœํ™˜ ๋กค๋ฐฑ

์„œ๋ฒ„ ์ธ์ฆ์„œ ์ˆœํ™˜์„ ์™„๋ฃŒํ•œ ํ›„์—๋Š” ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์—์„œ ์ƒˆ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Cloud SQL ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ƒˆ ์ธ์ฆ์„œ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์œผ๋ฉด SSL/TLS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” ์ด์ „ ์ธ์ฆ์„œ ๊ตฌ์„ฑ์œผ๋กœ ๋กค๋ฐฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋กค๋ฐฑ ์ž‘์—…์€ ํ™œ์„ฑ ์ธ์ฆ์„œ๋ฅผ '์˜ˆ์ •' ์Šฌ๋กฏ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ํ™œ์„ฑ ์ธ์ฆ์„œ๋Š” ๋ชจ๋“  '์˜ˆ์ •' ์ธ์ฆ์„œ๋ฅผ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. '์ด์ „' ์ธ์ฆ์„œ๊ฐ€ ํ™œ์„ฑ ์ธ์ฆ์„œ๊ฐ€ ๋˜๊ณ  ์ธ์ฆ์„œ ๊ตฌ์„ฑ์ด ์ˆœํ™˜์ด ์™„๋ฃŒ๋˜๊ธฐ ์ด์ „ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ Cloud SQL ์ธ์Šคํ„ด์Šค ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    Cloud SQL ์ธ์Šคํ„ด์Šค๋กœ ์ด๋™

  2. ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์š” ํŽ˜์ด์ง€๋ฅผ ์—ด๋ ค๋ฉด ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. SQL ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ์—ฐ๊ฒฐ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ณด์•ˆ ํƒญ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  5. ์ธ์ฆ์„œ ๊ด€๋ฆฌ๋ฅผ ํด๋ฆญํ•˜์—ฌ ํŽผ์นฉ๋‹ˆ๋‹ค.
  6. ์„œ๋ฒ„ ์ธ์ฆ์„œ ๋กค๋ฐฑ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    ์ ๊ฒฉํ•œ ์ธ์ฆ์„œ๊ฐ€ ์—†์œผ๋ฉด ๋กค๋ฐฑ ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  7. ์ธ์ฆ์„œ ๋กค๋ฐฑ ํ™•์ธ ๋Œ€ํ™”์ƒ์ž์—์„œ ๋กค๋ฐฑ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    ๋กค๋ฐฑ์„ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ๋ช‡ ์ดˆ ์ •๋„ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud

gcloud sql ssl server-certs rollback \
--instance=INSTANCE_NAME
   

REST v1

  1. ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID
    • INSTANCE_ID: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/listServerCertificates

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  2. ๋กค๋ฐฑํ•˜๋ ค๋Š” ๋ฒ„์ „์˜ sha1Fingerprint ํ•„๋“œ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    activeVersion์œผ๋กœ ํ‘œ์‹œ๋˜๋Š” sha1Fingerprint ๊ฐ’์ด ํฌํ•จ๋œ ๋ฒ„์ „์˜ ๋ฐ”๋กœ ์ด์ „ ๋ฒ„์ „(createTime ๊ฐ’ ํฌํ•จ)์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

  3. ์ˆœํ™˜์„ ๋กค๋ฐฑํ•ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID
    • INSTANCE_ID: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/rotateServerCertificate

    JSON ์š”์ฒญ ๋ณธ๋ฌธ:

    {
      "rotateServerCertificateContext": {"nextVersion": "sha1Fingerprint"}
    }
    

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

REST v1beta4

  1. ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID
    • INSTANCE_ID: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/listServerCertificates

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  2. ๋กค๋ฐฑํ•˜๋ ค๋Š” ๋ฒ„์ „์˜ sha1Fingerprint ํ•„๋“œ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    activeVersion์œผ๋กœ ํ‘œ์‹œ๋˜๋Š” sha1Fingerprint ๊ฐ’์ด ํฌํ•จ๋œ ๋ฒ„์ „์˜ ๋ฐ”๋กœ ์ด์ „ ๋ฒ„์ „(createTime ๊ฐ’ ํฌํ•จ)์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

  3. ์ˆœํ™˜์„ ๋กค๋ฐฑํ•ฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID
    • INSTANCE_ID: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/rotateServerCertificate

    JSON ์š”์ฒญ ๋ณธ๋ฌธ:

    {
      "rotateServerCertificateContext": {"nextVersion": "sha1Fingerprint"}
    }
    

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

CA ์ธ์ฆ์„œ ์ฝ˜ํ…์ธ  ๋ณด๊ธฐ

openssl storeutl ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CA ์ธ์ฆ์„œ ์ฝ˜ํ…์ธ ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

sql ssl server-certs list ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์‹ ๋ขฐ ์ฒด์ธ์œผ๋กœ ์ธํ•ด ํ•ญ์ƒ CA ์ธ์ฆ์„œ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ด์ „ ์ˆœํ™˜ ๊ด€๋ จ ์ž‘์—…์—์„œ CA ์ธ์ฆ์„œ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋ฐ˜ํ™˜๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud

  1. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    gcloud sql ssl server-certs list \
      --instance=INSTANCE_NAME \
      --format='value(cert)' > temp_cert.pem

    INSTANCE_NAME์„ ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  2. openssl์„ ์‚ฌ์šฉํ•˜์—ฌ CA ์ธ์ฆ์„œ ์ฝ˜ํ…์ธ ๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  3. openssl storeutl -noout -text temp_cert.pem
       

์„œ๋ฒ„ ์ธ์ฆ์„œ ์ฝ˜ํ…์ธ  ๋ณด๊ธฐ

openssl ์œ ํ‹ธ๋ฆฌํ‹ฐ์™€ sql ssl server-certs list ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ์ธ์ฆ์„œ ์ฝ˜ํ…์ธ ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud CLI ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์‹ ๋ขฐ ์ฒด์ธ์œผ๋กœ ์ธํ•ด ํ•ญ์ƒ CA ์ธ์ฆ์„œ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ด์ „ ์ˆœํ™˜ ๊ด€๋ จ ์ž‘์—…์—์„œ CA ์ธ์ฆ์„œ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋ฐ˜ํ™˜๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud

openssl s_client๋งŒ ์‚ฌ์šฉ:

openssl s_client -starttls postgres -connect INSTANCE_IP_ADDRESS:5432

INSTANCE_IP_ADDRESS๋ฅผ ์ธ์Šคํ„ด์Šค IP ์ฃผ์†Œ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

gcloud CLI ๋ฐ openssl storeutl ์‚ฌ์šฉ:

  1. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    gcloud sql ssl server-certs list \
      --instance=INSTANCE_NAME \
      --format='value(ssl_cert.cert)' > temp_cert.pem

    INSTANCE_NAME์„ ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  2. openssl์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ์ธ์ฆ์„œ ์ฝ˜ํ…์ธ ๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  3. openssl storeutl -noout -text temp_cert.pem
       

๊ณต์œ  CA์˜ ๋ฃจํŠธ ๋ฐ ๋ฆฌ์ „ CA ์ธ์ฆ์„œ ๋ฒˆ๋“ค ๋‹ค์šด๋กœ๋“œ

Google ๊ด€๋ฆฌ ๊ณต์œ  CA ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ํ‘œ์—์„œ ๋ฃจํŠธ ๋ฐ ๋ฆฌ์ „ CA ์ธ์ฆ์„œ ๋ฒˆ๋“ค์„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค๋ณ„ ๋˜๋Š” ๊ณ ๊ฐ ๊ด€๋ฆฌ CA ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ์ธ์Šคํ„ด์Šค์—๋Š” ์ด๋Ÿฌํ•œ ์ธ์ฆ์„œ ๋ฒˆ๋“ค์ด ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฆฌ์ „ ์ด๋ฆ„ ์œ„์น˜ ์ธ์ฆ์„œ ๋ฒˆ๋“ค
๊ธ€๋กœ๋ฒŒ
๋ชจ๋“  ๋ฆฌ์ „์˜ CA ๋ชจ๋“  ์œ„์น˜ global.pem
์•„์‹œ์•„
asia-east1 ํƒ€์ด์™„ asia-east1.pem
asia-east2 ํ™์ฝฉ asia-east2.pem
asia-northeast1 ๋„์ฟ„ asia-northeast1.pem
asia-northeast2 ์˜ค์‚ฌ์นด asia-northeast2.pem
asia-northeast3 ์„œ์šธ asia-northeast3.pem
asia-south1 ๋ญ„๋ฐ”์ด asia-south1.pem
asia-south2 ๋ธ๋ฆฌ asia-south2.pem
asia-southeast1 ์‹ฑ๊ฐ€ํฌ๋ฅด asia-southeast1.pem
asia-southeast2 ์ž์นด๋ฅดํƒ€ asia-southeast2.pem
์•„ํ”„๋ฆฌ์นด
africa-south1 ์š”ํ•˜๋„ค์Šค๋ฒ„๊ทธ africa-south1.pem
์˜ค์ŠคํŠธ๋ ˆ์ผ๋ฆฌ์•„
australia-southeast1 ์‹œ๋“œ๋‹ˆ australia-southeast1.pem
australia-southeast2 ๋ฉœ๋ฒ„๋ฅธ australia-southeast2.pem
์œ ๋Ÿฝ
europe-central2 ๋ฐ”๋ฅด์ƒค๋ฐ” europe-central2.pem
europe-north1 ํ•€๋ž€๋“œ europe-north1.pem
europe-north2 ์Šคํ†กํ™€๋ฆ„ europe-north2.pem
europe-southwest1 ๋งˆ๋“œ๋ฆฌ๋“œ europe-southwest1.pem
europe-west1 ๋ฒจ๊ธฐ์— europe-west1.pem
europe-west2 ๋Ÿฐ๋˜ europe-west2.pem
europe-west3 ํ”„๋ž‘ํฌํ‘ธ๋ฅดํŠธ europe-west3.pem
europe-west4 ๋„ค๋œ๋ž€๋“œ europe-west4.pem
europe-west6 ์ทจ๋ฆฌํžˆ europe-west6.pem
europe-west8 ๋ฐ€๋ผ๋…ธ europe-west8.pem
europe-west9 ํŒŒ๋ฆฌ europe-west9.pem
europe-west10 ๋ฒ ๋ฅผ๋ฆฐ europe-west10.pem
europe-west12 ํ† ๋ฆฌ๋…ธ europe-west12.pem
์ค‘๋™
me-central1 ๋„ํ•˜ me-central1.pem
me-central2 Dammam me-central2.pem
me-west1 ํ…”์•„๋น„๋ธŒ me-west1.pem
๋ถ๋ฏธ
northamerica-northeast1 ๋ชฌํŠธ๋ฆฌ์˜ฌ northamerica-northeast1.pem
northamerica-northeast2 ํ† ๋ก ํ†  northamerica-northeast2.pem
northamerica-south1 ๋ฉ•์‹œ์ฝ” northamerica-south1.pem
us-central1 ์•„์ด์˜ค์™€ us-central1.pem
us-east1 ์‚ฌ์šฐ์Šค์บ๋กค๋ผ์ด๋‚˜ us-east1.pem
us-east4 ๋ถ๋ฒ„์ง€๋‹ˆ์•„ us-east4.pem
us-east5 ์ฝœ๋Ÿผ๋ฒ„์Šค us-east5.pem
us-south1 Dallas us-south1.pem
us-west1 ์˜ค๋ฆฌ๊ฑด us-west1.pem
us-west2 ๋กœ์Šค์•ค์ ค๋ ˆ์Šค us-west2.pem
us-west3 ์†”ํŠธ๋ ˆ์ดํฌ์‹œํ‹ฐ us-west3.pem
us-west4 ๋ผ์Šค๋ฒ ์ด๊ฑฐ์Šค us-west4.pem
๋‚จ๋ฏธ
southamerica-east1 ์ƒํŒŒ์šธ๋ฃจ southamerica-east1.pem
southamerica-west1 ์‚ฐํ‹ฐ์•„๊ณ  southamerica-west1.pem

SSL/TLS ๊ตฌ์„ฑ ์žฌ์„ค์ •

SSL/TLS ๊ตฌ์„ฑ์„ ์™„์ „ํžˆ ์žฌ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Console

  1. Google Cloud ์ฝ˜์†”์—์„œ Cloud SQL ์ธ์Šคํ„ด์Šค ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    Cloud SQL ์ธ์Šคํ„ด์Šค๋กœ ์ด๋™

  2. ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์š” ํŽ˜์ด์ง€๋ฅผ ์—ด๋ ค๋ฉด ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. SQL ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ์—ฐ๊ฒฐ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. SSL ๊ตฌ์„ฑ ์žฌ์„ค์ • ์„น์…˜์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  5. SSL ๊ตฌ์„ฑ ์žฌ์„ค์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

  1. ์ธ์ฆ์„œ๋ฅผ ์ƒˆ๋กœ ๊ณ ์นฉ๋‹ˆ๋‹ค.

    gcloud sql instances reset-ssl-config INSTANCE_NAME
  2. ์ƒˆ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

REST v1beta4

  1. ์ธ์ฆ์„œ๋ฅผ ์ƒˆ๋กœ ๊ณ ์นฉ๋‹ˆ๋‹ค.

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • project-id: ํ”„๋กœ์ ํŠธ ID
    • instance-id: ์ธ์Šคํ„ด์Šค ID

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/resetSslConfig

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  2. ์ƒˆ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„