SSL/TLS ์ธ์ฆ์„œ ๊ตฌ์„ฑ

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

๊ฐœ์š”

์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๋ฉด Cloud SQL์ด ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์—ฐ๊ฒฐ์„ SSL/TLS์— ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

SSL/TLS ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ID์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋ ค๋ฉด ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค๊ณ  ์ธ์ฆ์„œ๋ฅผ PostgreSQL ํด๋ผ์ด์–ธํŠธ ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์— ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

SSL ๋ชจ๋“œ ๊ตฌ์„ฑ ๋ณ€๊ฒฝ์‚ฌํ•ญ์€ ์ƒˆ ์—ฐ๊ฒฐ์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. SSL์„ ์ ์šฉํ•˜๊ณ  ์ธ์Šคํ„ด์Šค์— ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ ๊ธฐ์กด ์—ฐ๊ฒฐ์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ ์—ฐ๊ฒฐ์ด ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ ์ฑ„ ์—ฐ๊ฒฐ๋œ ์ƒํƒœ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ ์—ฐ๊ฒฐ์„ ๋‹ซ๊ณ  ๋ชจ๋“  ์—ฐ๊ฒฐ์— SSL์„ ์ ์šฉํ•˜๋ ค๋ฉด ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

SSL/TLS ์•”ํ˜ธํ™” ์ ์šฉ

SSL ๋ชจ๋“œ ์„ค์ •์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ SSL ์•”ํ˜ธํ™”๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • SSL/TLS๊ฐ€ ์•„๋‹Œ ์—ฐ๊ฒฐ๊ณผ SSL/TLS ์—ฐ๊ฒฐ์„ ๋ชจ๋‘ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. SSL/TLS ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๊ฐ€ ํ™•์ธ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์˜ต์…˜์œผ๋กœ,

  • SSL/TLS๋กœ ์•”ํ˜ธํ™”๋œ ์—ฐ๊ฒฐ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. SSL ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๊ฐ€ ํ™•์ธ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • SSL/TLS ๋ฐ ์œ ํšจํ•œ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๋กœ ์•”ํ˜ธํ™”๋œ ์—ฐ๊ฒฐ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

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

SSL/TLS ํ•„์š”๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ฝ˜์†”

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

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

  2. ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์š” ํŽ˜์ด์ง€๋ฅผ ์—ด๋ ค๋ฉด ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. SQL ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ์—ฐ๊ฒฐ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ณด์•ˆ ํƒญ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  5. ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ํ—ˆ์šฉ(๊ถŒ์žฅ๋˜์ง€ ์•Š์Œ)
    • SSL ์—ฐ๊ฒฐ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์€ SSL/TLS ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์—ฐ๊ฒฐ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ์„œ๊ฐ€ ๊ฒ€์ฆ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์€ ์œ ํšจํ•œ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  SSL๋กœ ์•”ํ˜ธํ™”๋œ ํด๋ผ์ด์–ธํŠธ์˜ ์—ฐ๊ฒฐ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ IAM ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ์ฆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝ์šฐ Cloud SQL ์ธ์ฆ ํ”„๋ก์‹œ๋‚˜ Cloud SQL ์ปค๋„ฅํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ๋ณธ์ธ ์ธ์ฆ์„ ์‹œํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

gcloud

   gcloud sql instances patch INSTANCE_NAME \
   --ssl-mode=SSL_ENFORCEMENT_MODE
  

SSL_ENFORCEMENT_MODE๋ฅผ ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • ALLOW_UNENCRYPTED_AND_ENCRYPTED๋Š” ๋น„SSL/๋น„TLS ๋ฐ SSL/TLS ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. SSL ์—ฐ๊ฒฐ์˜ ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๊ฐ€ ํ™•์ธ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์ด ๊ธฐ๋ณธ ์„ค์ •์ž…๋‹ˆ๋‹ค.
  • ENCRYPTED_ONLY๋Š” SSL/TLS๋กœ ์•”ํ˜ธํ™”๋œ ์—ฐ๊ฒฐ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. SSL ์—ฐ๊ฒฐ์— ๋Œ€ํ•ด์„œ๋Š” ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๊ฐ€ ํ™•์ธ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • TRUSTED_CLIENT_CERTIFICATE_REQUIRED๋Š” SSL/TLS ๋ฐ ์œ ํšจํ•œ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๋กœ ์•”ํ˜ธํ™”๋œ ์—ฐ๊ฒฐ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ IAM ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ์ฆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝ์šฐ Cloud SQL ์ธ์ฆ ํ”„๋ก์‹œ๋‚˜ Cloud SQL ์ปค๋„ฅํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ๋ณธ์ธ ์ธ์ฆ์„ ์‹œํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ž์„ธํ•œ ๋‚ด์šฉ์€ PostgreSQL์šฉ Cloud SQL ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.

