הגדרת שם DNS מותאם אישית למכונה של Cloud SQL

בדף הזה מוסבר איך להגדיר שם מותאם אישית של מערכת שמות דומיינים (DNS) למופע Cloud SQL.

סקירה כללית

אתם יכולים להגדיר מופע Cloud SQL כך שהאפליקציות יוכלו להתחבר באמצעות שם DNS מותאם אישית שמנוהל על ידי הארגון. אם אתם רוצים להשתמש בשם DNS מותאם אישית כדי להתחבר למופע Cloud SQL במקום להשתמש בכתובת IP, אתם צריכים להגדיר שם חלופי של בעלים (subject) (SAN) בהתאמה אישית. אפשר להגדיר SAN מותאם אישית כשיוצרים או מעדכנים מופע.

כשמוסיפים שם DNS מותאם אישית כהגדרת SAN מותאמת אישית למופע, Cloud SQL מוסיף את שם ה-DNS המותאם אישית לשדה ה-SAN של אישור השרת של המופע. ההתאמה האישית הזו מאפשרת לכם להשתמש בשם ה-DNS המותאם אישית עם אימות שם המארח בצורה מאובטחת. אפשר להוסיף רשימה מופרדת בפסיקים של עד שלושה שמות DNS מותאמים אישית ל-SAN המותאם אישית. מטעמי אבטחה, אפשר להשתמש בהגדרת SAN בהתאמה אישית רק במקרים שבהם מגדירים את CUSTOMER_MANAGED_CAS_CA כמצב CA של השרת.

אחרי שמגדירים את שם ה-DNS המותאם אישית למכונה, אפשר להשתמש בו כדי לחבר את לקוחות מסד הנתונים או האפליקציות, כולל מחברי שפות ל-Cloud SQL ושרת ה-proxy ל-Cloud SQL Auth.

תהליך עבודה

כדי להגדיר שם DNS בהתאמה אישית למופע:

  1. יצירת מופע שהוגדר עם CA בניהול הלקוח.
  2. מוסיפים ערכי SAN מותאמים אישית למופע. ערכי ה-SAN המותאמים אישית מוכנסים לשדה ה-SAN של אישור השרת של המופע.
  3. קובעים את כתובת ה-IP של המכונה.
  4. יוצרים רשומות DNS מותאמות אישית למופע.
  5. מתחברים למופע באמצעות שם ה-DNS המותאם אישית.

לפני שמתחילים

לפני שמגדירים שם DNS בהתאמה אישית למופע, חשוב לוודא שיש לכם את התפקידים וההרשאות הנדרשים.

אם אתם יוצרים מכונת Cloud SQL חדשה, כדי להשתמש ב-SAN בהתאמה אישית, המכונה צריכה להשתמש גם ברשות אישורים (CA) בניהול הלקוח למצב CA של השרת.

יצירת מכונה עם ערכי SAN מותאמים אישית

כדי ליצור מכונה עם ערכי SAN בהתאמה אישית, משתמשים בפקודה gcloud sql instances create הבאה:

gcloud

gcloud sql instances create "INSTANCE_NAME" \
  --database-version=DATABASE_VERSION \
  --project=PROJECT_ID \
  --region=REGION \
  --server-ca-mode=CUSTOMER_MANAGED_CAS_CA \
  --server-ca-pool=projects/PROJECT_ID_CAS/locations/REGION/caPools/CA_POOL_ID
  --custom-subject-alternative-names=CUSTOM_DNS_NAME

מחליפים את הפרטים הבאים:

  • INSTANCE_NAME בשם המכונה של Cloud SQL שרוצים ליצור.
  • DATABASE_VERSION עם enum הגרסה של המכונה של Cloud SQL שרוצים ליצור. האפשרות של רשות אישורים בניהול הלקוח נתמכת רק ב-MySQL 8.0.30 ואילך.
  • PROJECT_ID במזהה הפרויקט שבו אתם מתכננים ליצור את מופעי Cloud SQL.
  • PROJECT_ID_CAS במזהה הפרויקט שבו יצרתם את CA_POOL_ID. יכול להיות שזה יהיה אותו פרויקט שבו רוצים ליצור את מכונת Cloud SQL, או פרויקט אחר.
  • REGION באזור שבו יצרתם את מאגר רשויות האישורים. צריך ליצור את המכונה הווירטואלית באותו אזור שבו נמצא מאגר רשויות האישורים.
  • CA_POOL_ID במזהה של מאגר הרשויות שמנפיקות את האישורים שיצרתם.
  • CUSTOM_DNS_NAME עם עד שלושה שמות DNS בהתאמה אישית, שמופרדים בפסיקים ללא רווחים בין הערכים. לדוגמה, develop.example.com,test.example.com,production.example.com.

