שימוש במפתחות הצפנה בניהול הלקוח (CMEK)

מפתחות הצפנה בניהול הלקוח (CMEK) מאפשרים להגן על נתונים במנוחה ב-Cloud SQL באמצעות מפתחות קריפטוגרפיים משלכם ב-Cloud Key Management Service. שליטה במפתחות שלכם עוזרת לכם לעמוד בדרישות הרגולטוריות ולפקח באופן ישיר על כללי מדיניות הגישה למפתחות ועל לוחות הזמנים של הרוטציה.

אתם יכולים להגדיר חשבון שירות ומפתחות Cloud KMS, ואז ליצור מכונה של Cloud SQL שמשתמשת ב-CMEK שנוצר באופן ידני. במאמר סקירה כללית על מפתחות הצפנה בניהול הלקוח מוסבר בהרחבה על השימוש במפתחות הצפנה בניהול הלקוח ב-Cloud SQL.

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

  1. נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Install the gcloud CLI.

  5. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  8. Verify that billing is enabled for your Google Cloud project.

  9. Install the gcloud CLI.

  10. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. מוודאים שבחשבון המשתמש שלכם יש את התפקיד "אדמין ב-Cloud SQL".

    כניסה לדף IAM

  13. מפעילים את Cloud Key Management Service API, אם הוא עדיין לא מופעל.

    התפקידים שנדרשים כדי להפעיל ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    להפעלת ה-API

  14. מפעילים את Cloud SQL Admin API, אם הוא עדיין לא מופעל.

    התפקידים שנדרשים כדי להפעיל ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    להפעלת ה-API

תהליך העבודה ליצירת מכונה של Cloud SQL עם CMEK

  1. למשתמשי gcloud ו-API בלבד: יוצרים חשבון שירות לכל פרויקט שנדרשים בו מפתחות הצפנה בניהול הלקוח.
  2. יוצרים אוסף מפתחות ומפתח באותו אזור ב- Google Cloud שבו רוצים ליצור את המכונה.
  3. למשתמשי gcloud ו-API בלבד: נותנים לחשבון השירות גישה למפתח.
  4. רשמו לעצמכם את מזהה המפתח (KMS_KEY_ID), את מיקום אוסף המפתחות (GCP_REGION) ואת מזהה אוסף המפתחות (KMS_KEYRING_ID).
  5. נכנסים לפרויקט ויוצרים מכונה של Cloud SQL עם האפשרויות הבאות:
    1. אותו מיקום כמו של מפתח ההצפנה בניהול הלקוח
    2. הגדרת המפתח בניהול הלקוח
    3. מזהה מפתח ההצפנה בניהול הלקוח

עכשיו מופעל CMEK במכונה של Cloud SQL.

יצירה של חשבון שירות

צריך ליצור חשבון שירות לכל פרויקט שנדרשים בו מפתחות הצפנה בניהול הלקוח.

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

  • משתמש בחשבון שירות (roles/iam.serviceAccountUser): כולל הרשאות להצגת רשימה של חשבונות שירות, לקבלת פרטים על חשבון שירות ולהתחזות לחשבון שירות.
  • אדמין בחשבון שירות (roles/iam.serviceAccountAdmin): כולל הרשאות להצגת רשימה של חשבונות שירות ולקבלת פרטים על חשבון שירות. התפקיד כולל גם הרשאות ליצור, לעדכן ולמחוק חשבונות שירות, ולהציג או לשנות את המדיניות של Cloud SQL ל-PostgreSQL בחשבון שירות.

אפשר להשתמש רק בפקודות של ה-CLI של gcloud כדי ליצור את סוג חשבון השירות שנדרש למפתחות הצפנה בניהול הלקוח. אם אתם משתמשים במסוףGoogle Cloud , ‏Cloud SQL יוצר בשבילכם את חשבון השירות הזה באופן אוטומטי.

gcloud

gcloud beta services identity create \
--service=sqladmin.googleapis.com \
--project=PROJECT_ID

Terraform

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

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

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

כך מחילים את ההגדרות של Terraform בפרויקט ב- Google Cloud :

הכנת Cloud Shell

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

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

    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. פותחים את הפרויקט ב- Google Cloud כדי להציג את התוצאות. במסוף Google Cloud , נכנסים למשאבים בממשק המשתמש כדי לוודא שהם נוצרו או עודכנו ב-Terraform.