Terraform

SSL/TLS ์•”ํ˜ธํ™”๋ฅผ ์ ์šฉํ•˜๋ ค๋ฉด Terraform ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

resource "google_sql_database_instance" "postgres_instance" {
  name             = "postgres-instance"
  region           = "asia-northeast1"
  database_version = "POSTGRES_14"
  settings {
    tier = "db-custom-2-7680"
    ip_configuration {
      # The following SSL enforcement options only allow connections encrypted with SSL/TLS and with
      # valid client certificates. Please check the API reference for other SSL enforcement options:
      # https://cloud.google.com/sql/docs/postgres/admin-api/rest/v1beta4/instances#ipconfiguration
      ssl_mode = "TRUSTED_CLIENT_CERTIFICATE_REQUIRED"
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

๋ณ€๊ฒฝ์‚ฌํ•ญ ์ ์šฉ

ํ”„๋กœ์ ํŠธ์— Terraform ๊ตฌ์„ฑ์„ ์ ์šฉํ•˜๋ ค๋ฉด Google Cloud ๋‹ค์Œ ์„น์…˜์˜ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•˜์„ธ์š”.

Cloud Shell ์ค€๋น„

  1. Cloud Shell์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  2. Terraform ๊ตฌ์„ฑ์„ ์ ์šฉํ•  ๊ธฐ๋ณธ Google Cloud ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    ์ด ๋ช…๋ น์–ด๋Š” ํ”„๋กœ์ ํŠธ๋‹น ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๋ฉด ๋˜๋ฉฐ ์–ด๋–ค ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Terraform ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ๋ช…์‹œ์  ๊ฐ’์„ ์„ค์ •ํ•˜๋ฉด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์žฌ์ •์˜๋ฉ๋‹ˆ๋‹ค.

๋””๋ ‰ํ„ฐ๋ฆฌ ์ค€๋น„

๊ฐ Terraform ๊ตฌ์„ฑ ํŒŒ์ผ์—๋Š” ์ž์ฒด ๋””๋ ‰ํ„ฐ๋ฆฌ(๋ฃจํŠธ ๋ชจ๋“ˆ์ด๋ผ๊ณ ๋„ ํ•จ)๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. Cloud Shell์—์„œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด์— ์ƒˆ ํŒŒ์ผ์„ ๋งŒ๋“œ์„ธ์š”. ํŒŒ์ผ ์ด๋ฆ„์—๋Š” .tf ํ™•์žฅ์ž๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: main.tf). ์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ํŒŒ์ผ์„ main.tf๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. ํŠœํ† ๋ฆฌ์–ผ์„ ๋”ฐ๋ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ ์„น์…˜์ด๋‚˜ ๋‹จ๊ณ„์—์„œ ์ƒ˜ํ”Œ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ƒ˜ํ”Œ ์ฝ”๋“œ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“  main.tf์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    ํ•„์š”ํ•œ ๊ฒฝ์šฐ GitHub์—์„œ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Terraform ์Šค๋‹ˆํŽซ์ด ์—”๋“œ ํˆฌ ์—”๋“œ ์†”๋ฃจ์…˜์˜ ์ผ๋ถ€์ธ ๊ฒฝ์šฐ์— ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

  3. ํ™˜๊ฒฝ์— ์ ์šฉํ•  ์ƒ˜ํ”Œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ  ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  5. Terraform์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ๋””๋ ‰ํ„ฐ๋ฆฌ๋‹น ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
    terraform init

    ์›ํ•˜๋Š” ๊ฒฝ์šฐ ์ตœ์‹  Google ๊ณต๊ธ‰์—…์ฒด ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด -upgrade ์˜ต์…˜์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

    terraform init -upgrade

๋ณ€๊ฒฝ์‚ฌํ•ญ ์ ์šฉ

  1. ๊ตฌ์„ฑ์„ ๊ฒ€ํ† ํ•˜๊ณ  Terraform์—์„œ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•  ๋ฆฌ์†Œ์Šค๊ฐ€ ์˜ˆ์ƒ๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    terraform plan

    ํ•„์š”์— ๋”ฐ๋ผ ๊ตฌ์„ฑ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

  2. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ”„๋กฌํ”„ํŠธ์— yes๋ฅผ ์ž…๋ ฅํ•˜์—ฌ Terraform ๊ตฌ์„ฑ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    terraform apply

    Terraform์— '์ ์šฉ ์™„๋ฃŒ' ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

  3. ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ ค๋ฉด Google Cloud ํ”„๋กœ์ ํŠธ๋ฅผ ์—ฝ๋‹ˆ๋‹ค. Google Cloud ์ฝ˜์†”์—์„œ UI์˜ ๋ฆฌ์†Œ์Šค๋กœ ์ด๋™ํ•˜์—ฌ Terraform์ด ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“ค์—ˆ๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ–ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ์‚ฌํ•ญ ์‚ญ์ œ

๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์‚ญ์ œํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. Terraform ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ์‚ญ์ œ ๋ณดํ˜ธ๋ฅผ ์‚ฌ์šฉ ์ค‘์ง€ํ•˜๋ ค๋ฉด deletion_protection ์ธ์ˆ˜๋ฅผ false๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    deletion_protection =  "false"
  2. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ”„๋กฌํ”„ํŠธ์— yes๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์—…๋ฐ์ดํŠธ๋œ Terraform ๊ตฌ์„ฑ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    terraform apply
  1. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ”„๋กฌํ”„ํŠธ์— yes๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์ด์ „์— Terraform ๊ตฌ์„ฑ์— ์ ์šฉ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

    terraform destroy

REST v1

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

    • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID
    • SSL_ENFORCEMENT_MODE: ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
      • ALLOW_UNENCRYPTED_AND_ENCRYPTED: SSL/TLS๊ฐ€ ์•„๋‹Œ ์—ฐ๊ฒฐ๊ณผ SSL/TLS ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. SSL ์—ฐ๊ฒฐ์˜ ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๊ฐ€ ํ™•์ธ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์ด ๊ธฐ๋ณธ ์„ค์ •์ž…๋‹ˆ๋‹ค.
      • ENCRYPTED_ONLY: SSL/TLS๋กœ ์•”ํ˜ธํ™”๋œ ์—ฐ๊ฒฐ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
      • TRUSTED_CLIENT_CERTIFICATE_REQUIRED: SSL/TLS ๋ฐ ์œ ํšจํ•œ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๋กœ ์•”ํ˜ธํ™”๋œ ์—ฐ๊ฒฐ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ IAM ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ์ฆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝ์šฐ Cloud SQL ์ธ์ฆ ํ”„๋ก์‹œ๋‚˜ Cloud SQL ์ปค๋„ฅํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ๋ณธ์ธ ์ธ์ฆ์„ ์‹œํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • INSTANCE_ID: ์ธ์Šคํ„ด์Šค ID์ž…๋‹ˆ๋‹ค.

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

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

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

    {
      "settings": {
        "ipConfiguration": {"sslMode": "SSL_ENFORCEMENT_MODE"}
      }
    }
    

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

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

REST v1beta4

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

    • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID
    • SSL_ENFORCEMENT_MODE: ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
      • ALLOW_UNENCRYPTED_AND_ENCRYPTED: SSL/TLS๊ฐ€ ์•„๋‹Œ ์—ฐ๊ฒฐ๊ณผ SSL/TLS ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. SSL ์—ฐ๊ฒฐ์˜ ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๊ฐ€ ํ™•์ธ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์ด ๊ธฐ๋ณธ ์„ค์ •์ž…๋‹ˆ๋‹ค.
      • ENCRYPTED_ONLY: SSL/TLS๋กœ ์•”ํ˜ธํ™”๋œ ์—ฐ๊ฒฐ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
      • TRUSTED_CLIENT_CERTIFICATE_REQUIRED: SSL/TLS ๋ฐ ์œ ํšจํ•œ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๋กœ ์•”ํ˜ธํ™”๋œ ์—ฐ๊ฒฐ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ IAM ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ์ฆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝ์šฐ Cloud SQL ์ธ์ฆ ํ”„๋ก์‹œ๋‚˜ Cloud SQL ์ปค๋„ฅํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ๋ณธ์ธ ์ธ์ฆ์„ ์‹œํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • INSTANCE_ID: ์ธ์Šคํ„ด์Šค ID์ž…๋‹ˆ๋‹ค.

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

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

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

    {
      "settings": {
        "ipConfiguration": {"sslMode": "SSL_ENFORCEMENT_MODE"}
      }
    }
    

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

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

์„œ๋ฒ„ ์ธ์ฆ์„œ

์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๋ฉด Cloud SQL์ด ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์ธ์ฆ์„œ๊ฐ€ ์œ ํšจํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Cloud SQL์—์„œ๋Š” ์„ธ ๊ฐ€์ง€ ์ธ์ฆ ๊ธฐ๊ด€(CA) ๊ณ„์ธต ๊ตฌ์กฐ ์ค‘์—์„œ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ํƒํ•œ CA ๊ณ„์ธต ๊ตฌ์กฐ๊ฐ€ ์ธ์Šคํ„ด์Šค์˜ ์„œ๋ฒ„ CA ๋ชจ๋“œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค์˜ ์„œ๋ฒ„ CA ๋ชจ๋“œ๋กœ ์ธ์Šคํ„ด์Šค๋ณ„ CA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์„œ๋ฒ„ ์ธ์ฆ์„œ์˜ ๋งŒ๋ฃŒ์ผ์€ 10๋…„์ž…๋‹ˆ๋‹ค. ๊ณต์œ  CA ๋˜๋Š” ๊ณ ๊ฐ ๊ด€๋ฆฌ CA๋ฅผ ์ธ์Šคํ„ด์Šค์˜ ์„œ๋ฒ„ CA ๋ชจ๋“œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์„œ๋ฒ„ ์ธ์ฆ์„œ์˜ ๋งŒ๋ฃŒ์ผ์€ 1๋…„*์ž…๋‹ˆ๋‹ค. ๋งŒ๋ฃŒ์ผ ์ดํ›„์—๋Š” ์„œ๋ฒ„ ์ธ์ฆ์„œ๊ฐ€ ๋” ์ด์ƒ ์œ ํšจํ•˜์ง€ ์•Š์œผ๋ฉฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค์— ๋ณด์•ˆ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ CA๋ฅผ ์ธ์ฆํ•˜๊ฑฐ๋‚˜ ์„œ๋ฒ„ ์ธ์ฆ์„œ์˜ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ์ธ์ฆํ•˜๋„๋ก ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ ๋งŒ๋ฃŒ๋œ ์„œ๋ฒ„ ์ธ์ฆ์„œ๊ฐ€ ์žˆ๋Š” Cloud SQL ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ์˜ ์—ฐ๊ฒฐ์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ์ด ์ค‘๋‹จ๋˜์ง€ ์•Š๋„๋ก ์ธ์ฆ์„œ๊ฐ€ ๋งŒ๋ฃŒ๋˜๊ธฐ ์ „์— ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ์ˆœํ™˜ํ•˜์„ธ์š”. ์„œ๋ฒ„ ์ธ์ฆ์„œ๊ฐ€ ๊ณง ๋งŒ๋ฃŒ๋œ๋‹ค๋Š” ์•Œ๋ฆผ์ด ์ฃผ๊ธฐ์ ์œผ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ์•Œ๋ฆผ์€ ๋งŒ๋ฃŒ์ผ 90, 30, 10, 2, 1์ผ ์ „์— ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

* ๊ณ ๊ฐ์ด ๊ด€๋ฆฌํ•˜๋Š” CA์˜ ๊ฒฝ์šฐ CA์˜ ์œ ํšจ ๊ธฐ๊ฐ„์— ๋” ์งง์€ ๋งŒ๋ฃŒ์ผ์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ ์„œ๋ฒ„ ์ธ์ฆ์„œ์˜ ๋งŒ๋ฃŒ์ผ์ด 1๋…„ ๋ฏธ๋งŒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์ธ์ฆ์„œ ๋‚˜์—ด ๋ฐ ์ƒ์„ฑ

Google Cloud ์ฝ˜์†”์—์„œ ์„œ๋ฒ„ ์ธ์ฆ์„œ์˜ ์„ธ๋ถ€์ •๋ณด๋ฅผ ๋ณด๋ ค๋ฉด ์—ฐ๊ฒฐ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜์—ฌ ๋ณด์•ˆ ํƒญ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

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

  • ์ธ์ฆ์„œ ์ƒํƒœ: ์˜ˆ์ •๋จ, ํ™œ์„ฑ ๋˜๋Š” ์ด์ „
    • ์˜ˆ์ •๋จ: ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ™œ์„ฑ ์ƒํƒœ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์ธ์ฆ์„œ๋ฅผ ํ™œ์„ฑ ์ƒํƒœ๋กœ ๋งŒ๋“ค๋ ค๋ฉด ์ˆœํ™˜ ์ ˆ์ฐจ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
    • ํ™œ์„ฑ: ์ธ์ฆ์„œ๊ฐ€ ์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค.
    • ์ด์ „: ์ธ์ฆ์„œ๊ฐ€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ธ์ฆ์„œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ๋กค๋ฐฑ ์ ˆ์ฐจ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
  • ์ƒ์„ฑ๋จ: ์ธ์ฆ์„œ๊ฐ€ ์ƒ์„ฑ๋œ ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.
  • ๋งŒ๋ฃŒ: ์ธ์ฆ์„œ๊ฐ€ ๋งŒ๋ฃŒ๋˜๋Š” ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

ํ™œ์„ฑ ์ธ์ฆ์„œ๊ฐ€ ๋งŒ๋ฃŒ๋˜๊ธฐ ์ „์— ์ƒˆ ์ธ์ฆ์„œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ˜์†”

์ž์ฒด ์„œ๋ช…๋œ ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ธ์Šคํ„ด์Šค(์ธ์Šคํ„ด์Šค๋ณ„ CA)์˜ ๊ฒฝ์šฐ:

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

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

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

์ƒˆ ์„œ๋ฒ„ CA ์ธ์ฆ์„œ๊ฐ€ ์˜ˆ์ •๋จ ์Šฌ๋กฏ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ƒˆ ์„œ๋ฒ„ CA ์ธ์ฆ์„œ๋กœ ์ฆ‰์‹œ ์ „ํ™˜ํ•˜๋ ค๋ฉด ํด๋ผ์ด์–ธํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์ˆœํ™˜์„ ์™„๋ฃŒํ•˜์—ฌ ์„œ๋ฒ„ CA ์ธ์ฆ์„œ ์ˆœํ™˜์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ณต์œ  CA์—์„œ ๋ฐœ๊ธ‰ํ•œ ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ธ์Šคํ„ด์Šค์˜ ๊ฒฝ์šฐ:

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

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

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

์ƒˆ ์„œ๋ฒ„ ์ธ์ฆ์„œ๊ฐ€ ์˜ˆ์ •๋จ ์Šฌ๋กฏ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ƒˆ ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ์ฆ‰์‹œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํด๋ผ์ด์–ธํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์ˆœํ™˜์„ ์™„๋ฃŒํ•˜์—ฌ ์„œ๋ฒ„ ์ธ์ฆ์„œ ์ˆœํ™˜์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

gcloud

์ž์ฒด ์„œ๋ช…๋œ ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ธ์Šคํ„ด์Šค(์ธ์Šคํ„ด์Šค๋ณ„ CA)์˜ ๊ฒฝ์šฐ:

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

๊ณต์œ  CA์—์„œ ๋ฐœ๊ธ‰ํ•œ ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ธ์Šคํ„ด์Šค์˜ ๊ฒฝ์šฐ:

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

Terraform

์„œ๋ฒ„ ์ธ์ฆ์„œ ์ •๋ณด๋ฅผ ์ถœ๋ ฅ์œผ๋กœ ์ œ๊ณตํ•˜๋ ค๋ฉด Terraform ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  1. Terraform ๊ตฌ์„ฑ ํŒŒ์ผ์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
       data "google_sql_ca_certs" "ca_certs" {
         instance = google_sql_database_instance.default.name
       }
    
       locals {
         furthest_expiration_time = reverse(sort([for k, v in data.google_sql_ca_certs.ca_certs.certs : v.expiration_time]))[0]
         latest_ca_cert           = [for v in data.google_sql_ca_certs.ca_certs.certs : v.cert if v.expiration_time == local.furthest_expiration_time]
       }
    
       output "db_latest_ca_cert" {
         description = "Latest CA certificate used by the primary database server"
         value       = local.latest_ca_cert
         sensitive   = true
       }
       
  2. server-ca.pem ํŒŒ์ผ์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”.
       terraform output db_latest_ca_cert > server-ca.pem
       

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

์ƒˆ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ ๋งŒ๋“ค๊ธฐ

์ธ์Šคํ„ด์Šค๋‹น ์ตœ๋Œ€ 10๊ฐœ์˜ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด Cloud SQL Admin IAM ์—ญํ• ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ธ์ฆ์„œ์˜ ๋น„๊ณต๊ฐœ ํ‚ค๋ฅผ ๋ถ„์‹คํ•  ๊ฒฝ์šฐ, ์ƒˆ ํ‚ค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋น„๊ณต๊ฐœ ํ‚ค๋Š” ๋ณต๊ตฌํ•  ์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ์˜ ๋งŒ๋ฃŒ์ผ์€ 10๋…„์ž…๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ ๋งŒ๋ฃŒ๊ฐ€ ๊ฐ€๊นŒ์›Œ์ง€๋ฉด ์•Œ๋ฆผ์ด ๋ฐœ์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • SSL ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด Cloud SQL ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹คํ–‰ ์ค‘ ์ƒํƒœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฝ˜์†”

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

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

  2. ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์š” ํŽ˜์ด์ง€๋ฅผ ์—ด๋ ค๋ฉด ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. SQL ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ์—ฐ๊ฒฐ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ณด์•ˆ ํƒญ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  5. ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  6. ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ ๋งŒ๋“ค๊ธฐ ๋Œ€ํ™”์ƒ์ž์—์„œ ๊ณ ์œ  ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  7. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  8. ์ƒˆ SSL ์ธ์ฆ์„œ๊ฐ€ ์ƒ์„ฑ๋จ ๋Œ€ํ™”์ƒ์ž์˜ ์ฒซ ๋ฒˆ์งธ ์„น์…˜์—์„œ client-key.pem ๋‹ค์šด๋กœ๋“œ๋ฅผ ํด๋ฆญํ•˜์—ฌ ๋น„๊ณต๊ฐœ ํ‚ค๋ฅผ client-key.pem ํŒŒ์ผ์— ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  9. ๋‘ ๋ฒˆ์งธ ์„น์…˜์—์„œ client-cert.pem ๋‹ค์šด๋กœ๋“œ๋ฅผ ํด๋ฆญํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๋ฅผ client-cert.pem ํŒŒ์ผ์— ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  10. ์„ธ ๋ฒˆ์งธ ์„น์…˜์—์„œ server-ca.pem ๋‹ค์šด๋กœ๋“œ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ server-ca.pem ํŒŒ์ผ์— ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  11. ๋‹ซ๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

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

    gcloud sql ssl client-certs create CERT_NAME client-key.pem \
    --instance=INSTANCE_NAME
  2. ssl client-certs describe๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฉ๊ธˆ ๋งŒ๋“  ์ธ์ฆ์„œ์˜ ๊ณต๊ฐœ ํ‚ค๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ client-cert.pem ํŒŒ์ผ์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    gcloud sql ssl client-certs describe CERT_NAME \
    --instance=INSTANCE_NAME \
    --format="value(cert)" > client-cert.pem
  3. instances describe ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ server-ca.pem ํŒŒ์ผ์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    gcloud sql instances describe INSTANCE_NAME \
    --format="value(serverCaCert.cert)" > server-ca.pem

Terraform

ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด Terraform ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

resource "google_sql_ssl_cert" "postgres_client_cert" {
  common_name = "postgres_common_name"
  instance    = google_sql_database_instance.postgres_instance.name
}

REST v1

  1. SSL/TLS ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค์–ด ์ด ์ธ์Šคํ„ด์Šค์˜ ๊ณ ์œ ํ•œ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

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

    • project-id: ํ”„๋กœ์ ํŠธ ID
    • instance-id: ์ธ์Šคํ„ด์Šค ID
    • client-cert-name: ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ ์ด๋ฆ„

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

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

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

    {
      "commonName" : "client-cert-name"
    }
    

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

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

  2. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‘๋‹ต์—์„œ ๋”ฐ์˜ดํ‘œ ์•ˆ์— ์žˆ๋Š” ๋ชจ๋“  ์ธ์ฆ์„œ ์ฝ˜ํ…์ธ (๋”ฐ์˜ดํ‘œ๋Š” ์ œ์™ธ)๋ฅผ ๋กœ์ปฌ ํŒŒ์ผ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
    1. serverCaCert.cert๋ฅผ server-ca.pem์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
    2. clientCert.cert๋ฅผ client-cert.pem์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
    3. certPrivateKey๋ฅผ client-key.pem์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

REST v1beta4

  1. SSL/TLS ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค์–ด ์ด ์ธ์Šคํ„ด์Šค์˜ ๊ณ ์œ ํ•œ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

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

    • project-id: ํ”„๋กœ์ ํŠธ ID
    • instance-id: ์ธ์Šคํ„ด์Šค ID
    • client-cert-name: ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ ์ด๋ฆ„

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

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

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

    {
      "commonName" : "client-cert-name"
    }
    

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

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

  2. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‘๋‹ต์—์„œ ๋”ฐ์˜ดํ‘œ ์•ˆ์— ์žˆ๋Š” ๋ชจ๋“  ์ธ์ฆ์„œ ์ฝ˜ํ…์ธ (๋”ฐ์˜ดํ‘œ๋Š” ์ œ์™ธ)๋ฅผ ๋กœ์ปฌ ํŒŒ์ผ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
    1. serverCaCert.cert๋ฅผ server-ca.pem์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
    2. clientCert.cert๋ฅผ client-cert.pem์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
    3. certPrivateKey๋ฅผ client-key.pem์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ์„ ๋ณด์œ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • server-ca.pem์œผ๋กœ ์ €์žฅ๋œ ์„œ๋ฒ„ ์ธ์ฆ์„œ
  • client-cert.pem์œผ๋กœ ์ €์žฅ๋œ ํด๋ผ์ด์–ธํŠธ ๊ณต๊ฐœ ํ‚ค ์ธ์ฆ์„œ
  • client-key.pem์œผ๋กœ ์ €์žฅ๋œ ํด๋ผ์ด์–ธํŠธ ๋น„๊ณต๊ฐœ ํ‚ค
์—ฐ๊ฒฐ์— ์‚ฌ์šฉํ•  ๋„๊ตฌ์— ๋”ฐ๋ผ ์ด ์„ธ ๊ฐ€์ง€ ํ•ญ๋ชฉ์ด ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด psql ๋ช…๋ น์ค„ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•  ๊ฒฝ์šฐ ์ด ์„ธ ๊ฐœ ํŒŒ์ผ์€ psql ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์˜ sslrootcert, sslcert, sslkey ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์ž…๋‹ˆ๋‹ค. psql ํด๋ผ์ด์–ธํŠธ์™€ SSL/TLS๋ฅผ ์‚ฌ์šฉํ•œ ์—ฐ๊ฒฐ ์˜ˆ์‹œ๋Š” psql ํด๋ผ์ด์–ธํŠธ๋กœ ์—ฐ๊ฒฐ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์„œ๋ฒ„ ๋ณธ์ธ ์ธ์ฆ

์„œ๋ฒ„ ๋ณธ์ธ ์ธ์ฆ์€ Cloud SQL ์ธ์Šคํ„ด์Šค์˜ ์„œ๋ฒ„ ์ธ์ฆ ๊ธฐ๊ด€(CA) ๊ณ„์ธต ๊ตฌ์กฐ ๊ตฌ์„ฑ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค๋ณ„ CA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ธ์Šคํ„ด์Šค์˜ ๊ฒฝ์šฐ ๊ฐ ์ธ์Šคํ„ด์Šค์— ๊ณ ์œ ํ•œ CA๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ CA๋ฅผ ํ™•์ธํ•˜๋ฉด ์„œ๋ฒ„ ID๋„ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค. ๊ณต์œ  CA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ธ์Šคํ„ด์Šค์˜ ๊ฒฝ์šฐ ์„œ๋ฒ„ CA๊ฐ€ ์ธ์Šคํ„ด์Šค ๊ฐ„์— ๊ณต์œ ๋˜๋ฏ€๋กœ ์„œ๋ฒ„ ๋ณธ์ธ ์ธ์ฆ์„ ์œ„ํ•ด CA ํ™•์ธ๊ณผ ํ•จ๊ป˜ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ํ™•์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค๋ณ„ CA๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ Private Service Connect๋กœ ๊ตฌ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•ด์„œ๋งŒ DNS ์ด๋ฆ„ ๊ธฐ๋ฐ˜ ์„œ๋ฒ„ ๋ณธ์ธ ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต์œ  CA๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  ์œ ํ˜•์˜ ์ธ์Šคํ„ด์Šค(์˜ˆ: Private Service Connect, ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์•ก์„ธ์Šค, ๊ณต๊ฐœ IP ์ธ์Šคํ„ด์Šค)์— ๋Œ€ํ•ด DNS ์ด๋ฆ„ ๊ธฐ๋ฐ˜ ์„œ๋ฒ„ ๋ณธ์ธ ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณ ๊ฐ ๊ด€๋ฆฌ CA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ CA ์‹ ๋ขฐ ์ฒด์ธ์„ ํ™•์ธํ•˜๊ณ  serverCAmode์— ๊ณ ๊ฐ ๊ด€๋ฆฌ CA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์œ ํ˜•์˜ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•ด DNS ์ด๋ฆ„ ๊ธฐ๋ฐ˜ ์„œ๋ฒ„ ๋ณธ์ธ ์ธ์ฆ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค์— ๊ณ ๊ฐ ๊ด€๋ฆฌ CA ์˜ต์…˜์„ ์„ ํƒํ•˜๋ฉด ์„œ๋ฒ„ ์ธ์ฆ์„œ์˜ SAN ํ•„๋“œ์— ์ปค์Šคํ…€ DNS ์ด๋ฆ„์„ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ปค์Šคํ…€ SAN ํ•„๋“œ ์ˆ˜์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ธ์Šคํ„ด์Šค ์„ธ๋ถ€์ •๋ณด๋ฅผ ํ™•์ธํ•˜์—ฌ Cloud SQL ์ธ์Šคํ„ด์Šค์— ๊ตฌ์„ฑ๋œ CA ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ธ์Šคํ„ด์Šค ์ •๋ณด ๋ณด๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์„œ๋ฒ„ ๋ณธ์ธ ์ธ์ฆ ์‚ฌ์šฉ ์„ค์ •

๊ณต์œ  CA๋ฅผ Cloud SQL ์ธ์Šคํ„ด์Šค์˜ ์„œ๋ฒ„ CA ๋ชจ๋“œ๋กœ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ์ปค์Šคํ…€ SAN ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปค์Šคํ…€ DNS ์ด๋ฆ„์„ ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ ์„œ๋ฒ„ ๋ณธ์ธ ์ธ์ฆ๋„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ณต์œ  CA๋ฅผ ์„œ๋ฒ„ CA ๋ชจ๋“œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ธ์Šคํ„ด์Šค์—๋Š” ์„œ๋ฒ„ ์ธ์ฆ์„œ์˜ ์ฃผ์ฒด ๋Œ€์ฒด ์ด๋ฆ„(SAN) ํ•„๋“œ์— ์ธ์Šคํ„ด์Šค DNS ์ด๋ฆ„์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค ์กฐํšŒ API๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‘๋‹ต์„ ์„œ๋ฒ„ ๋ณธ์ธ ์ธ์ฆ์„ ์œ„ํ•œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ด DNS ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DNS ์ด๋ฆ„์— DNS ๋ณ€ํ™˜์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ณต์œ  CA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•ด ์„œ๋ฒ„ ๋ณธ์ธ ์ธ์ฆ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•˜์„ธ์š”.

  1. DNS ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    1. ์ธ์Šคํ„ด์Šค์˜ DNS ์ด๋ฆ„์„ ํฌํ•จํ•˜์—ฌ Cloud SQL ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์š”์•ฝ ์ •๋ณด๋ฅผ ๋ณด๋ ค๋ฉด gcloud sql instances describe ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

      gcloud sql instances describe INSTANCE_NAME \
        --project=PROJECT_ID

      ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

      • INSTANCE_NAME: Cloud SQL ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„
      • PROJECT_ID: ์ธ์Šคํ„ด์Šค๊ฐ€ ํฌํ•จ๋œ Google Cloud ํ”„๋กœ์ ํŠธ์˜ ID ๋˜๋Š” ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ
    2. ์‘๋‹ต์—์„œ dnsNames: ํ•„๋“œ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ์ด ํ•„๋“œ๋Š” ๋‹ค์Œ ํ˜•์‹์˜ DNS ์ด๋ฆ„์„ ์—ฌ๋Ÿฌ ๊ฐœ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ DNS ์ด๋ฆ„ ํ˜•์‹ ์ด๋ฆ„ ์ˆ˜์ค€
      Private Service Connect ๋˜๋Š” ๊ณต๊ฐœ IP ์ฃผ์†Œ INSTANCE_UID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog.

      ์˜ˆ์‹œ:
      1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.
      ์ธ์Šคํ„ด์Šค
      ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์•ก์„ธ์Šค INSTANCE_UID.PROJECT_DNS_LABEL.REGION_NAME.sql-psa.goog.

      ์˜ˆ์‹œ:
      1a23b4cd5e67.1a2b345c6d27.us-central1.sql-psa.goog.
      ์ธ์Šคํ„ด์Šค
  2. DNS ์˜์—ญ์—์„œ DNS ๋ ˆ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋น„๊ณต๊ฐœ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๊ฐ€์ƒ ํ”„๋ผ์ด๋น— ํด๋ผ์šฐ๋“œ(VPC) ๋„คํŠธ์›Œํฌ์˜ ๋น„๊ณต๊ฐœ DNS ์˜์—ญ์— DNS ๋ ˆ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  3. PostgreSQL์šฉ Cloud SQL ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•  ๋•Œ DNS ์ด๋ฆ„์„ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์œผ๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„ ๋ณธ์ธ ์ธ์ฆ์„ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด psql ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” sslmode=verify-full ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ PostgreSQL ํด๋ผ์ด์–ธํŠธ ๋“œ๋ผ์ด๋ฒ„์—๋Š” ์œ ์‚ฌํ•œ ๊ตฌ์„ฑ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

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