שימוש במפתחות הצפנה בניהול הלקוח (CMEK)
בדף הזה מוסבר איך לבצע משימות שקשורות למפתחות הצפנה בניהול הלקוח (CMEK) ב-Bigtable. מידע נוסף על CMEK באופן כללי, כולל מתי ולמה כדאי להפעיל אותו, מופיע במסמכי התיעוד של Cloud KMS.
מומלץ להשתמש במסוף לכל משימות ניהול המפתחות. Google Cloud אם אתם מתכננים להשתמש ב-Google Cloud CLI, מתקינים את ה-CLI של gcloud ל-Bigtable.
הכנת מפתחות CMEK
לפני שיוצרים משאב Bigtable שמוגן באמצעות CMEK, צריך לבצע את השלבים הבאים כדי ליצור מפתח CMEK לכל אזור שבו ימוקמו האשכולות של המופע:
יצירת סוכן שירות של Bigtable
לפני שיוצרים מפתח CMEK, צריך שיהיה לכם סוכן שירות של Bigtable, ש-Bigtable משתמש בו כדי לגשת למפתח.
המסוף
אי אפשר ליצור סוכן שירות במסוף Google Cloud . יכול להיות שמערכת Bigtable תקצה באופן אוטומטי סוכן שירות במהלך תהליך העבודה של יצירת מופע, כשיוצרים או בוחרים את המפתח. בנוסף, כשבוחרים מפתח בניהול הלקוח, המסוף בודק אם יש סוכן שירות. אחת מהתוצאות הבאות עשויה לקרות:
- אם סוכן השירות קיים, תתבקשו להעניק לו את התפקיד Cloud KMS Encrypter/Decrypter.
- אם סוכן השירות לא מוקצה באופן אוטומטי או שנתקלתם בשגיאות במהלך בחירת המפתח, אתם יכולים להשתמש בכרטיסייה gcloud כדי ליצור את הסוכן באופן ידני ולהעניק לו את ההרשאות הנדרשות.
gcloud
מריצים את הפקודה 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.
ב Google Cloud פרויקט שבו רוצים לנהל את המפתחות:
כדי ליצור אוסף מפתחות ומפתח, משתמשים באחת מהאפשרויות הבאות:
- יוצרים את אוסף המפתחות ואת המפתח ישירות ב-Cloud KMS.
- שימוש במפתח שמנוהל חיצונית. יוצרים את המפתח החיצוני ואז יוצרים מפתח Cloud EKM כדי שהמפתח יהיה זמין דרך Cloud KMS.
המיקום של המפתח ב-Cloud KMS חייב להיות זהה למיקום של אשכול Bigtable שבו ישתמשו במפתח. לדוגמה, אם יוצרים אוסף מפתחות ומפתח ב-
us-central1(איווה), אפשר להגן על אשכולות ב-us-central1-a, ב-us-central1-bוב-us-central1-cבאמצעות מפתחות מאוסף המפתחות הזה.
הגדרת הרשאות IAM למפתח
המסוף
כדי להעניק תפקיד Cloud KMS לסוכן השירות, מבצעים את הפעולות הבאות. אפשר גם להעניק הרשאה ברמת המפתח או מחזיק המפתחות אם רוצים רמת פירוט נמוכה יותר.
נכנסים לדף IAM במסוף Google Cloud .
לוחצים על הוספה.
מזינים את המזהה בפורמט אימייל של סוכן השירות של Bigtable.
בוחרים בתפקיד Cloud KMS CryptoKey Encrypter/Decrypter.
לוחצים על Save.
gcloud
מקצים את התפקיד
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 בטבלה, מבצעים את השלבים הבאים:
המסוף
נכנסים לדף של מופעי Bigtable במסוףGoogle Cloud .
לוחצים על שם המכונה שמכילה את הטבלה כדי לפתוח את הדף פרטי המכונה ולראות את רשימת האשכולות במכונה.
לצד מזהה אשכול, לוחצים על שם המפתח בקטע מפתח הצפנה כדי לראות את הדף גרסאות של המפתח של האשכול.
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, מריצים את הפקודות הבאות.
מציגים את כל הגרסאות של מפתח ה-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-
משביתים את כל הגרסאות:
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 יפעל בהתאם לשינוי הזה במצב.-
[אופציונלי] כדי לאשר את הסטטוס של 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-
[אופציונלי] כדי לוודא שהאשכולות במופע מושבתים, מריצים את הפקודה הבאה:
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, מריצים את הפקודות הבאות.
מעיינים ברשימת הגרסאות כדי לזהות את כל הגרסאות של המפתח:
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 :
מוודאים שהרישום ביומן מופעל עבור Cloud KMS API בפרויקט.
נכנסים אל Cloud Logging במסוף Google Cloud .
כדי להגביל את רשומות היומן למפתח 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/Backupbigtableadmin.googleapis.com/Clusterbigtableadmin.googleapis.com/Tablebigtableadmin.googleapis.com/AuthorizedView
המשאבים הבאים של Bigtable נתמכים כגרסת Preview:
bigtableadmin.googleapis.com/LogicalViewbigtableadmin.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 לא מבצעות רוטציה של הגרסאות שמשמשות לפענוח גיבויים.
המסוף
נכנסים לדף של מופעי Bigtable במסוףGoogle Cloud .
לוחצים על שם המכונה כדי לפתוח את הדף פרטי המכונה.
בחלונית הניווט הימנית, לוחצים על גיבויים.
שם המפתח וגרסת המפתח של כל גיבוי מופיעים בקטע מפתח בניהול הלקוח.
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'