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

בדף הזה מוסבר איך לבצע משימות שקשורות למפתחות הצפנה בניהול הלקוח (CMEK) ב-Bigtable. מידע נוסף על CMEK באופן כללי, כולל מתי ולמה כדאי להפעיל אותו, מופיע במסמכי התיעוד של Cloud KMS.

מומלץ להשתמש במסוף לכל משימות ניהול המפתחות. Google Cloud אם אתם מתכננים להשתמש ב-Google Cloud CLI, מתקינים את ה-CLI של gcloud ל-Bigtable.

הכנת מפתחות CMEK

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

  1. יצירה (או אחזור) של סוכן שירות Bigtable.
  2. יצירת מפתח CMEK
  3. הגדרת הגדרות IAM למפתח הזה.

יצירת סוכן שירות של Bigtable

לפני שיוצרים מפתח CMEK, צריך שיהיה לכם סוכן שירות של Bigtable, ש-Bigtable משתמש בו כדי לגשת למפתח.

המסוף

אי אפשר ליצור סוכן שירות במסוף Google Cloud . יכול להיות שמערכת Bigtable תקצה באופן אוטומטי סוכן שירות במהלך תהליך העבודה של יצירת מופע, כשיוצרים או בוחרים את המפתח. בנוסף, כשבוחרים מפתח בניהול הלקוח, המסוף בודק אם יש סוכן שירות. אחת מהתוצאות הבאות עשויה לקרות:

  • אם סוכן השירות קיים, תתבקשו להעניק לו את התפקיד Cloud KMS Encrypter/Decrypter.
  • אם סוכן השירות לא מוקצה באופן אוטומטי או שנתקלתם בשגיאות במהלך בחירת המפתח, אתם יכולים להשתמש בכרטיסייה gcloud כדי ליצור את הסוכן באופן ידני ולהעניק לו את ההרשאות הנדרשות.

gcloud

  1. מריצים את הפקודה gcloud services identity create כדי לראות את סוכן השירות שמשמש את Bigtable לגישה למפתח ה-CMEK בשמכם. הפקודה הזו יוצרת את חשבון השירות אם הוא לא קיים, ואז מציגה אותו.

    gcloud beta services identity create \
        --service=bigtableadmin.googleapis.com \
        --project CBT_PROJECT
    

    מחליפים את CBT_PROJECT בפרויקט שמכיל את משאבי Bigtable.

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

    Service identity created:
    service-xxx@gcp-sa-bigtable.iam.gserviceaccount.com
    

יצירת מפתח

אתם יכולים להשתמש במפתח שנוצר ישירות ב-Cloud KMS או במפתח שמנוהל באופן חיצוני וזמין באמצעות Cloud External Key Manager.

  1. ב Google Cloud פרויקט שבו רוצים לנהל את המפתחות:

    1. הפעלת Cloud KMS API.

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

      המיקום של המפתח ב-Cloud KMS חייב להיות זהה למיקום של אשכול Bigtable שבו ישתמשו במפתח. לדוגמה, אם יוצרים אוסף מפתחות ומפתח ב-us-central1 (איווה), אפשר להגן על אשכולות ב-us-central1-a, ב-us-central1-b וב-us-central1-c באמצעות מפתחות מאוסף המפתחות הזה.

הגדרת הרשאות IAM למפתח

המסוף

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

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

    כניסה לדף IAM

  2. לוחצים על הוספה.

  3. מזינים את המזהה בפורמט אימייל של סוכן השירות של Bigtable.

  4. בוחרים בתפקיד Cloud KMS CryptoKey Encrypter/Decrypter.

  5. לוחצים על Save.

gcloud

  1. מקצים את התפקיד cloudkms.cryptoKeyEncrypterDecrypter לסוכן השירות:

    gcloud kms keys add-iam-policy-binding KMS_KEY \
        --keyring KMS_KEYRING\
        --location KMS_LOCATION \
        --member serviceAccount:SERVICE_ACCOUNT_EMAIL \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KMS_PROJECT
    

    עליך לספק את הפרטים הבאים:

    • KMS_KEY: השם שהקציתם למפתח
    • KMS_KEYRING: אוסף המפתחות של KMS שמכיל את המפתח
    • KMS_LOCATION : האזור שמכיל את אוסף המפתחות
    • SERVICE_ACCOUNT_EMAIL: המזהה בפורמט אימייל של סוכן השירות שרוצים להעניק לו גישה
    • KMS_PROJECT: הפרויקט שמכיל את המפתח

יצירת מכונה עם הצפנה באמצעות CMEK

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

פועלים לפי השלבים במאמר יצירת מופע כדי ליצור מופע שמוגן באמצעות CMEK.