הפקודה הקודמת מחזירה שם של חשבון שירות. אתם משתמשים בשם של חשבון השירות הזה במהלך התהליך שמתואר בקטע מתן גישה למפתח לחשבון השירות.

יצירת מפתח

אפשר ליצור את המפתח באותו פרויקט ב- Google Cloud שבו נמצא המכונה של Cloud SQL, או בפרויקט משתמש נפרד. המיקום של אוסף המפתחות ב-Cloud KMS צריך להיות זהה לאזור שבו רוצים ליצור את המכונה של Cloud SQL. מפתח של מספר אזורים או של אזור גלובלי לא יעבוד. אם האזורים לא תואמים, הבקשה ליצירת מכונה של Cloud SQL תיכשל.

כדי ליצור מפתח Cloud KMS:

המסוף

  1. נכנסים לדף Key management במסוף Google Cloud .

    כניסה לדף "ניהול מפתחות"

  2. לוחצים על Create key ring.
  3. מוסיפים Key ring name. חשוב לזכור את השם הזה, כי תצטרכו אותו כשתתנו לחשבון השירות גישה למפתח.
  4. בוחרים מיקום לאוסף המפתחות.
  5. לוחצים על יצירה. נפתח הדף Create key.
  6. מוסיפים שם מפתח.
  7. בשדה Purpose, בוחרים באפשרות Symmetric encrypt/decrypt.
  8. בוחרים תקופת רוטציה ותאריך התחלה.
  9. לוחצים על יצירה.
  10. בטבלה Keys, לוחצים על סמל האפשרויות הנוספות (3 נקודות) בעמודה האחרונה ובוחרים באפשרות Copy Resource ID או רושמים את המזהה. זהו KMS_KEY_ID. צריך את KMS_KEY_ID כשנותנים למפתח גישה לחשבון השירות.

gcloud

  1. יוצרים אוסף מפתחות חדש.
    ‫
    gcloud kms keyrings create KMS_KEYRING_ID \
    --location=GCP_REGION
      
    רשמו את השם הזה כי תצטרכו אותו כשתתנו למפתח גישה לחשבון השירות.
  2. יוצרים מפתח באוסף המפתחות.
    ‫
    gcloud kms keys create KMS_KEY_ID \
    --location=GCP_REGION \
    --keyring=KMS_KEYRING_ID \
    --purpose=encryption
      
    רשמו את השם הזה כי תצטרכו אותו כשתתנו למפתח גישה לחשבון השירות.

Terraform

כדי ליצור אוסף מפתחות, משתמשים במשאב של Terraform.

resource "google_kms_key_ring" "keyring" {
  provider = google-beta
  name     = "keyring-name"
  location = "us-central1"
}

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

resource "google_kms_crypto_key" "key" {
  provider = google-beta
  name     = "crypto-key-name"
  key_ring = google_kms_key_ring.keyring.id
  purpose  = "ENCRYPT_DECRYPT"
}

מחילים את ההגדרות של Terraform:

terraform apply

מתן גישה למפתח לחשבונות שירות

כשיוצרים מכונה של Cloud SQL עם CMEK, צריך לתת לחשבון השירות של הפרויקט שיכיל את המכונה גישה למפתח. אם משתמשים ב Google Cloud מסוף כדי ליצור את המכונה, לחשבונות השירות ניתנת גישה למפתח באופן אוטומטי כשיוצרים את המכונה. אם אתם משתמשים ב-CLI של gcloud או ב-API כדי ליצור את המכונה, או אם אתם נתקלים בשגיאות שקשורות להרשאות אחרי שאתם יוצרים את המכונה, בצעו את הפעולות הבאות.

כדי לתת לחשבון השירות גישה:

המסוף

  1. נכנסים לדף Key management במסוף Google Cloud .

    כניסה לדף "ניהול מפתחות"

  2. בוחרים את הפרויקט שבו נמצא המפתח.
  3. לוחצים על השם של אוסף המפתחות.
  4. לוחצים על שם המפתח.
  5. לוחצים על הכרטיסייה Permissions.
  6. כדי לפתוח את החלונית, לוחצים על מתן גישה.
  7. מזינים את חשבון השירות כחשבון המשתמש ובוחרים את התפקיד Cloud KMS CryptoKey Encrypter/Decrypter.
  8. לוחצים על Save.

