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

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

סקירה כללית

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

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

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

תהליך עבודה

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

  1. יוצרים מכונה שמוגדרת עם רשות אישורים בניהול הלקוח.
  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 שרוצים ליצור.
  • ‫PROJECT_ID במזהה הפרויקט שבו אתם מתכננים ליצור את המכונות של Cloud SQL.
  • ‫PROJECT_ID_CAS במזהה הפרויקט שבו יצרתם את CA_POOL_ID. הפרויקט הזה יכול להיות זהה לפרויקט שבו רוצים ליצור את המכונה של Cloud SQL, או להיות פרויקט אחר.
  • ‫REGION באזור שבו יצרתם את מאגר ה-CA. אתם צריכים ליצור את המכונה באותו אזור שבו נמצא מאגר ה-CA.
  • ‫CA_POOL_ID במזהה של מאגר ה-CA שיצרתם.
  • 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             = "sqlserver-instance"
  region           = "asia-northeast1"
  database_version = "SQLSERVER_2022_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"
  settings {
    tier = "db-custom-2-7680"
    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/sqlserver/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             = "sqlserver-instance"
  region           = "asia-northeast1"
  database_version = "SQLSERVER_2022_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"
  settings {
    tier = "db-custom-2-7680"
    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/sqlserver/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 ו-Cloud SQL Auth Proxy משתמשים ברשומת 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 ל-SQL Server, מגדירים את שם ה-DNS בהתאמה אישית כשם המארח. לאחר מכן, מפעילים את אימות הזהות של השרת על ידי ציון הדגל -N עבור sqlcmd או על ידי בחירה באפשרות Encrypt Connection/Encryption של SSMS.

למנהלי התקנים אחרים של SQL Server יש דגלים או הגדרות דומים.

אם אתם מתחברים למכונה פרטית של 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 מכונות.

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