Terraform

כדי ליצור מכונה עם ערכי SAN בהתאמה אישית, משתמשים במשאב של Terraform. בדוגמה הבאה נוצרים גם משאבים שנדרשים מראש עבור המכונה החדשה.

resource "google_project_service_identity" "default" {
  provider = google-beta
  service  = "sqladmin.googleapis.com"
}

resource "random_string" "default" {
  length  = 10
  special = false
  upper   = false
}

resource "google_privateca_ca_pool" "default" {
  name     = "customer-ca-pool-${random_string.default.result}"
  location = "asia-northeast1"
  tier     = "DEVOPS"
  publishing_options {
    publish_ca_cert = false
    publish_crl     = false
  }
}

# This is required for setting up customer managed CAS (Certificate Authority Service) instances.
resource "google_privateca_certificate_authority" "default" {
  pool                                   = google_privateca_ca_pool.default.name
  certificate_authority_id               = "my-certificate-authority"
  location                               = "asia-northeast1"
  lifetime                               = "86400s"
  type                                   = "SELF_SIGNED"
  deletion_protection                    = false # set to "true" in production
  skip_grace_period                      = true
  ignore_active_certificates_on_deletion = true
  config {
    subject_config {
      subject {
        organization = "my organization"
        common_name  = "my certificate authority name"
      }
    }
    x509_config {
      ca_options {
        is_ca = true
      }
      key_usage {
        base_key_usage {
          cert_sign = true
          crl_sign  = true
        }
        extended_key_usage {
          server_auth = false
        }
      }
    }
  }
  key_spec {
    algorithm = "RSA_PKCS1_4096_SHA256"
  }
}

resource "google_privateca_ca_pool_iam_member" "default" {
  ca_pool = google_privateca_ca_pool.default.id
  role    = "roles/privateca.certificateRequester"

  member = "serviceAccount:${google_project_service_identity.default.email}"
}

resource "google_sql_database_instance" "default" {
  name             = "mysql-instance"
  region           = "asia-northeast1"
  database_version = "MYSQL_8_4"
  settings {
    edition = "ENTERPRISE"
    tier    = "db-f1-micro"
    ip_configuration {
      # The following server CA mode lets the instance use customer-managed CAS CA to issue server certificates.
      # https://cloud.google.com/sql/docs/mysql/admin-api/rest/v1beta4/instances#ipconfiguration
      server_ca_mode                   = "CUSTOMER_MANAGED_CAS_CA"
      server_ca_pool                   = google_privateca_ca_pool.default.id
      custom_subject_alternative_names = ["customSan.test.com"]
    }
  }
}

הוספה או עדכון של ערכי SAN מותאמים אישית למופע

כדי להוסיף או לעדכן ערכים מותאמים אישית של SAN עבור מופע קיים: פועלים לפי השלבים הבאים:

gcloud

gcloud sql instances patch INSTANCE_NAME \
  --custom-subject-alternative-names=CUSTOM_DNS_NAME

מחליפים את הפרטים הבאים:

  • INSTANCE_NAME בשם המכונה של Cloud SQL שרוצים לעדכן.
  • CUSTOM_DNS_NAME עם עד שלושה שמות DNS בהתאמה אישית, שמופרדים בפסיקים ללא רווחים בין הערכים. לדוגמה, develop.example.com,new-test.example.com,production.example.com.

Terraform

כדי לעדכן מופע שכבר יש לו ערכי SAN מותאמים אישית, משתמשים במשאב של Terraform.

resource "google_sql_database_instance" "default" {
  name             = "mysql-instance"
  region           = "asia-northeast1"
  database_version = "MYSQL_8_4"
  settings {
    edition = "ENTERPRISE"
    tier    = "db-f1-micro"
    ip_configuration {
      # The following server CA mode lets the instance use customer-managed CAS CA to issue server certificates.
      # https://cloud.google.com/sql/docs/mysql/admin-api/rest/v1beta4/instances#ipconfiguration
      server_ca_mode                   = "CUSTOMER_MANAGED_CAS_CA"
      server_ca_pool                   = google_privateca_ca_pool.default.id
      custom_subject_alternative_names = ["customSan.test.com"]
    }
  }
}

ניקוי כל ערכי ה-SAN המותאמים אישית ממופע

כדי לנקות את כל ערכי ה-SAN המותאמים אישית ממופע, מבצעים את הפעולות הבאות:

gcloud

gcloud sql instances patch INSTANCE_NAME \
  --clear-custom-subject-alternative-names