אפשר גם להקצות את התפקיד בדף IAM של הפרויקט.

כניסה לדף IAM של הפרויקט

gcloud

gcloud kms keys add-iam-policy-binding KMS_KEY_ID \
--location=GCP_REGION \
--keyring=KMS_KEYRING_ID \
--member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloud-sql.iam.gserviceaccount.com \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter

Terraform

כדי לתת גישה למפתח, משתמשים במשאב של Terraform.

resource "google_kms_crypto_key_iam_binding" "crypto_key" {
  provider      = google-beta
  crypto_key_id = google_kms_crypto_key.key.id
  role          = "roles/cloudkms.cryptoKeyEncrypterDecrypter"

  members = [
    "serviceAccount:${google_project_service_identity.gcp_sa_cloud_sql.email}",
  ]
}

מחילים את ההגדרות של Terraform:

terraform apply

יצירת מכונה של Cloud SQL עם CMEK

כדי ליצור מכונה עם מפתחות הצפנה בניהול הלקוח:

המסוף

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

    כניסה לדף Cloud SQL Instances

  2. לוחצים על Create instance.
  3. בוחרים את המנוע של מסד הנתונים.
  4. נותנים שם למכונה. אל תכללו מידע רגיש או פרטים אישיים מזהים בשם המכונה, כי הוא גלוי כלפי חוץ. אין צורך לכלול את מזהה הפרויקט בשם המכונה. הוא נוצר באופן אוטומטי במקומות המתאימים (לדוגמה, בקובצי היומן).
  5. מזינים את הסיסמה של המשתמש 'root'@'%'.
  6. מגדירים את האזור של המכונה. מקמו את המכונה באותו אזור שבו נמצאים המשאבים שניגשים אליה. ברוב המקרים לא צריך לציין אזור.
  7. בקטע Configuration options, בוחרים את כל אפשרויות ההגדרה עד שמגיעים ל-Machine type and storage.
  8. מרחיבים את הקטע Machine type and storage.
  9. בקטע Encryption, בוחרים באפשרות Customer-managed key.
  10. בוחרים את מפתח ה-KMS מהתפריט הנפתח או מזינים ידנית את KMS_KEY_ID. יוצגו רק מפתחות KMS באותו פרויקט ובאותו אזור של המכונה. המערכת משתמשת בגרסת המפתח הראשית של המפתח, כך שאם גרסת המפתח מצוינת בשם המפתח, היא נחתכת. כדי לבחור מפתח KMS ששייך לפרויקט אחר אבל נמצא באותו אזור, בוחרים באפשרות Don't see your key?‎ Enter key resource ID והזינו את הערך של KMS_KEY_ID ששמרתם קודם.
  11. אם לחשבון השירות אין הרשאה להצפין או לפענח באמצעות המפתח שנבחר, תוצג הודעה. במקרה כזה, לוחצים על Grant כדי להקצות לחשבון השירות את תפקיד ה-IAM‏ roles/cloudkms.cryptoKeyEncrypterDecrypter> במפתח ה-KMS שנבחר.
  12. אחרי שבוחרים את אפשרויות ההגדרה, לוחצים על יצירה.
  13. תופיע הודעה שמסבירה את ההשלכות של שימוש במפתח הצפנה בניהול הלקוח. צריך לקרוא ולאשר אותה כדי להמשיך ביצירת המכונה.

gcloud

gcloud sql instances create INSTANCE_NAME \
--project=PROJECT_ID \
--disk-encryption-key=KMS_KEY_ID \
--database-version=VERSION \
--cpu=NUMBER_CPUS \
--memory=MEMORY_SIZE \
--region=REGION \
--root-password=INSERT-PASSWORD-HERE

Terraform

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

resource "google_sql_database_instance" "postgres_instance_with_cmek" {
  name                = "postgres-instance-cmek"
  provider            = google-beta
  region              = "us-central1"
  database_version    = "POSTGRES_14"
  encryption_key_name = google_kms_crypto_key.key.id
  settings {
    tier = "db-custom-2-7680"
  }
  # 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
}

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

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

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

    terraform destroy

REST v1