הצגת המפתח שבשימוש

המידע על גרסאות המפתח מגיע מהשדה encryption_info.

כדי לראות את פרטי הגרסה של מפתח CMEK בטבלה, מבצעים את השלבים הבאים:

המסוף

  1. נכנסים לדף של מופעי Bigtable במסוףGoogle Cloud .

    פתיחת רשימת המופעים

  2. לוחצים על שם המכונה שמכילה את הטבלה כדי לפתוח את הדף פרטי המכונה ולראות את רשימת האשכולות במכונה.

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

gcloud

כדי לאשר את הגדרת ה-CMEK של כל אשכול:

    gcloud bigtable clusters describe CLUSTER_ID \
        --instance INSTANCE_ID --project CBT_PROJECT

עליך לספק את הפרטים הבאים:

  • CLUSTER_ID: המזהה הקבוע של האשכול
  • INSTANCE_ID: המזהה הקבוע של המכונה
  • CBT_PROJECT: הפרויקט שמכיל את משאבי Bigtable

הפלט של הפקודה אמור להיראות כך:

    defaultStorageType: SSD
    encryptionConfig:
      kmsKeyName: projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key
    location: projects/cloud-bigtable-project/locations/us-central1-a
    name: projects/cloud-bigtable-project/instances/cmek-test-instance/clusters/my-cluster
    serveNodes: 1
    state: READY

השבתת מקש

השבתה של גרסת מפתח CMEK משעה את הגישה לכל הנתונים שמוגנים על ידי גרסת המפתח הזו. השמדה של גרסת מפתח היא הפעולה המקבילה הקבועה (אחרי 24 שעות). תמיד משביתים את כל המפתחות של מופע, ולא רק את המפתחות של אשכול אחד או כמה אשכולות.

המסוף

זו השיטה המומלצת. באמצעות מסוף Google Cloud , אפשר להשבית את כל הגרסאות של מפתח בבת אחת.

פועלים לפי ההוראות האלה לכל גרסה של מפתח.

gcloud

מומלץ להשתמש במסוף Google Cloud כדי להשבית מפתחות. אם אתם רוצים להשתמש ב-Google Cloud CLI, מריצים את הפקודות הבאות.

  1. מציגים את כל הגרסאות של מפתח ה-CMEK:

    gcloud kms keys versions list --key KMS_KEY \
        --keyring KMS_KEYRING --location KMS_LOCATION \
        --project KMS_PROJECT
    

    עליך לספק את הפרטים הבאים:

    • KMS_KEY: השם של מפתח ה-CMEK
    • KMS_KEYRING: אוסף המפתחות של KMS שמכיל את המפתח
    • KMS_LOCATION: האזור שמכיל את אוסף המפתחות
    • KMS_PROJECT: הפרויקט שמכיל את המפתח

    הפלט אמור להיראות כך:

    NAME                                  STATE
    KMS_KEY_NAME/cryptoKeyVersions/1      ENABLED
    KMS_KEY_NAME/cryptoKeyVersions/2      ENABLED
    KMS_KEY_NAME/cryptoKeyVersions/3      ENABLED
    KMS_KEY_NAME/cryptoKeyVersions/4      ENABLED
    
  2. משביתים את כל הגרסאות:

    for $KV in 1 2 3 4;
    do
    gcloud kms keys versions disable KV --key KMS_KEY \
        --keyring KMS_KEYRING --location KMS_LOCATION \
        --project KMS_PROJECT;
    done
    

    עליך לספק את הפרטים הבאים:

    • 1 2 3 4: הגרסאות שאתם משביתים
    • KMS_KEY: השם של מפתח ה-CMEK
    • KMS_KEYRING: אוסף המפתחות של KMS שמכיל את המפתח
    • KMS_LOCATION: האזור שמכיל את אוסף המפתחות
    • KMS_PROJECT: הפרויקט שמכיל את המפתח

    אם תציגו שוב את כל גרסאות המפתח, המצב שלהן ישתנה ל-DISABLED, אבל יכול להיות שיחלפו עד 4 שעות עד ש-Bigtable יפעל בהתאם לשינוי הזה במצב.

  3. [אופציונלי] כדי לאשר את הסטטוס של CMEK מושבת אחרי שממתינים 4 שעות, מריצים את הפקודה הבאה:

     gcloud bigtable instances tables describe TABLE_ID \
         --instance INSTANCE_ID --view ENCRYPTION \
         --project CBT_PROJECT
    

    עליך לספק את הפרטים הבאים:

    • TABLE_ID: המזהה הקבוע של הטבלה
    • INSTANCE_ID: המזהה הקבוע של המכונה
    • CBT_PROJECT: הפרויקט שמכיל את משאבי Bigtable

    הפלט של הפקודה אמור להיראות כך:

    clusterStates:
      CLUSTER:
        encryptionInfo:
        - encryptionStatus:
            code: 9
            details:
            - '@type': type.googleapis.com/google.rpc.PreconditionFailure
              violations:
              - subject: KMS_KEY_NAME/cryptoKeyVersions/<int>
                type: KEY_DISABLED
            message: KMS_KEY_NAME is not enabled, current state is: DISABLED.
          encryptionType: CUSTOMER_MANAGED_ENCRYPTION
          kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/<int>
    name: projects/CBT_PROJECT/instances/INSTANCE/tables/TABLE
    
  4. [אופציונלי] כדי לוודא שהאשכולות במופע מושבתים, מריצים את הפקודה הבאה:

    gcloud bigtable clusters list --instances INSTANCE_ID
        --project CBT_PROJECT
    

    עליך לספק את הפרטים הבאים:

    • INSTANCE_ID: המזהה הקבוע של המכונה
    • CBT_PROJECT: הפרויקט שמכיל את משאבי Bigtable

    הפלט של הפקודה אמור להיראות כך:

    NAME              ZONE           NODES  STORAGE    STATE
    my-cluster        us-central1-a  1      SSD        DISABLED
    my-other-cluster  us-central1-b  1      SSD        DISABLED
    