מחליפים את INSTANCE_NAME בשם של מופע Cloud SQL שרוצים לעדכן.

יצירת רשומות DNS בהתאמה אישית

כדי להתחבר למופע באמצעות שם DNS בהתאמה אישית עם הלקוחות והאפליקציות שלכם, צריך להגדיר את המיפוי בין שם ה-DNS לכתובת ה-IP. המיפוי הזה נקרא פענוח DNS. אם אתם מתחברים באופן פרטי, אתם צריכים ליצור את רשומת ה-DNS בתחום DNS פרטי ברשת המתאימה של הענן הווירטואלי הפרטי (VPC).

כדי ליצור רשומות DNS מותאמות אישית למופע שלכם:

  1. מאחזרים את כתובת ה-IP של המכונה. מריצים את הפקודה הבאה:

    gcloud sql instances describe INSTANCE_NAME \
     --project=PROJECT_ID

    מחליפים את הפרטים הבאים:

    • INSTANCE_NAME: השם של מכונת Cloud SQL
    • PROJECT_ID: המזהה או מספר הפרויקט של הפרויקט שמכיל את המופע. Google Cloud
  2. מחפשים את השדה ipAddresses: בתשובה.

    לדוגמה:

    ipAddresses:
    - ipAddress: 192.0.2.4
      type: PRIVATE
    

    אפשר לאחזר את כתובת ה-IP הפרטית של מופע שהוגדר לגישה לשירותים פרטיים, ל-Private Service Connect או לשניהם.

  3. מוסיפים שתי רשומות DNS לתחום DNS שבו האפליקציה משתמשת. אתם יכולים להשתמש בשרת DNS שאתם מנהלים בעצמכם או באזור פרטי של Cloud DNS שבו האפליקציה שלכם משתמשת.

    • יצירת רשומת A לכתובת ה-IP של המופע
    • יוצרים רשומת TXT שמכילה את שם החיבור של המכונה.

    לקוחות רגילים של מסד נתונים משתמשים ברשומה A כדי לחפש את כתובת ה-IP וליצור את החיבור. מחברי שפה של Cloud SQL ושרת proxy ל-Cloud SQL Auth משתמשים ברשומה TXT כדי לחפש את שם החיבור של המכונה.

    לדוגמה, מחרוזת החיבור של המופע היא my-project:region:my-instance, אבל אתם רוצים להתחבר באמצעות שם ה-DNS prod-db.mycompany.example.com. אם כתובת ה-IP של המופע ברשת של החברה היא 192.0.2.4, צריך ליצור את רשומות ה-DNS הבאות:

    Record type: A
    Name: prod-db.mycompany.example.com
    Value: 192.0.2.4
    TTL: 600
    
    Record type: TXT
    Name: prod-db.mycompany.example.com
    Value: my-project:region:my-instance
    TTL: 600
    

התחברות למופע באמצעות שם DNS מותאם אישית

כשמתחברים למופע Cloud SQL ל-MySQL, צריך להגדיר את שם ה-DNS המותאם אישית כשם המארח ולהפעיל את אימות זהות השרת בלקוח. לדוגמה, כשמשתמשים בלקוח MySQL, מציינים את הדגל --ssl-mode=VERIFY_IDENTITY. לדרייברים אחרים של לקוחות MySQL יש פלאגים דומים להגדרה.

אם אתם מתחברים למכונת Cloud SQL פרטית מרשת חיצונית, אתם צריכים להגדיר את מכונת Cloud SQL ואת רשת הענן הווירטואלי הפרטי (VPC) שלה כדי לאפשר חיבורים חיצוניים ולתת ל-Cloud DNS לתקשר עם מערכות מקומיות. מידע נוסף על ההגדרה הזו זמין במאמרים חיבור ממקור חיצוני והגדרת DNS למערכות מקומיות.

מגבלות

  • אי אפשר להוסיף יותר משלושה שמות DNS כערכי SAN מותאמים אישית לאישור השרת של מופע Cloud SQL.
  • האורך המקסימלי של שם DNS שאפשר להוסיף לאישור כערך SAN מותאם אישית למופע הוא 253 תווים.
  • שמות ה-DNS שמוסיפים לאישור של מופע לא יכולים להכיל תווים כלליים (*) או נקודות בסוף. לדוגמה, אסור להשתמש ב-test.example.com..
  • שמות ה-DNS צריכים להיות תקינים, כפי שמצוין ב-RFC 1034.
  • אפשר לציין ערכי SAN מותאמים אישית רק עבור מופעי CUSTOMER_MANAGED_CAS_CA.

המאמרים הבאים