כדי ליצור מכונה עם מפתחות הצפנה בניהול הלקוח, מעבירים את diskEncryptionConfiguration לפקודה.

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

  • ‫project-id: מזהה הפרויקט
  • ‫instance-id: מזהה המכונה
  • ‫region: האזור
  • ‫database-version: מחרוזת גרסת Emum (לדוגמה, POSTGRES_12)
  • ‫kms-resource-id: המזהה שקיבלתם כשיצרתם את המפתח.

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

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

תוכן בקשת JSON:

{
  "name":"instance-id",
  "region":"region",
  "databaseVersion": "database-version",
  "diskEncryptionConfiguration" :
  {
      "kmsKeyName" : "kms-resource-id"
  },
  "settings":
  {
     "backupConfiguration":
      {
         "pointInTimeRecoveryEnabled": true,
         "enabled":true
      }
   }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
בדוגמה הזו נעשה שימוש ב-instances:insert.

REST v1beta4

כדי ליצור מכונה עם מפתחות הצפנה בניהול הלקוח, מעבירים את diskEncryptionConfiguration לפקודה.

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

  • ‫project-id: מזהה הפרויקט
  • ‫instance-id: מזהה המכונה
  • ‫region: האזור
  • ‫database-version: מחרוזת גרסת Emum (לדוגמה, POSTGRES_12)
  • ‫kms-resource-id: המזהה שקיבלתם כשיצרתם את המפתח.

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

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

תוכן בקשת JSON:

{
  "name":"instance-id",
  "region":"region",
  "databaseVersion": "database-version",
  "diskEncryptionConfiguration" :
  {
      "kmsKeyName" : "kms-resource-id"
  },
  "settings":
  {
     "backupConfiguration":
      {
         "pointInTimeRecoveryEnabled": true,
         "enabled":true
      }
   }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
בדוגמה הזו נעשה שימוש ב-instances:insert.

יצירת גיבוי למכונה שמופעל בה CMEK

כשיוצרים גיבוי של מכונה ב-Cloud SQL, הגיבוי מוצפן באמצעות אותה גרסה של המפתח הראשי כמו המפתח בניהול הלקוח של המכונה הראשית. אם המכונה משתמשת ב-CMEK שנוצר על ידי Cloud KMS Autokey, הגיבוי עדיין משתמש באותו מפתח כמו המכונה הראשית. Autokey לא יוצר מפתחות לגיבויים.

יצירה וניהול של גיבויים אוטומטיים ועל פי דרישה

בטופס Create a backup תופיע ההודעה: "Your backup will be encrypted with the primary version of this instance's customer-managed encryption key. אם מישהו ישמיד או ישבית את גרסת המפתח הזו, כל נתוני הגיבוי שהוצפנו באמצעותה יאבדו באופן סופי. אפשר לבדוק את הגרסה הראשית של המפתח ב-Cloud KMS".

בדף הגיבויים, ברשימת הגיבויים שמופעלים באמצעות מפתחות הצפנה בניהול הלקוח יש שתי עמודות נוספות. עמודה אחת שמראה שהגיבוי מיועד למכונה שתומכת ב-CMEK, ועמודה שמציגה את גרסת המפתח ששימשה להצפנת הגיבוי.

יצירת רפליקה למכונה שמופעל בה CMEK

כשיוצרים רפליקה לקריאה בלבד של מכונה ב-Cloud SQL באותו אזור, היא מקבלת בירושה את אותו מפתח הצפנה בניהול הלקוח כמו מכונת ההורה. אם יוצרים עותק לקריאה בלבד באזור אחר, מקבלים רשימה חדשה של מפתחות הצפנה בניהול הלקוח שאפשר לבחור מתוכה. לכל אזור יש קבוצת מפתחות משלו.

יצירת רפליקות לקריאה בלבד

בדף Create read replica מופיעים הפרטים הבאים:

  1. בעמודה Encryption מופיע הערך customer-managed.
  2. מפתח ההצפנה של הרפליקה מוצג.
  3. מוצגת ההודעה "Your replica will be encrypted with the primary instance's customer-managed key. אם מישהו יהרוס את המפתח הזה, כל הנתונים שהוצפנו באמצעותו יאבדו לתמיד".

לרפליקה באזור אחר, תופיע ההודעה הבאה:

"הרפליקה באזור אחר תוצפן באמצעות המפתח שבחרתם בניהול הלקוח. אם מישהו יהרוס את המפתח הזה, כל הנתונים שהוצפנו באמצעותו יאבדו לתמיד".

יצירת שיבוט של מכונה שמופעל בה CMEK

כשיוצרים שכפול של מכונה ב-Cloud SQL, הוא מקבל את אותו מפתח הצפנה בניהול הלקוח ששימש להצפנת מכונת המקור.

שיבוט מכונות

בדף Create clone מופיע המידע הבא:

  1. בעמודה Encryption מופיע הערך customer-managed.
  2. מפתח ההצפנה של השכפול מוצג.
  3. מופיעה ההודעה "העותק המשוכפל יוצפן באמצעות המפתח בניהול הלקוח של המכונה המקורית. אם מישהו יהרוס את המפתח הזה, כל הנתונים שהוצפנו באמצעותו יאבדו לתמיד".

הצגת פרטי המפתח של מכונה שמופעל בה CMEK

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

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

    כניסה לדף Cloud SQL Instances

  2. ברשימת המכונות, גוללים שמאלה עד שרואים את העמודה Encryption. בעמודה הזו מופיעים הערכים Google-managed ו-Customer-managed.
  3. לוחצים על שם המכונה כדי לפתוח את הדף Overview שלה. מפתח ההצפנה בניהול הלקוח מופיע בחלונית Configuration.

הצפנה מחדש של מכונה או רפליקה קיימת עם CMEK

אתם יכולים להצפין מחדש את המכונות והרפליקות הקיימות של Cloud SQL באמצעות הגרסה האחרונה של המפתח הראשי. כשמצפינים מחדש מכונות שמשתמשות ב-Persistent Disk לאחסון, ההצפנה מחדש מתבצעת ללא זמן השבתה.

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

קבלת הגרסה החדשה של המפתח הראשי

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

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

הצפנה מחדש של מכונה שמופעל בה CMEK

בסיום רוטציית המפתחות, צריך להצפין מחדש את המכונה או הרפליקה הקיימות שמופעל בהן CMEK. הצפנה מחדש דורשת זמן השבתה רק במכונות שמשתמשות באפשרות האחסון Google Cloud Hyperdisk Balanced.

המסוף

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

    כניסה לדף Cloud SQL Instances

  2. כדי לפתוח את הדף Overview של מכונה, לוחצים על שם המכונה.
  3. בקטע Configuration, לוחצים על Re-encrypt instance.
  4. בתיבת הדו-שיח שמופיעה, לוחצים על Re-encrypt כדי לאשר את הבחירה.

gcloud

כדי להצפין מחדש את המכונה או הרפליקה, מריצים את הפקודה הבאה:

gcloud sql instances reencrypt INSTANCE_NAME
מחליפים את INSTANCE_NAME בשם המכונה או הרפליקה שמצפינים מחדש.

REST v1

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

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

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

  • ‫PROJECT_ID: מזהה הפרויקט
  • ‫INSTANCE_ID: מזהה המכונה

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

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

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2023-06-28T21:19:09.503Z",
  "operationType": "REENCRYPT",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

REST v1beta4

כדי להצפין מחדש את המכונה או הרפליקה באמצעות המפתח החדש, מריצים את הפקודה הבאה:
    POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/reencrypt

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

  • ‫PROJECT_ID: מזהה הפרויקט
  • ‫INSTANCE_ID: מזהה המכונה

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

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

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2023-06-28T21:22:13.663Z",
  "operationType": "REENCRYPT",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

גיבויים מוצפנים אוטומטיים

כשמצפינים מחדש מכונה ראשית שמשתמשת באפשרות האחסון Google Cloud Hyperdisk Balanced, ‏ Cloud SQL יוצר באופן אוטומטי גיבוי לפי דרישה שנקרא "גיבוי הצפנה מחדש". לא נוצרים גיבויים מוצפנים מחדש למכונות שמשתמשות ב-Persistent Disk לאחסון.

ברשימת הגיבויים של המכונה של Cloud SQL, הגיבוי של ההצפנה מחדש מופיע כסוג on-demand ומתויג בתווית backup created automatically for data before CMEK re-encryption.

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

מגבלות על הצפנה מחדש

כשמצפינים מחדש מכונה, חשוב לשים לב למגבלות הבאות:

  • אי אפשר לבצע פעולות אדמין אחרות במכונה בזמן שפעולת ההצפנה מחדש מתבצעת.
  • במכונות שמשתמשות באפשרות האחסון Google Cloud Hyperdisk Balanced, פעולת ההצפנה מחדש גורמת לזמן השבתה שתלוי בגודל המכונה או הרפליקה.
  • הרפליקות של המכונה לא מוצפנות מחדש כשהמכונה מוצפנת מחדש. צריך להצפין מחדש כל רפליקה בנפרד.
  • כשמצפינים מחדש את המכונה, הגיבויים לא מוצפנים מחדש באופן אוטומטי באמצעות גרסת המפתח החדשה. כדי לשחזר את הגיבוי או את המערכת מנקודה מסוימת בזמן (PITR) למועד שאחרי ביצוע הגיבוי, צריך לשמור את גרסת המפתח של Cloud KMS שבאמצעותה הגיבוי הוצפן.
  • גיבויים שנוצרו אחרי רוטציה של מפתח Cloud KMS שבאמצעותו המכונה מוצפנת, ישתמשו בגרסת המפתח הראשי של המפתח הזה באופן אוטומטי, גם אם המכונה לא מוצפנת באמצעות גרסת המפתח הזו.

כדי לפתור בעיות, אפשר לעיין בטבלה לפתרון בעיות בהצפנה מחדש.

גיבויים משופרים

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

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

שימוש ב-Cloud External Key Manager ‏ (Cloud EKM)

כדי להגן על הנתונים במכונות של Cloud SQL, אתם יכולים להשתמש במפתחות שמנוהלים בשותף חיצוני נתמך לניהול מפתחות. מידע נוסף זמין במאמר Cloud External Key Manager, כולל בקטע שיקולים.

כשאתם מוכנים ליצור מפתח Cloud EKM, תוכלו להיעזר במאמר ניהול מפתחות Cloud EKM. אחרי שיוצרים מפתח, צריך לספק את שם המפתח כשיוצרים מכונה של Cloud SQL.

אתם יכולים להשתמש ב-Key Access Justifications כחלק מ-Cloud EKM. התכונה "הצדקות גישה למפתחות" מאפשרת לכם לראות את הסיבה לכל בקשה של Cloud EKM. בנוסף, אתם יכולים לאשר או לדחות בקשה באופן אוטומטי על סמך ההצדקה שסופקה. למידע נוסף, קראו את הסקירה הכללית על הצדקות לבקשות גישה למפתחות.

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

ל-Google אין שליטה על הזמינות של המפתחות במערכת של שותף חיצוני לניהול מפתחות.

השבתה והפעלה מחדש של גרסאות מפתחות

מומלץ לקרוא את הנושאים הבאים:

פתרון בעיות

בקטע הזה מתוארות פעולות שאפשר לנסות כשמקבלים הודעת שגיאה בזמן ההגדרה או השימוש במכונות שמופעל בהן CMEK.

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

טבלת פתרון בעיות במפתחות הצפנה בניהול הלקוח

אם מופיעה השגיאה הזו… יכול להיות שהבעיה היא... אפשר לנסות את זה…
לא נמצא חשבון שירות לכל מוצר ולכל פרויקט השם של חשבון השירות שגוי. מוודאים שיצרתם חשבון שירות לפרויקט המשתמש הנכון.

כניסה לדף Service Accounts.

אי אפשר לתת גישה לחשבון השירות לחשבון המשתמש אין הרשאה לתת גישה לגרסת המפתח הזו. מוסיפים את התפקיד Organization Administrator לחשבון המשתמש או לחשבון השירות.

כניסה לדף IAM ACCOUNTS

גרסת המפתח של Cloud KMS הושמדה גרסת המפתח מושמדת. אם גרסת המפתח מושמדת, אי אפשר להשתמש בה כדי להצפין או לפענח נתונים.
גרסת המפתח של Cloud KMS מושבתת גרסת המפתח מושבתת. מפעילים מחדש את גרסת המפתח של Cloud KMS.

כניסה לדף CRYPTO KEYS

אין מספיק הרשאות כדי להשתמש במפתח Cloud KMS התפקיד cloudkms.cryptoKeyEncrypterDecrypter חסר במשתמש או בחשבון השירות שמשמשים להפעלת פעולות במכונות Cloud SQL, או שגרסת המפתח של Cloud KMS לא קיימת. בפרויקט Google Cloud שמארח את המפתח, מוסיפים את התפקיד cloudkms.cryptoKeyEncrypterDecrypter לחשבון המשתמש או לחשבון השירות.

כניסה לדף IAM ACCOUNTS


אם התפקיד כבר הוקצה לחשבון שלכם, קראו את המאמר יצירת מפתח כדי ללמוד איך ליצור גרסת מפתח חדשה. ראו הערה.
מפתח Cloud KMS לא נמצא גרסת המפתח לא קיימת. יוצרים גרסת מפתח חדשה. איך יוצרים מפתח? ראו הערה.
אין גישה למפתח EKM אין גישה למפתח של External Key Manager ‏ (EKM) במשך כמה שעות. גם אחרי כמה ניסיונות חוזרים, עדיין אי אפשר לגשת למפתח ה-EKM.

אם המכונה מושעית כי המפתח לא זמין, אבל המפתח מוצג כפעיל וזמין במסוף Google Cloud , כנראה שהבעיה היא בחיבור או באימות של ה-EKM.
בודקים את סטטוס החיבור של ה-EKM ופותרים את הבעיה מול ספק ה-EKM.
  • מוודאים שיומני הביקורת של Cloud KMS Data Access מופעלים בפרויקט.
  • כדי לראות את השגיאה הספציפית שהוחזרה על ידי ספק ה-EKM, צריך לחפש ביומני הביקורת של Cloud פעולות Decrypt שנכשלו.
  • בודקים את היומנים הפנימיים של מנהל המפתחות החיצוני (לדוגמה, יומני המכשיר של Thales) כדי לראות אם יש ניתוקים או כשלים באימות של אסימון האינטרנט בפורמט JSON‏ (JWT). בודקים את כללי חומת האש של הרשת כדי לוודא שה-EKM יכול להתחבר לאינטרנט ולהוריד את אישורי האימות הציבוריים של Google.

כניסה לדף CRYPTO KEYS

מופע Cloud SQL וגרסת מפתח Cloud KMS נמצאים באזורים שונים גרסת המפתח של Cloud KMS והמכונה של Cloud SQL צריכות להיות באותו אזור. היא לא פועלת אם גרסת המפתח של Cloud KMS נמצאת באזור גלובלי או במספר אזורים. יוצרים גרסת מפתח באותו אזור שבו רוצים ליצור מכונות. איך יוצרים מפתח? ראו הערה.
גרסת המפתח של Cloud KMS שוחזרה, אבל המכונה עדיין מושעית כמה דקות לאחר מכן. תהליך האימות הפנימי של המכונה יכול להימשך עד 10 דקות, ואז המכונה תהיה זמינה שוב. מחכים 10 דקות עד שהמכונה תהיה זמינה.
גרסת המפתח של Cloud KMS שוחזרה, אבל המכונה עדיין מושעית אחרי יותר מ-10 דקות. גרסת המפתח מושבתת או שהיא לא מעניקה את ההרשאות המתאימות. מפעילים מחדש את גרסת המפתח ומקצים את התפקיד cloudkms.cryptoKeyEncrypterDecrypter למשתמש או לחשבון השירות בפרויקט Google Cloud שמארח את המפתח.

טבלה לפתרון בעיות בהצפנה מחדש

אם מופיעה השגיאה הזו… יכול להיות שהבעיה היא... אפשר לנסות את זה…
ההצפנה מחדש של משאב ה-CMEK נכשלה כי אין גישה למפתח Cloud KMS. חשוב לוודא שגרסת המפתח הראשי מופעלת ושההרשאה ניתנה כמו שצריך. גרסת המפתח מושבתת או שהיא לא מעניקה את ההרשאות המתאימות.

מפעילים מחדש את גרסת המפתח של Cloud KMS:

לדף CRYPTO KEYS

בפרויקט ב- Google Cloud שמארח את המפתח, מוודאים שהתפקיד cloudkms.cryptoKeyEncrypterDecrypter הוקצה למשתמש או לחשבון השירות:

כניסה לדף IAM ACCOUNTS

ההצפנה מחדש של משאב CMEK נכשלה בגלל שגיאה פנימית בשרת. אפשר לנסות שוב מאוחר יותר יש שגיאת שרת פנימית. מנסים להצפין מחדש. מידע נוסף זמין במאמר הצפנה מחדש של מכונה או רפליקה קיימת שמופעל בהן CMEK.

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