הגדרת אישורי SSL/TLS

בדף הזה מוסבר איך לאכוף הצפנה באמצעות SSL/TLS במופע כדי לוודא שכל החיבורים מוצפנים. במאמר איך Cloud SQL משתמש באישורי SSL/TLS בניהול עצמי מוסבר גם איך להתחבר למכונות Cloud SQL בצורה מאובטחת.

סקירה כללית

כשיוצרים מכונה, Cloud SQL יוצר באופן אוטומטי אישור שרת. מומלץ לאכוף שכל החיבורים ישתמשו ב-SSL/TLS.

כדי לאמת את זהות הלקוח/השרת באמצעות אישורי SSL/TLS, צריך ליצור אישור לקוח ולהוריד את האישורים למחשב המארח של לקוח MySQL.

אם אוכפים SSL עבור מופע, צריך להפעיל מחדש את המופע. יכול להיות שתידרש הפעלה מחדש גם אחרי שינוי של אישורי SSL או TLS. במקרה שנדרשת הפעלה מחדש, Cloud SQL מפעיל מחדש את המכונה באופן אוטומטי. הפעלה מחדש של מופע עלולה לגרום להשבתה.

אכיפת הצפנת SSL/TLS

אפשר להשתמש בהגדרה מצב SSL כדי לאכוף הצפנת SSL בדרכים הבאות:

  • לאפשר חיבורים מסוג SSL/TLS וגם חיבורים שלא מסוג SSL/TLS. אי אפשר לאמת את אישור הלקוח לחיבורי SSL/TLS. (זוהי ברירת המחדל)

  • אפשר לאפשר רק חיבורים מוצפנים באמצעות SSL/TLS. אישור הלקוח לא מאומת לחיבורי SSL.

  • אפשר לאשר רק חיבורים שמוצפנים באמצעות SSL/TLS ועם אישורי לקוח תקינים.

אם בוחרים באפשרות Allow non-SSL/non-TLS and SSL/TLS connections (אישור חיבורים ללא SSL/TLS וחיבורים עם SSL/TLS) עבור מופע Cloud SQL, המערכת מקבלת חיבורים עם SSL/TLS וגם חיבורים לא מוצפנים ולא מאובטחים. אם לא נדרש SSL/TLS לכל החיבורים, עדיין מותרים חיבורים לא מוצפנים. לכן, אם אתם ניגשים למופע באמצעות כתובת IP ציבורית, מומלץ מאוד לאכוף SSL לכל החיבורים.

אפשר להתחבר ישירות למכונות באמצעות אישורי SSL/TLS, או להתחבר באמצעות שרת proxy ל-Cloud SQL Auth או Cloud SQL Connectors. אם מתחברים באמצעות שרת proxy ל-Cloud SQL Auth או Cloud SQL Connectors, החיבורים מוצפנים אוטומטית באמצעות SSL/TLS. עם Cloud SQL Auth Proxy ו-Cloud SQL Connectors, הזהויות של הלקוח והשרת מאומתות באופן אוטומטי, ללא קשר להגדרת מצב ה-SSL.

כדי להפעיל את הדרישה ל-SSL/TLS:

המסוף

  1. נכנסים לדף Cloud SQL Instances במסוף Cloud de Confiance .

    כניסה לדף Cloud SQL Instances

  2. כדי לפתוח את הדף סקירה כללית של מכונה, לוחצים על שם המכונה.
  3. בתפריט הניווט של SQL, לוחצים על Connections (קישורים).
  4. בוחרים בכרטיסייה אבטחה.
  5. בוחרים אחת מהאפשרויות הבאות:
    • התרת תנועה ברשת לא מוצפנת (לא מומלץ)
    • מתן הרשאה לחיבורי SSL בלבד. האפשרות הזו מאפשרת רק חיבורים באמצעות הצפנת SSL/TLS. האישורים לא מאומתים.
    • דרישת אישורי לקוח מהימנים האפשרות הזו מאפשרת רק חיבורים מלקוחות שמשתמשים באישור לקוח תקף ומוצפנים באמצעות SSL.

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 ועם אישורי לקוח תקינים.
  • מידע נוסף מופיע במאמר בנושא הגדרות של Cloud SQL ל-MySQL.