הפעלת מפתח

אם גרסת מפתח הושבתה, אפשר להפעיל אותה מחדש כדי לקבל שוב גישה למשאבי Bigtable. האפשרות הזו זמינה למשך 30 ימים מהרגע שבו הגרסה של המפתח מושבתת.

המסוף

זו השיטה המומלצת. באמצעות מסוף Google Cloud , אפשר להפעיל את כל הגרסאות של מפתח בבת אחת.

פועלים לפי ההוראות האלה לכל גרסה של מפתח.

gcloud

מומלץ להשתמש במסוף Google Cloud כדי להפעיל מפתחות. אם אתם רוצים להשתמש ב-Google Cloud CLI, מריצים את הפקודות הבאות.

  1. מעיינים ברשימת הגרסאות כדי לזהות את כל הגרסאות של המפתח:

    gcloud kms keys versions list --key KMS_KEY \
        --keyring KMS_KEYRING --location KMS_LOCATION \
        --project KMS_PROJECT
    

    עליך לספק את הפרטים הבאים:

    • KMS_KEY: השם של מפתח ה-CMEK
    • KMS_KEYRING: אוסף המפתחות של KMS שמכיל את המפתח
    • KMS_LOCATION: האזור שמכיל את אוסף המפתחות
    • KMS_PROJECT: הפרויקט שמכיל את המפתח

    הפלט של הפקודה אמור להיראות כך:

    NAME                                  STATE
    KMS_KEY_NAME/cryptoKeyVersions/1      DISABLED
    KMS_KEY_NAME/cryptoKeyVersions/2      DISABLED
    KMS_KEY_NAME/cryptoKeyVersions/3      DISABLED
    KMS_KEY_NAME/cryptoKeyVersions/4      DISABLED
    

    מריצים את הפקודה kms keys versions enable ומזינים את כל הגרסאות שמופיעות ברשימה. לפי פלט הדוגמה, הפקודה אמורה להיראות כך:

    for $KV in 1 2 3 4;
    do
    gcloud kms keys versions enable KV --key KMS_KEY \
        --keyring KMS_KEYRING --location KMS_LOCATION \
        --project KMS_PROJECT;
    done
    

    עליך לספק את הפרטים הבאים:

    • 1 2 3 4: הגרסאות שאתם משביתים
    • KMS_KEY: השם של מפתח ה-CMEK
    • KMS_KEYRING: אוסף המפתחות של KMS שמכיל את המפתח
    • KMS_LOCATION: האזור שמכיל את אוסף המפתחות
    • KMS_PROJECT: הפרויקט שמכיל את המפתח

    אם מציגים שוב את גרסאות המפתח, הסטטוס שלהן משתנה ל-ENABLED.

צפייה ביומני ביקורת של מפתח Cloud KMS

לפני שמפעילים את יומני הביקורת Data Access ב-Cloud KMS, כדאי להכיר את Cloud Audit Logs.

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

