בדף הזה נסביר איך לבצע משימות שקשורות למפתחות הצפנה בניהול הלקוח (CMEK) ב-Cloud Firestore. מידע נוסף על CMEK באופן כללי, כולל מתי כדאי להפעיל אותו ומדוע, זמין במסמכי העזרה של Cloud KMS.
הכנת מפתחות CMEK
כדי ליצור מסד נתונים מסוג Cloud Firestore שמוגן באמצעות CMEK, צריך לבצע את השלבים הבאים:
- שליחת בקשה לקבלת גישה לתכונה Cloud Firestore של CMEK.
- יוצרים (או מאחזרים) סוכן שירות מסוג Cloud Firestore.
- יצירת מפתח CMEK
- מגדירים את הגדרות IAM למפתח הזה.
צריך לבצע את השלבים האלה בכל פרויקט שיכיל מסדי נתונים של Cloud Firestore שמוגנים באמצעות CMEK. אם תיצרו מפתח CMEK חדש מאוחר יותר, תצטרכו להגדיר את הגדרות IAM למפתח הזה.
בקשת גישה
לפני שיוצרים סוכן שירות מסוג Cloud Firestore, צריך למלא את הטופס הזה כדי לבקש גישה לתכונה CMEK.
יצירת סוכן שירות של Cloud Firestore
לפני שיוצרים מפתח CMEK, צריך סוכן שירות של Cloud Firestore. סוכן השירות הוא סוג של חשבון שירות בניהול Google ש-Cloud Firestore משתמש בו כדי לגשת למפתח.
מריצים את הפקודה services identity create כדי ליצור את סוכן השירות ש-Cloud Firestore משתמש בו כדי לגשת למפתח CMEK בשמכם. הפקודה הזו יוצרת את חשבון השירות אם הוא עדיין לא קיים, ואז מציגה אותו.
gcloud beta services identity create \ --service=firestore.googleapis.com \ --project FIRESTORE_PROJECT
מחליפים את FIRESTORE_PROJECT
בשם הפרויקט שבו אתם מתכננים להשתמש למסדי הנתונים של Cloud Firestore.
הפקודה מציגה את מזהה סוכן השירות, בפורמט של כתובת אימייל. שומרים את מחרוזת האימייל של הפלט, כי תצטרכו להשתמש בה בשלב מאוחר יותר.
Service identity created: service-xxx@gcp-sa-firestore.iam.gserviceaccount.com
יצירת מפתח
אפשר להשתמש במפתח שנוצר ישירות ב-Cloud KMS או במפתח שמנוהל באופן חיצוני ומופעל באמצעות Cloud External Key Manager.
מיקום המפתח ב-Cloud KMS חייב להיות זהה למיקום של מסד הנתונים Cloud Firestore שבו הוא ישמש.
במיקומים אזוריים של מסדי נתונים, צריך להשתמש באותו שם מיקום לאוסף המפתחות, למפתח ולמסד הנתונים, כי יש מיפוי אחד-ל-אחד של שמות המיקומים.
לדוגמה, אם רוצים ליצור מסד נתונים שמוגן באמצעות CMEK ב-
us-west1
, יוצרים אוסף מפתחות ומפתח ב-us-west1
.במיקומים של מסדי נתונים במספר אזורים, צריך להשתמש בשם המיקום של המיקום של KMS במספר אזורים:
- משתמשים במיקום
us
של Cloud KMS במספר אזורים עבור המיקום Cloud Firestorenam5
במספר אזורים. - משתמשים במיקום
europe
של Cloud KMS במספר אזורים עבור המיקום Cloud Firestoreeur3
במספר אזורים.
- משתמשים במיקום
בפרויקט Google Cloud שבו רוצים לנהל את המפתחות, מבצעים את הפעולות הבאות:
אפשר ליצור אוסף מפתחות ומפתח באמצעות אחת מהאפשרויות הבאות:
- ליצור את אוסף המפתחות ואת המפתח ישירות ב-Cloud KMS.
- שימוש במפתח שמנוהל באופן חיצוני. יוצרים את המפתח החיצוני ואז יוצרים מפתח Cloud EKM כדי שהמפתח יהיה זמין דרך Cloud KMS.
הגדרת ההגדרות של IAM למפתח
המסוף
כדי להקצות תפקיד ב-Cloud KMS לסוכן השירות, מבצעים את הפעולות הבאות. אם רוצים רמת פירוט נמוכה יותר, אפשר גם להעניק הרשאה ברמת המפתח או ברמת אוסף המפתחות.
נכנסים לדף IAM במסוף Google Cloud.
לוחצים על הוספה.
מזינים את המזהה בפורמט של כתובת אימייל של סוכן השירות של Cloud Firestore.
בוחרים את התפקיד Cloud KMS CryptoKey Encrypter/Decrypter.
לוחצים על שמירה.
gcloud
מקצים את התפקיד cloudkms.cryptoKeyEncrypterDecrypter
לסוכן השירות:
gcloud kms keys add-iam-policy-binding KMS_KEY \
--keyring KMS_KEYRING\
--location KMS_LOCATION \
--member serviceAccount:SERVICE_AGENT_EMAIL \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter \
--project KMS_PROJECT
מחליפים את מה שכתוב בשדות הבאים:
KMS_KEY
בשם שנתתם למפתחKMS_KEYRING
עם אוסף המפתחות של KMS שמכיל את המפתחKMS_LOCATION
עם האזור שמכיל את אוסף המפתחותSERVICE_AGENT_EMAIL
במזהה בפורמט של כתובת אימייל של סוכן השירות שרוצים להעניק לו גישהKMS_PROJECT
עם הפרויקט שמכיל את המפתח
בתגובה, אמורה להופיע בתחנה תגובה שדומה לזו:
Updated IAM policy for key KMS_KEY.
bindings:
- members:
- serviceAccount:
service-{project-number}@gcp-sa-firestore.iam.gserviceaccount.com
role: roles/cloudkms.cryptoKeyEncrypterDecrypter
יצירת מסד נתונים עם תמיכה ב-CMEK
אחרי שיוצרים ומגדירים את מפתחות ה-CMEK, אפשר ליצור מסד נתונים שמוגן באמצעות CMEK. לא ניתן להמיר מסדי נתונים קיימים של Cloud Firestore שמוגנים באמצעות הצפנת ברירת המחדל של Google כך שישתמשו ב-CMEK.
אפשר לבחור סוג הצפנה ומפתח רק כשיוצרים מסד נתונים שתומך ב-CMEK.
המסוף
נכנסים לדף Databases במסוף Google Cloud.
לוחצים על Create Database.
בוחרים את מצב מסד הנתונים. לוחצים על המשך.
בדף Configure your database, מזינים מזהה של מסד נתונים.
בחר במיקום.
לוחצים על Show Encryption Options ובוחרים באפשרות Cloud KMS key.
בוחרים או מזינים את שם המשאב של מפתח ה-CMEK שרוצים להשתמש בו במסד הנתונים.
רשימת המפתחות מוגבלת לפרויקט Google Cloud הנוכחי ולמיקום מסד הנתונים שבחרתם. כדי להשתמש במפתח מפרויקט Google Cloud אחר, לוחצים על Switch Project (החלפת פרויקט) או על Enter Key Manually (הזנת מפתח באופן ידני).
אם מופיעה בקשה להעניק הרשאת מפתח לחשבון השירות Cloud Firestore, לוחצים על Grant. כדי ליצור מסד נתונים של CMEK, צריך להקצות לחשבון השירות Cloud Firestore את התפקיד
cloudkms.cryptoKeyEncrypterDecrypter
.בחירת כללי אבטחה ללקוחות בנייד ובאינטרנט.
לוחצים על Create Database.
אחרי שיוצרים את מסד הנתונים, אפשר לבדוק אם הוא מופעל באמצעות CMEK על ידי הצגת פרטי מסד הנתונים:
- אם מסד הנתונים מוגן על ידי CMEK, השדה Encryption type (סוג ההצפנה) יופיע כ-Customer-managed (ניהול הלקוח), ובשדה Encryption key (מפתח ההצפנה) יופיעו Cloud KMS התואם וגרסה של המפתח שמשמש להגנה על מסד הנתונים הזה.
- אם מסד הנתונים לא מוגן באמצעות CMEK, השדה Encryption type (סוג ההצפנה) יופיע כ-Google-managed (מנוהל על ידי Google).
gcloud
לפני שיוצרים מסד נתונים עם תמיכה ב-CMEK באמצעות Google Cloud CLI, צריך להתקין את הגרסה האחרונה ולאשר את gcloud CLI. למידע נוסף, ראו התקנת ה-CLI של gcloud.
gcloud firestore databases create --location=FIRESTORE_DATABASE_LOCATION \
--database=DATABASE_ID \
--kms-key-name=KMS_KEY_NAME \
--project=FIRESTORE_PROJECT
מחליפים את מה שכתוב בשדות הבאים:
FIRESTORE_DATABASE_LOCATION
עם המיקום Cloud Firestore של מסד הנתוניםDATABASE_ID
עם מזהה של מסד הנתוניםKMS_KEY_NAME
בשם שנתתם למפתח. צריך להשתמש בשם המלא של המשאב למפתח בפורמט הבא:projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
FIRESTORE_PROJECT
עם הפרויקט שרוצים להשתמש בו למסד הנתונים Cloud Firestore
API ל-REST
בקשת HTTP:
POST https://firestore.googleapis.com/v1/projects/{FIRESTORE_PROJECT}/databases
בגוף הבקשה, מגדירים את CMEK בשדה cmek_config.kms_key_name
.
מוגדר למזהה המשאב המלא של מפתח Cloud KMS. מותר להשתמש רק במפתח שנמצא באותו מיקום של מסד הנתונים הזה.
הערך הזה צריך להיות מזהה משאב המפתח ב-Cloud KMS בפורמט projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}
.
מידע נוסף על שדות אחרים זמין בדף database create
.
דוגמה לבקשה:
curl -X POST 'https://firestore.googleapis.com/v1/projects/FIRESTORE_PROJECT/databases?databaseId={DATABASE_ID}' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-type: application/json" \
-d '{
"type":"FIRESTORE_NATIVE",
"locationId":"{FIRESTORE_DATABASE_LOCATION}",
"cmekConfig": {
"kmsKeyName":"projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID"
}
}'
Firebase CLI
כדי ליצור מסד נתונים עם תמיכה ב-CMEK, משתמשים בשדה KMS Key Name. אם לא מציינים את הפרמטר --kms-key-name
, Cloud Firestore יוצר מסד נתונים שאינו CMEK כברירת מחדל.
firebase firestore:databases:create DATABASE_ID
--location LOCATION
--kms-key-name projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
--project FIRESTORE_PROJECT
מחליפים את מה שכתוב בשדות הבאים:
DATABASE_ID
במזהה של מסד הנתוניםLOCATION
עם המיקום של מסד הנתוניםKMS_PROJECT
עם הפרויקט שמכיל את מפתח ה-CMEKKMS_LOCATION
במיקום שמכיל את מפתח ה-CMEK ואוסף המפתחותKMS_KEYRING_ID
במזהה של אוסף המפתחות של CMEKFIRESTORE_PROJECT
עם הפרויקט שרוצים להשתמש בו למסד הנתונים Cloud Firestore
מוודאים שמסד הנתונים Cloud Firestore מוגן באמצעות Firebase CLI:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
פרטי ה-CMEK הבאים מופיעים בהודעת התגובה:
- השדה KMS Key Name מספק את השם המלא של משאב המפתח שמשמש להצפנת מסד הנתונים של CMEK ב-Cloud Firestore.
- בשדה Active Key Versions מוצגת רשימה של כל גרסאות המפתחות שבהן משתמשת כרגע מסד הנתונים הזה של CMEK. במהלך סיבוב מפתחות, יכולות להיות לכם כמה גרסאות פעילות של מפתחות.
Terraform
כדי ליצור מסד נתונים עם תמיכה ב-CMEK, משתמשים במשאב google_firestore_database
. תוכלו למצוא מידע נוסף ודוגמאות במאמר google_firestore_database
.
resource "google_firestore_database" "database" {
project = "FIRESTORE_PROJECT"
name = "DATABASE_ID"
location_id = "FIRESTORE_DATABASE_LOCATION"
type = "DATABASE_TYPE"
cmek_config {
kms_key_name = "KMS_KEY_NAME"
}
}
מחליפים את מה שכתוב בשדות הבאים:
FIRESTORE_PROJECT
עם הפרויקט שרוצים להשתמש בו למסד הנתונים Cloud FirestoreDATABASE_ID
עם מזהה של מסד הנתוניםFIRESTORE_DATABASE_LOCATION
עם המיקום Cloud Firestore של מסד הנתוניםDATABASE_TYPE
עםFIRESTORE_NATIVE
למצב Native אוDATASTORE_MODE
למצב Datastore.KMS_KEY_NAME
בשם שנתתם למפתח. צריך להשתמש בשם המלא של המשאב למפתח בפורמט:projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
גישה למסד נתונים שמוגן באמצעות CMEK
כל פעולות הקריאה, הכתיבה והשאילתות שנשלחות למסד נתונים שמוגן באמצעות CMEK אמורות לפעול כמו במסד נתונים מוצפן שמוגדר כברירת מחדל ב-Google. לדוגמה, אין צורך לספק מפתח לכל בקשה.
שחזור של מסד נתונים שמוגן באמצעות CMEK
לפני שמשחירים מסד נתונים שמוגן באמצעות CMEK מגיבוי:
- מחליטים אם לשחזר את מסד הנתונים להצפנת CMEK, להצפנת ברירת המחדל של Google (לא CMEK) או לאותה הצפנה כמו הגיבוי.
מכינים את המפתח (primary-version) ואת גרסת המפתח שבה השתמשתם להצפנת הגיבוי. מפעילים גם את המפתח וגם את גרסת המפתח.
gcloud
שחזור מסד נתונים שמוגן באמצעות CMEK להצפנת CMEK
כדי לשחזר את ההצפנה באמצעות CMEK, מריצים את הפקודה gcloud firestore databases restore עם הדגלים האופציונליים encryption-type
ו-kms-key-name
כדי להגדיר את סוג ההצפנה של מסד הנתונים שמשוחזר. אם לא מציינים את סוג ההצפנה, מסד הנתונים שמשוחזר ישתמש באותה הגדרת הצפנה כמו הגיבוי.
gcloud firestore databases restore
--encryption-type=customer-managed-encryption
--kms-key-name=KMS_KEY_NAME
מחליפים את KMS_KEY_NAME
בשם שהקציתם למפתח. צריך להשתמש בשם המלא של המשאב למפתח בפורמט הבא:
projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
שחזור מסד נתונים שמוגן באמצעות CMEK להצפנת ברירת המחדל
כדי לשחזר את הצפנת ברירת המחדל של Google (לא CMEK), מגדירים את הדגל encryption-type
באופן הבא:
gcloud firestore databases restore
--encryption-type=google-default-encryption
שחזור של מאגר נתונים שמוגן באמצעות CMEK לאותו סוג הצפנה כמו הגיבוי
כדי לשחזר לאותו סוג הצפנה כמו הגיבוי, מגדירים את הדגל encryption-type
באופן הבא:
gcloud firestore databases restore --encryption-type=use-source-encryption
Firebase CLI
שחזור מסד נתונים שמוגן באמצעות CMEK להצפנת CMEK
כדי לשחזר את ההצפנה באמצעות CMEK, משתמשים בדגלים האופציונליים encryption-type
ו-kms-key-name
.
אם לא מציינים את סוג ההצפנה, מסד הנתונים שמשוחזר ישתמש באותה הגדרת הצפנה כמו הגיבוי.
firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type CUSTOMER_MANAGED_ENCRYPTION \
--kms-key-name projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID \
--project FIRESTORE_PROJECT
מחליפים את מה שכתוב בשדות הבאים:
DATABASE_ID
במזהה של מסד הנתוניםFIRESTORE_PROJECT
עם הפרויקט שרוצים להשתמש בו למסד הנתונים Cloud FirestoreFIRESTORE_LOCATION
עם המיקום של מסד הנתונים Cloud FirestoreBACKUP_ID
במזהה הגיבויKMS_PROJECT
עם הפרויקט שמכיל את מפתח ה-CMEKKMS_LOCATION
במיקום שמכיל את מפתח ה-CMEK ואוסף המפתחותKMS_KEYRING_ID
במזהה של אוסף המפתחות של CMEK
מוודאים שמסד הנתונים Cloud Firestore ששוחזר מוצפן באמצעות CMEK:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
שחזור מסד נתונים שמוגן באמצעות CMEK להצפנת ברירת המחדל
כדי לשחזר את הצפנת ברירת המחדל של Google (לא CMEK), מגדירים את הדגל encryption-type
באופן הבא:
firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type GOOGLE_DEFAULT_ENCRYPTION \
--project FIRESTORE_PROJECT
מחליפים את מה שכתוב בשדות הבאים:
DATABASE_ID
במזהה של מסד הנתוניםFIRESTORE_PROJECT
עם הפרויקט שרוצים להשתמש בו למסד הנתונים Cloud FirestoreFIRESTORE_LOCATION
עם המיקום של מסד הנתונים Cloud FirestoreBACKUP_ID
במזהה הגיבוי
שחזור של מאגר נתונים שמוגן באמצעות CMEK לאותו סוג הצפנה כמו הגיבוי
כדי לשחזר לאותו סוג הצפנה כמו הגיבוי, מגדירים את הדגל encryption-type
באופן הבא:
firebase firestore:databases:restore \
--database DATABASE_IDD \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type USE_SOURCE_ENCRYPTION
מחליפים את מה שכתוב בשדות הבאים:
DATABASE_ID
במזהה של מסד הנתוניםFIRESTORE_PROJECT
עם הפרויקט שרוצים להשתמש בו למסד הנתונים Cloud FirestoreFIRESTORE_LOCATION
עם המיקום של מסד הנתונים Cloud FirestoreBACKUP_ID
במזהה הגיבוי
הצגת המפתח שבשימוש
gcloud
אפשר להשתמש בפקודה gcloud CLI של databases describe כדי לוודא את ההגדרה של CMEK במסד הנתונים:
gcloud firestore databases describe --database=DATABASE_ID --project=FIRESTORE_PROJECT
המידע על CMEK אמור להופיע בשדה cmekConfig
בתגובה, בדומה לדוגמה הבאה:
cmekConfig:
activeKeyVersion:
- projects/PROJECT_ID/locations/us/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME/cryptoKeyVersions/1
kmsKeyName: projects/PROJECT_ID/locations/us/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME
locationId: nam5
name: projects/PROJECT_ID/databases/DATABASE_ID
התשובה כוללת את הפרטים הבאים:
kmsKeyName
: שם המשאב המלא של המפתח שמשמש להצפנת מסד הנתונים המוגן באמצעות CMEK.activeKeyVersion
: רשימה של כל גרסאות המפתחות שבשימוש כרגע במסד הנתונים המוגן באמצעות CMEK. במהלך סיבוב מפתחות, יכולות להיות לכם כמה גרסאות פעילות של מפתחות. גרסת המפתח הישנה וגרסת המפתח החדשה צריכות להיות זמינות במהלך רוטציית המפתחות. לא משביתים את גרסת המפתח הישנה עד שהיא לא מופיעה יותר בשדהactiveKeyVersion
.
API ל-REST
בקשת HTTP:
GET https://firestore.googleapis.com/v1/{name=projects/FIRESTORE_PROJECT/databases/DATABASE_ID}
בגוף הבקשה, מגדירים את CMEK בשדה cmek_config.kms_key_name
.
מוגדר למזהה המשאב המלא של מפתח Cloud KMS. מותר להשתמש רק במפתח שנמצא באותו מיקום של מסד הנתונים הזה.
הערך הזה צריך להיות מזהה משאב המפתח ב-Cloud KMS בפורמט projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}
.
מידע נוסף על שדות אחרים זמין בדף database create
.
דוגמה לבקשה ולתגובה:
curl 'https://firestore.googleapis.com/v1/projects/FIRESTORE_PROJECT/databases/{DATABASE_ID}' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-type: application/json"
—----------------------------------------- Response —--------------------------------------------
{
"name": "projects/FIRESTORE_PROJECT/databases/{DATABASE_ID}",
"locationId": "{FIRESTORE_DATABASE_LOCATION}",
"type": "FIRESTORE_NATIVE",
"cmekConfig": {
"kmsKeyName": "projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}",
"activeKeyVersion": [
"projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}/cryptoKeyVersions/1"
]
},
……
}
השבתת מפתח
כדי להשבית מפתח שמשויך למסד נתונים:
- הצגת גרסאות המפתחות שבשימוש במסד נתונים
- משביתים את הגרסאות האלה של המפתחות שבשימוש.
- ממתינים שהשינוי ייכנס לתוקף ובודקים אם אין יותר גישה לנתונים. בדרך כלל השינויים נכנסים לתוקף תוך דקות, אבל התהליך עשוי להימשך עד 3 שעות.
כשמפתח שמשמש מסד נתונים מושבת, צפויה להופיע הודעה על חריגה מסוג FAILED_PRECONDITION
עם פרטים נוספים בהודעת השגיאה, לדוגמה:
{ "error": { "code": 400, "message": "The customer-managed encryption key required by the requested resource is not accessible. Error reason: generic::permission_denied: Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource 'projects/FIRESTORE_PROJECT/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}' (or it may not exist).", "status": "FAILED_PRECONDITION", "details": [ { "@type": "type.googleapis.com/google.rpc.DebugInfo", "detail": "The customer-managed encryption key required by the requested resource is not accessible. Error reason: generic::permission_denied: Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource 'projects/FIRESTORE_PROJECT/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}' (or it may not exist)" } ] } }
הפעלת מפתח
כדי להפעיל מחדש מפתח שמשויך למסד נתונים:
- הצגת גרסאות המפתחות שבשימוש במסד נתונים
- הפעלת הגרסאות האלה של המפתחות
- ממתינים שהשינוי ייכנס לתוקף ובודקים אם אין יותר גישה לנתונים. בדרך כלל השינויים נכנסים לתוקף תוך דקות, אבל התהליך עשוי להימשך עד 3 שעות.
הצגת יומני הביקורת של מפתח Cloud KMS
לפני שמפעילים את יומני הביקורת של Cloud KMS לגישה לנתונים, כדאי להכיר את יומני הביקורת של Cloud.
ביומני הביקורת של Cloud KMS לגישה לנתונים מוצגים הזמנים שבהם Cloud Firestore או מוצגים מוצגים מוצרים אחרים שמוגדרים לשימוש במפתח CMEK שלכם מבצעים קריאות להצפנה/פענוח ב-Cloud KMS. Cloud Firestore לא מנפיק קריאה להצפנה/פענוח בכל בקשת נתונים, אלא שומר על פולר (poller) שבודק את המפתח מדי פעם. תוצאות הסקר מופיעות ביומני הביקורת.
אפשר להגדיר את יומני הביקורת ולנהל אותם במסוף Google Cloud:
מוודאים שרישום ביומן מופעל ב-Cloud KMS API בפרויקט.
נכנסים לדף Cloud Logging במסוף Google Cloud.
כדי להגביל את הרשומות ביומן למפתח Cloud KMS, מוסיפים את השורות הבאות ל-Query builder:
resource.type="cloudkms_cryptokey" resource.labels.key_ring_id = KMS_KEYRING resource.labels.crypto_key_id = KMS_KEY resource.labels.location=KMS_LOCATION
מחליפים את מה שכתוב בשדות הבאים:
KMS_KEY
בשם של מפתח ה-CMEKKMS_KEYRING
עם אוסף המפתחות של KMS שמכיל את המפתחKMS_LOCATION
עם המיקום של המפתח ואוסף המפתחות
ביומן מוצגות כמה רשומות כל חמש דקות לכל מסד נתונים. הרשומות ביומן נראות דומות לדוגמאות הבאות:
Info 2021-03-20 08:02:24.869 EDT Cloudkms.googleapis.com Decrypt projects/cloud-kms-project/locations/us-central1/keyRings/firestore-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-firestore.iam.gserviceaccount.com" Info 2021-03-20 08:02:24.913 EDT Cloudkms.googleapis.com Encrypt projects/cloud-kms-project/locations/us-central1/keyRings/firestore-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com"
במאמר הסבר על יומני ביקורת מוסבר איך מפרשים את יומני הביקורת.
הגדרת מדיניות ארגון ל-CMEK
כדי לציין את דרישות התאימות להצפנה של Cloud Firestoreמסדי הנתונים בארגון, משתמשים באילוץ של מדיניות הארגון ל-CMEK.
דרישה להגנה של CMEK
מגדירים את constraints/gcp.restrictNonCmekServices
כך שיחייב שימוש ב-CMEK ליצירת מסד הנתונים Cloud Firestore. מגדירים את האילוץ כ-deny
ומוסיפים את firestore.googleapis.com
לרשימת הדחייה, לדוגמה:
gcloud resource-manager org-policies deny gcp.restrictNonCmekServices is:firestore.googleapis.com --project=FIRESTORE_PROJECT
מחליפים את FIRESTORE_PROJECT
בשם הפרויקט שרוצים להגביל.
מידע נוסף על הגדרת מדיניות הארגון זמין במאמר יצירה ועריכה של כללי מדיניות.
אחרי שהמדיניות תיכנס לתוקף, תופיע הודעת שגיאה ופטור FAILED_PRECONDITION
אם תנסו ליצור מסד נתונים שאינו מסוג CMEK בפרויקט המושפע. לדוגמה, חריגה נראית כך:
{ "error": { "code": 400, "message": "Constraint 'constraints/gcp.restrictNonCmekServices' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'firestore.googleapis.com'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information.", "status": "FAILED_PRECONDITION", "details": [ { "@type": "type.googleapis.com/google.rpc.PreconditionFailure", "violations": [ { "type": "constraints/gcp.restrictNonCmekServices", "subject": "orgpolicy:projects/FIRESTORE_PROJECT", "description": "Constraint 'constraints/gcp.restrictNonCmekServices' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'firestore.googleapis.com'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information." } ]
הגבלת השימוש במפתחות ל-CMEK
כדי להגביל את מפתחות Cloud KMS שישמשו להגנה של CMEK, צריך להגדיר את האילוץ constraints/gcp.restrictCmekCryptoKeyProjects
.
כאשר מדובר באילוץ רשימה, הערכים הקבילים הם אינדיקטורים של היררכיית משאבים (לדוגמה, projects/PROJECT_ID
, under:folders/FOLDER_ID
ו-under:organizations/ORGANIZATION_ID
). כדי להשתמש באילוץ הזה, מגדירים רשימה של אינדיקטורים של היררכיית משאבים ומגדירים את האילוץ כ-Allow.
ההגדרה הזו מגבילה את השירותים הנתמכים, כך שאפשר לבחור מפתחות CMEK רק מהפרויקטים, מהתיקיות ומהארגונים שמפורטים. בקשות ליצירת משאבים שמוגנים באמצעות CMEK בשירותים מוגדרים לא יתקבלו ללא מפתח Cloud Firestore מאחד מהמשאבים המורשים.
בדוגמה הבאה מותרים רק מפתחות מ-ALLOWED_KEY_PROJECT_ID למסדי נתונים שמוגנים באמצעות CMEK בפרויקט שצוין:
gcloud resource-manager org-policies allow gcp.restrictCmekCryptoKeyProjects \ under:projects/ALLOWED_KEY_PROJECT_ID \ --project=FIRESTORE_PROJECT
אחרי שהמדיניות נכנסת לתוקף, אם תפרו את האילוץ תקבלו חריגה מסוג FAILED_PRECONDITION
והודעת שגיאה. החרגה נראית כך:
{ "error": { "code": 400, "message": "Constraint 'constraints/gcp.restrictCmekCryptoKeyProjects' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'projects/{NOT_ALLOWED_KEY_PROJECT}'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information.", "status": "FAILED_PRECONDITION", "details": [ { "@type": "type.googleapis.com/google.rpc.PreconditionFailure", "violations": [ { "type": "constraints/gcp.restrictCmekCryptoKeyProjects", "subject": "orgpolicy:projects/FIRESTORE_PROJECT", "description": "Constraint 'constraints/gcp.restrictCmekCryptoKeyProjects' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'projects/{NOT_ALLOWED_KEY_PROJECT}'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information." } ] } ] } }