Terraform

כדי לאכוף הצפנת SSL/TLS, משתמשים במשאב של Terraform:

resource "google_sql_database_instance" "mysql_instance" {
  name             = "mysql-instance"
  region           = "asia-northeast1"
  database_version = "MYSQL_8_0"
  settings {
    tier = "db-f1-micro"
    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 בפרויקט ב- Cloud de Confiance , מבצעים את השלבים בקטעים הבאים.

הכנת Cloud Shell

  1. מפעילים את Cloud Shell.
  2. מגדירים את פרויקט ברירת המחדל שבו רוצים להחיל את ההגדרות של Terraform. Cloud de Confiance

    תצטרכו להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ותוכלו לעשות זאת בכל ספרייה.

    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

    אופציונלי: תוכלו לכלול את האפשרות -upgrade, כדי להשתמש בגרסה העדכנית ביותר של הספק של Google:

    terraform init -upgrade

החלה של השינויים

  1. בודקים את ההגדרות ומוודאים שהמשאבים שמערכת Terraform תיצור או תעדכן תואמים לציפיות שלכם:
    terraform plan

    מתקנים את ההגדרות לפי הצורך.

  2. מריצים את הפקודה הבאה ומזינים yes בהודעה שמופיעה, כדי להחיל את הגדרות Terraform:
    terraform apply

    ממתינים עד שב-Terraform תוצג ההודעה "Apply complete!‎".

  3. פותחים את Cloud de Confiance הפרויקט כדי לראות את התוצאות. במסוף Cloud de Confiance , נכנסים למשאבים בממשק המשתמש כדי לוודא שהם נוצרו או עודכנו ב-Terraform.

מחיקת השינויים

כדי למחוק את השינויים:

  1. כדי להשבית את ההגנה מפני מחיקה, בקובץ התצורה של Terraform מגדירים את הארגומנט deletion_protection לערך false.
    deletion_protection =  "false"
  2. מריצים את הפקודה הבאה ומזינים yes בהודעה שמופיעה, כדי להחיל את הגדרות Terraform המעודכנות:
    terraform apply
  1. כדי להסיר משאבים שהוחלו בעבר על הגדרות Terraform, מריצים את הפקודה הבאה ומזינים yes בהודעה שמופיעה:

    terraform destroy

REST v1

  1. לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט
    • SSL_ENFORCEMENT_MODE: מבצעים את אחת מהאפשרויות הבאות:
      • ALLOW_UNENCRYPTED_AND_ENCRYPTED: מאפשר חיבורים ללא SSL/TLS וחיבורים עם SSL/TLS. בחיבורי SSL, אישור הלקוח לא מאומת. זה ערך ברירת המחדל.
      • ENCRYPTED_ONLY: מאפשר רק חיבורים מוצפנים באמצעות SSL/TLS.
      • TRUSTED_CLIENT_CERTIFICATE_REQUIRED: מאפשר רק חיבורים מוצפנים באמצעות SSL/TLS עם אישורי לקוח תקינים.
    • INSTANCE_ID: מזהה המכונה

    ה-method של ה-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: מזהה הפרויקט
    • SSL_ENFORCEMENT_MODE: מבצעים את אחת מהאפשרויות הבאות:
      • ALLOW_UNENCRYPTED_AND_ENCRYPTED: מאפשר חיבורים ללא SSL/TLS וחיבורים עם SSL/TLS. בחיבורי SSL, אישור הלקוח לא מאומת. זה ערך ברירת המחדל.
      • ENCRYPTED_ONLY: מאפשר רק חיבורים מוצפנים באמצעות SSL/TLS.
      • TRUSTED_CLIENT_CERTIFICATE_REQUIRED: מאפשר רק חיבורים מוצפנים באמצעות SSL/TLS עם אישורי לקוח תקינים.
    • INSTANCE_ID: מזהה המכונה

    ה-method של ה-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 של השרת במופע שלכם, תוקף אישור השרת הוא שנה אחת*. אחרי תאריך התפוגה, אישור השרת כבר לא תקף, והלקוחות לא יכולים יותר ליצור חיבור מאובטח למופע באמצעות האישור הזה. אם לקוח מוגדר לאמת את הרשות שמנפיקה את האישורים (CA) או לאמת את שם המארח באישור השרת, החיבורים של הלקוח הזה למופעי Cloud SQL עם אישורי שרת שתוקפם פג ייכשלו. כדי למנוע שיבושים בחיבורים של הלקוחות, צריך להחליף את אישור השרת לפני שהוא יפוג. אתם מקבלים מדי פעם הודעה על כך שהתוקף של אישור השרת עומד לפוג. ההתראות נשלחות במספר הימים הבא לפני תאריך התפוגה: 90,‏ 30,‏ 10,‏ 2 ו-1.

* אם בחרתם תאריך תפוגה קצר יותר לתקופת התוקף של רשות האישורים, יכול להיות שתאריך התפוגה של אישור השרת יהיה קצר משנה.

הצגת רשימה ויצירה של אישורי שרת

כדי לראות את הפרטים של אישורי השרת במסוף Cloud de Confiance , עוברים לדף Connections ולוחצים על הכרטיסייה Security.

בטבלת האישורים אפשר לראות את הפרטים הבאים:

  • סטטוס האישור:בקרוב, פעיל או קודם
    • בקרוב: האישור זמין לשימוש, אבל הוא לא פעיל. כדי להפעיל את האישור, צריך להשתמש בתהליך הרוטציה.
    • Active: האישור נמצא בשימוש.
    • קודם: האישור כבר לא בשימוש. כדי להפעיל את האישור, משתמשים בהליך החזרה לגרסה קודמת.
  • נוצר: התאריך והשעה שבהם נוצר האישור
  • בתוקף עד: התאריך והשעה שבהם יפוג תוקף האישור

לפני שתוקף האישור הפעיל יפוג, תוכלו ליצור אישור חדש באופן ידני.

המסוף

למופעים שמשתמשים באישור שרת בחתימה עצמית (CA לכל מופע):

  1. נכנסים לדף Cloud SQL Instances במסוף Cloud de Confiance .

    כניסה לדף Cloud SQL Instances

  2. כדי לפתוח את הדף סקירה כללית של מכונה, לוחצים על שם המכונה.
  3. בתפריט הניווט של SQL, לוחצים על Connections (קישורים).
  4. בוחרים בכרטיסייה אבטחה.
  5. עוברים לקטע ניהול אישורי CA של שרת.
  6. לוחצים על ניהול אישורים כדי להרחיב אותו.
  7. לוחצים על יצירת אישור CA חדש.

אישור ה-CA החדש של השרת מופיע במשבצת בקרוב. אם רוצים לעבור לאישור ה-CA החדש של השרת באופן מיידי, צריך לעדכן את הלקוחות ולהשלים את הרוטציה לפי ההוראות שבקטע רוטציה של אישור CA של השרת.

למופעים שמשתמשים באישורי שרת שהונפקו על ידי רשות אישורים משותפת:

  1. נכנסים לדף Cloud SQL Instances במסוף Cloud de Confiance .

    כניסה לדף Cloud SQL Instances

  2. כדי לפתוח את הדף סקירה כללית של מכונה, לוחצים על שם המכונה.
  3. בתפריט הניווט של SQL, לוחצים על Connections (קישורים).
  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 הקיימים.

למופעים שמשתמשים באישורי שרת שהונפקו על ידי רשות אישורים משותפת:

  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 אישורים של לקוח לכל מופע. כדי ליצור אישורי לקוח, צריך להיות לכם תפקיד IAM‏ Cloud SQL Admin.

ריכזנו כאן כמה עובדות חשובות שכדאי לדעת על אישורי לקוח:

  • אם מאבדים את המפתח הפרטי של אישור, צריך ליצור מפתח חדש. אי אפשר לשחזר את המפתח הפרטי.
  • כברירת מחדל, תאריך התפוגה של אישור הלקוח הוא 10 שנים.
  • לא תקבלו הודעה כשתאריך התפוגה של אישורי הלקוח יתקרב.
  • כדי ליצור אישור SSL, המופע של Cloud SQL צריך להיות במצב פעיל.

המסוף

  1. נכנסים לדף Cloud SQL Instances במסוף Cloud de Confiance .

    כניסה לדף Cloud SQL Instances

  2. כדי לפתוח את הדף סקירה כללית של מכונה, לוחצים על שם המכונה.
  3. בתפריט הניווט של SQL, לוחצים על Connections (קישורים).
  4. בוחרים בכרטיסייה אבטחה.
  5. לוחצים על יצירת אישור לקוח.
  6. בתיבת הדו-שיח Create a client certificate, מוסיפים שם ייחודי.
  7. לוחצים על יצירה.
  8. בקטע הראשון של תיבת הדו-שיח New SSL certificate created (נוצר אישור SSL חדש), לוחצים על Download client-key.pem (הורדת client-key.pem) כדי להוריד את המפתח הפרטי לקובץ בשם client-key.pem.
  9. בקטע השני, לוחצים על Download client-cert.pem כדי להוריד את אישור הלקוח לקובץ בשם client-cert.pem.
  10. בקטע השלישי, לוחצים על Download server-ca.pem (הורדת server-ca.pem) כדי להוריד את אישור השרת לקובץ בשם server-ca.pem.
  11. לוחצים על Close.

gcloud

  1. יוצרים אישור לקוח באמצעות הפקודה ssl client-certs create:

    gcloud sql ssl client-certs create CERT_NAME client-key.pem \
    --instance=INSTANCE_NAME
  2. מאחזרים את המפתח הציבורי של האישור שיצרתם ומעתיקים אותו לקובץ client-cert.pem באמצעות הפקודה ssl client-certs describe:

    gcloud sql ssl client-certs describe CERT_NAME \
    --instance=INSTANCE_NAME \
    --format="value(cert)" > client-cert.pem
  3. מעתיקים את אישור השרת לקובץ server-ca.pem באמצעות הפקודה instances describe:

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

Terraform

כדי ליצור אישור לקוח, משתמשים במשאב של Terraform:

resource "google_sql_ssl_cert" "mysql_client_cert" {
  common_name = "mysql_common_name"
  instance    = google_sql_database_instance.mysql_instance.name
}

REST v1

  1. יוצרים אישור SSL/‏TLS ונותנים לו שם ייחודי למופע הזה:

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • project-id: מזהה הפרויקט
    • instance-id: מזהה המכונה
    • client-cert-name: שם אישור הלקוח

    ה-method של ה-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.
  3. לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • project-id: מזהה הפרויקט
    • instance-id: מזהה המכונה
    • activation-policy: מדיניות ההפעלה היא ALWAYS או NEVER

    ה-method של ה-HTTP וכתובת ה-URL:

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

    תוכן בקשת JSON:

    {
      "settings": {
        "activationPolicy": "activation-policy"
      }
    }
    

    כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

    אתם אמורים לקבל תגובת JSON שדומה לזו:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-20T21:30:35.667Z",
      "operationType": "RESTART",
      "name": "operation-id",
      "targetId": "instance-id",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    

REST v1beta4

  1. יוצרים אישור SSL/‏TLS ונותנים לו שם ייחודי למופע הזה:

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • project-id: מזהה הפרויקט
    • instance-id: מזהה המכונה
    • client-cert-name: שם אישור הלקוח

    ה-method של ה-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.
  3. לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • project-id: מזהה הפרויקט
    • instance-id: מזהה המכונה
    • activation-policy: מדיניות ההפעלה היא ALWAYS או NEVER

    ה-method של ה-HTTP וכתובת ה-URL:

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

    תוכן בקשת JSON:

    {
      "settings": {
        "activationPolicy": "activation-policy"
      }
    }
    

    כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

    אתם אמורים לקבל תגובת JSON שדומה לזו:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-20T21:30:35.667Z",
      "operationType": "RESTART",
      "name": "operation-id",
      "targetId": "instance-id",
      "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    

בשלב הזה, יש לכם:

  • אישור שרת שנשמר בתור server-ca.pem.
  • אישור של מפתח ציבורי של לקוח שנשמר כ-client-cert.pem.
  • מפתח פרטי של לקוח שנשמר כ-client-key.pem.

האופן שבו מציינים את שלושת הפריטים האלה משתנה בהתאם לכלי שבו משתמשים כדי להתחבר. לדוגמה, כשמתחברים באמצעות לקוח MySQL, שלושת הקבצים האלה הם הערכים של אפשרויות הפקודה --ssl-ca, --ssl-cert ו---ssl-key, בהתאמה. דוגמה לחיבור באמצעות לקוח MySQL ו-SSL/TLS מופיעה במאמר בנושא חיבור באמצעות לקוח MySQL.

אימות זהות השרת

אימות זהות השרת תלוי בהגדרת היררכיית רשות האישורים (CA) של השרת במופע Cloud SQL.

במקרים שבהם נעשה שימוש ב-CA לכל מופע, אימות ה-CA מאמת גם את זהות השרת, כי לכל מופע יש CA ייחודי. במקרים שבהם נעשה שימוש ב-CA משותף, נדרש אימות של שם המארח וגם של ה-CA כדי לאמת את זהות השרת, כי אישורי CA של שרתים משותפים בין מופעים.

אם יש לכם CA לכל מופע, תוכלו לבצע אימות של זהות השרת על סמך שם DNS רק עבור מופעים שהוגדרו עם Private Service Connect. אם יש לכם CA משותף, אתם יכולים לבצע אימות של זהות השרת על סמך שם DNS לכל סוגי המופעים, כלומר Private Service Connect,‏ גישה לשירותים פרטיים ומופעים של כתובת IP ציבורית.

אם אתם משתמשים ב-CA בניהול הלקוח, אתם יכולים לאמת את שרשרת האמון של ה-CA ולבצע אימות של זהות השרת על סמך שם ה-DNS לכל סוג של מכונה שמשתמשת ב-CA בניהול הלקוח בשביל serverCAmode.

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

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

הפעלת אימות זהות השרת

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

מופעים שמשתמשים ב-CA משותף במצב CA של השרת מכילים את שם ה-DNS של המופע בשדה Subject Alternative Name (SAN) של אישור השרת. אפשר לקבל את שם ה-DNS הזה באמצעות ה-API של חיפוש המופעים, ולהשתמש בתגובה כשם מארח לאימות זהות השרת. צריך להגדיר פענוח DNS לשם ה-DNS.

כדי להפעיל אימות של זהות השרת במופע שמשתמש ב-CA משותף, מבצעים את השלבים הבאים:

  1. מאחזרים את שם ה-DNS.

    1. כדי להציג סיכום מידע על מכונת Cloud SQL, כולל שם ה-DNS של המכונה, משתמשים בפקודה gcloud sql instances describe:

      gcloud sql instances describe INSTANCE_NAME \
        --project=PROJECT_ID

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

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

      הגדרת רשת פורמט של שם DNS שם הרמה
      Private Service Connect או כתובת IP ציבורית INSTANCE_UID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog.

      לדוגמה:
      1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.
      Instance
      גישה לשירותים פרטיים INSTANCE_UID.PROJECT_DNS_LABEL.REGION_NAME.sql-psa.goog.

      לדוגמה:
      1a23b4cd5e67.1a2b345c6d27.us-central1.sql-psa.goog.
      Instance
  2. יוצרים את רשומת ה-DNS בתחום DNS. אם אתם מתחברים באופן פרטי, צרו את רשומת ה-DNS בתחום DNS פרטי ברשת הענן הווירטואלי הפרטי (VPC) המתאימה.

  3. כשמתחברים למופע Cloud SQL ל-MySQL, מגדירים את שם ה-DNS כשם המארח. לאחר מכן מפעילים את אימות זהות השרת בלקוח.

    לדוגמה, כשמשתמשים בלקוח MySQL, מציינים את הדגל --ssl-mode=VERIFY_IDENTITY. למנהלי התקנים אחרים של לקוחות MySQL יש דגלים דומים להגדרה.

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