אפשר להגדיר את יומני הביקורת ולנהל אינטראקציה איתם במסוףGoogle Cloud :

  1. מוודאים שהרישום ביומן מופעל עבור Cloud KMS API בפרויקט.

  2. נכנסים אל Cloud Logging במסוף Google Cloud .

    כניסה ל-Cloud Logging

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

    resource.type="cloudkms_cryptokey"
    resource.labels.key_ring_id = KMS_KEYRING
    resource.labels.crypto_key_id = KMS_KEY
    

    עליך לספק את הפרטים הבאים:

    • KMS_KEY: השם של מפתח ה-CMEK
    • KMS_KEYRING: אוסף המפתחות של KMS שמכיל את המפתח

    ביומן מוצגות כמה רשומות ביומן כל חמש דקות לכל טבלה בכל אשכול. הרשומות ביומן ייראו בערך כמו הדוגמאות הבאות:

    Info 2021-03-20 08:02:24.869 EDT Cloudkms.googleapis.com Decrypt projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com
    audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-bigtable.iam.gserviceaccount.com"
    
    Info 2021-03-20 08:02:24.913 EDT Cloudkms.googleapis.com Encrypt projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com
    audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com"
    

פרטים על פירוש יומני הביקורת זמינים במאמר הסבר על יומני הביקורת.

צפייה בשימוש במפתח

ב-Cloud KMS אפשר לראות את המידע הבא על משאבי Bigtable שהמפתחות שלכם מגנים עליהם.

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

יש תמיכה במשאבי Bigtable הבאים:

  • bigtableadmin.googleapis.com/Backup
  • bigtableadmin.googleapis.com/Cluster
  • bigtableadmin.googleapis.com/Table
  • bigtableadmin.googleapis.com/AuthorizedView

המשאבים הבאים של Bigtable נתמכים כגרסת Preview:

  • bigtableadmin.googleapis.com/LogicalView
  • bigtableadmin.googleapis.com/MaterializedView

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

הצגת סטטוס ההצפנה של טבלה

המסוף

אי אפשר לראות את סטטוס ההצפנה של טבלה במסוףGoogle Cloud .

gcloud

כדי לראות את פרטי ה-CMEK בטבלה, מגדירים את view ל-ENCRYPTION או ל-FULL. התשובה כוללת את גרסת המפתח שנמצאת בשימוש ואת הסטטוס שלה כפי שהוא מוצג ב-Bigtable.

    gcloud alpha bigtable instances tables describe TABLE_ID \
        --instance INSTANCE_ID --view ENCRYPTION \
        --project CBT_PROJECT

עליך לספק את הפרטים הבאים:

  • TABLE_ID: המזהה הקבוע של האשכול
  • INSTANCE_ID: המזהה הקבוע של המופע שמכיל את הגיבוי
  • CBT_PROJECT: הפרויקט שמכיל את משאבי Bigtable

הפלט של הפקודה אמור להיראות כך:

    clusterStates:
      my-cluster:
        encryptionInfo:
        - encryptionStatus: {}
          encryptionType: CUSTOMER_MANAGED_ENCRYPTION
          kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/4
      my-other-cluster:
        encryptionInfo:
        - encryptionStatus: {}
          encryptionType: CUSTOMER_MANAGED_ENCRYPTION
          kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/4
      name: projects/cloud-bigtable-project/instances/cmek-test-instance/tables/my-table

צפייה בפרטי ההצפנה של גיבוי

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

המסוף

  1. נכנסים לדף של מופעי Bigtable במסוףGoogle Cloud .

    פתיחת רשימת המופעים

  2. לוחצים על שם המכונה כדי לפתוח את הדף פרטי המכונה.

  3. בחלונית הניווט הימנית, לוחצים על גיבויים.

שם המפתח וגרסת המפתח של כל גיבוי מופיעים בקטע מפתח בניהול הלקוח.

gcloud

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

    gcloud alpha bigtable backups describe BACKUP_ID \
        --instance INSTANCE_ID --cluster CLUSTER_ID \
        --project CBT_PROJECT

עליך לספק את הפרטים הבאים:

  • BACKUP_ID: המזהה שהוקצה לגיבוי
  • CLUSTER_ID: המזהה הקבוע של האשכול
  • INSTANCE_ID: המזהה הקבוע של המופע שמכיל את הגיבוי
  • CBT_PROJECT: הפרויקט שמכיל את משאבי Bigtable

הפקודה מחזירה פלט שדומה לזה: ‫kmsKeyVersion היא גרסת מפתח ה-CMEK שאליה הגיבוי משויך. הסטטוס של גרסת המפתח לא מדווח.

    encryptionInfo:
      encryptionStatus:
        code: 2
        message: Status of the associated key version is not tracked.
      encryptionType: CUSTOMER_MANAGED_ENCRYPTION
      kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/3
    endTime: '2020-09-01T00:03:26.568600Z'
    expireTime: '2020-09-02T00:03:25.436473Z'
    name: projects/cloud-bigtable-project/instances/cmek-test-instance/clusters/my-cluster/backups/my-backup
    sizeBytes: '3780'

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