כברירת מחדל, Google Cloud הנתונים מוצפנים אוטומטית כשהם במצב מנוחה באמצעות מפתחות הצפנה שמנוהלים על ידי Google. אם יש לכם דרישות רגולטוריות או דרישות תאימות ספציפיות שקשורות למפתחות שמגנים על הנתונים שלכם, אתם יכולים להשתמש במפתחות הצפנה בניהול הלקוח (CMEK) עבור מערכי הנתונים של Cloud Healthcare API. במקום ש-Google תהיה הבעלים של מפתחות ההצפנה שמגנים על הנתונים שלכם ותנהל אותם, מערכי הנתונים של Cloud Healthcare API מוצפנים באמצעות מפתח שאתם שולטים בו ומנהלים אותו ב-Cloud Key Management Service (Cloud KMS).
מידע נוסף על CMEK באופן כללי, כולל מתי ולמה כדאי להפעיל אותו, זמין במאמר מפתחות הצפנה בניהול הלקוח (CMEK).
לפני שמתחילים
מחליטים אם מערך הנתונים של Cloud Healthcare API ו-Cloud KMS יהיו באותו פרויקט Google Cloud או בפרויקטים שונים. הנחיות מפורטות זמינות במאמר הפרדת סמכויות.
למטרות תיעוד, נעשה שימוש במוסכמות הבאות:
-
PROJECT_ID: מזהה הפרויקט של Cloud Healthcare API -
KMS_PROJECT_ID: מזהה הפרויקט שבו פועל Cloud KMS, שיכול להיות זהה ל-PROJECT_ID
מידע על מזהי פרויקטים ומספרי פרויקטים זמין במאמר זיהוי פרויקטים. Google Cloud
מגבלות
- אפשר להשתמש במפתחות Cloud KMS רק כשיוצרים dataset ב-Cloud Healthcare API. אי אפשר להפעיל, לשנות או להשבית מפתחות Cloud KMS במערך נתונים קיים של Cloud Healthcare API.
- רק מאגרי FHIR, DICOM ו-HL7v2 נתמכים במערכי נתונים מוצפנים באמצעות CMEK. ההגנה באמצעות CMEK חלה על מאגרי DICOM, FHIR ו-HL7v2 במערך הנתונים ועל המשאבים שלהם.
- אי אפשר להסיר את הפרטים המזהים ממשאבים שמוצפנים באמצעות CMEK.
פעולות CMEK
מפתחות Cloud KMS משמשים כשיוצרים, קוראים, מעדכנים או מוחקים משאב שמוצפן באמצעות CMEK, וגם למשימות תפעוליות כמו חיוב או וידוא שהמפתח זמין.
שיקולים לגבי מפתח חיצוני
מידע על שימוש במפתחות שמנוהלים במערכת של שותף חיצוני נתמך לניהול מפתחות כדי להגן על נתונים ב-Google Cloudזמין במאמר בנושא Cloud External Key Manager.
אם תאבדו מפתחות שאתם מנהלים מחוץ ל- Google Cloud, Google לא תוכל לשחזר את הנתונים שלכם.
אי-זמינות של מפתחות ואובדן נתונים
אם מערך נתונים מוצפן באמצעות מפתח, והמפתח הזה לא זמין ולא יהיה זמין יותר, Cloud Healthcare API משבית את מערך הנתונים ובסופו של דבר מוחק אותו. לפעמים מפתח הופך ללא זמין אם הוא מושבת או נהרס, או אם אין אליו גישה בגלל הרשאות שבוטלו. עם זאת, התנהגות כזו מתרחשת אם המפתח לא זמין מסיבה כלשהי. רמת ההגנה של המפתח או אם הוא מפתח חיצוני לא משפיעים על ההתנהגות הזו. יכול להיות שמפתחות חיצוניים לא יהיו זמינים באופן בלתי צפוי. לדוגמה, יכולות להיות בעיות בקישוריות בין המשאבים שלכם ב-Google Cloud לבין ה-EKM.
בתהליך הבא מוסבר איך מתבצעת בדיקת הזמינות של מפתח, ואיך אפשר להשבית ולמחוק מערך נתונים:
אחרי שיוצרים מערך נתונים של Cloud Healthcare API שמוצפן באמצעות CMEK, Cloud Healthcare API בודק את סטטוס המפתח כל חמש דקות כדי לוודא שהמפתח זמין. אם המפתח לא זמין, Cloud Healthcare API ממשיך לתמוך בבקשות למערך הנתונים למשך שעה אחת לכל היותר.
אחרי שעה, אם Cloud Healthcare API עדיין לא מצליח להתחבר ל-Cloud KMS, מערך הנתונים של Cloud Healthcare API מושבת כאמצעי הגנה. כדי להפעיל מחדש את מערך הנתונים של Cloud Healthcare API, צריך לפנות אל נציג התמיכה.
אם האפשרות מושבתת, אפשר לשלוח רק בקשות
datasets.getו-datasets.deleteלמערך הנתונים של Cloud Healthcare API. בקשות אחרות נכשלות עם השגיאה400 FAILED_PRECONDITION.אם מערך הנתונים של Cloud Healthcare API לא יהיה זמין במשך יותר מ-30 יום, הוא יימחק באופן סופי. כל החנויות ב-DICOM, ב-FHIR וב-HL7v2 במערך הנתונים והנתונים שמשויכים אליהן נמחקים גם כן. אם מוחקים את הנתונים האלה, אי אפשר לשחזר אותם.
יצירת מפתח
בקטעים הבאים מוסבר איך ליצור אוסף מפתחות ומפתח ב-Cloud KMS. התמיכה מוגבלת למפתחות הצפנה סימטריים של Cloud KMS.
מיקומים נתמכים
מפתחות Cloud KMS זמינים במיקומים של Cloud Healthcare API. יוצרים את אוסף המפתחות במיקום שתואם לאזור או למספר האזורים של מערך הנתונים ב-Cloud Healthcare API.
בכל מערך נתונים רב-אזורי של Cloud Healthcare API צריך להשתמש בצרור מפתחות רב-אזורי ממיקום תואם. לדוגמה, מערך נתונים של Cloud Healthcare API באזור
usצריך להיות מוגן באמצעות מחזיק מפתחות מאזורus, ומערך נתונים של Cloud Healthcare API באזורeuצריך להיות מוגן באמצעות מחזיק מפתחות מאזורeurope.מערכי נתונים אזוריים של Cloud Healthcare API צריכים להשתמש במפתחות אזוריים תואמים. לדוגמה, מערך נתונים של Cloud Healthcare API באזור
asia-northeast1צריך להיות מוגן באמצעות מחזיק מפתחות מהאזורasia-northeast1.אי אפשר להשתמש באזור
globalכשמגדירים CMEK למערך נתונים של Cloud Healthcare API.
מידע נוסף מופיע במאמרים בנושא מיקומים של Cloud Healthcare API ומיקומים של Cloud KMS.
יצירה של אוסף מפתחות ומפתח
מבצעים את השלבים הבאים בפרויקט Google Cloud שבו פועל Cloud KMS:
מתן הרשאות הצפנה ופענוח
כדי להגן על הנתונים ב-Cloud Healthcare API באמצעות מפתח Cloud KMS, צריך להעניק לחשבון השירות Cloud Healthcare Service Agent את התפקיד CryptoKey Encrypter/Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter) במפתח הזה. הוראות מפורטות מופיעות במאמר בנושא הרשאות CMEK של מערך נתונים.
אחרי שנותנים לחשבון השירות את התפקיד, Cloud Healthcare API יכול להצפין ולפענח משאבים שמוצפנים באמצעות CMEK. האפליקציות לא צריכות לציין מפתחות כשקוראים או כותבים נתונים. ההצפנה מתבצעת על ידי Cloud Healthcare API.
כשמגיש בקשה קורא או כותב אובייקט שמוצפן באמצעות מפתח Cloud KMS, הוא ניגש לאובייקט כרגיל. במהלך הבקשה, סוכן השירות מצפין או מפענח באופן אוטומטי את האובייקט המבוקש, בתנאי שמתקיימים שני התנאים הבאים:
- לסוכן השירות עדיין יש את ההרשאות הנדרשות.
- המפתח זמין ומופעל.
יצירת מערך נתונים מוצפן באמצעות CMEK ב-Cloud Healthcare API
בדוגמאות הבאות אפשר לראות איך יוצרים מערך נתונים מוצפן באמצעות CMEK.
כשיוצרים את מערך הנתונים, צריך לציין מזהה משאב מפתח של Cloud KMS. המפתח הזה הוא תלוי אותיות רישיות והפורמט שלו הוא:
projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
כדי לראות את מזהי משאבי המפתח של Cloud KMS, אפשר לעיין במאמר בנושא קבלת מזהה משאב של Cloud KMS.
המסוף
נכנסים לדף Browser במסוף Google Cloud .
לוחצים על add_box יצירת מערך נתונים. יופיע הדף Create dataset.
בשדה שם, מזינים מזהה למערך הנתונים בהתאם לדרישות לגבי התווים המותרים והגודל של מערך הנתונים.
בוחרים אחד מסוגי המיקומים הבאים:
אזור. מערך הנתונים נמצא באופן קבוע ב Google Cloud אזור אחד. אחרי שבוחרים באפשרות הזו, מקלידים או בוחרים מיקום בשדה אזור.
במספר אזורים. מערך הנתונים נמצא באופן קבוע במיקום שכולל כמה Google Cloud אזורים. אחרי שבוחרים באפשרות הזו, מקלידים או בוחרים מיקום של כמה אזורים בשדה Multi-region.
בקטע הצפנה, בוחרים באחד מסוגי ההצפנה הבאים:
Google-managed encryption key: שיטת ברירת המחדל להצפנה. משתמשים בשיטה הזו אם רוצים ש-Google תנהל את מפתחות ההצפנה שמגנים על הנתונים במערך הנתונים הזה של Cloud Healthcare API.
מפתח Cloud KMS: שימוש במפתח הצפנה בניהול הלקוח (CMEK).
לוחצים על יצירה. מוצג הדף Browser (דפדפן). מערך הנתונים החדש מוצג ברשימת מערכי הנתונים.
gcloud
יוצרים את מערך הנתונים באמצעות הפקודה gcloud healthcare datasets create.
לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:
DATASET_ID: מזהה שצריך לעמוד בדרישות של התווים המותרים והגודל של מערך הנתונים-
LOCATION: מיקום נתמך למערך הנתונים -
KEY_RESOURCE_ID: מזהה המשאב של מפתח Cloud KMS, בפורמטprojects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
מריצים את הפקודה הבאה:
Linux, macOS או Cloud Shell
gcloud healthcare datasets create DATASET_ID \ --location=LOCATION \ --encryption-key=KEY_RESOURCE_ID
Windows (PowerShell)
gcloud healthcare datasets create DATASET_ID ` --location=LOCATION ` --encryption-key=KEY_RESOURCE_ID
Windows (cmd.exe)
gcloud healthcare datasets create DATASET_ID ^ --location=LOCATION ^ --encryption-key=KEY_RESOURCE_ID
אמורים לקבל תגובה שדומה לזו:
Create request issued for: [DATASET_ID] Waiting for operation [projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID] to complete... Created dataset [DATASET_ID].
REST
יוצרים את מערך הנתונים באמצעות השיטה
datasets.create.לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud DATASET_ID: מזהה שצריך לעמוד בדרישות של התווים המותרים והגודל של מערך הנתונים-
LOCATION: מיקום נתמך למערך הנתונים -
KEY_RESOURCE_ID: מזהה המשאב של מפתח Cloud KMS, בפורמטprojects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
תוכן בקשת JSON:
{ "encryptionSpec": { "kmsKeyName": "KEY_RESOURCE_ID" } }כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:
הפלט שיתקבל: התשובה מכילה מזהה של פעולה ממושכת (LRO). פעולות ארוכות טווח מוחזרות כשקריאות לשיטות עשויות להימשך זמן נוסף עד להשלמה. שימו לב לערך שלcurl
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:cat > request.json << 'EOF' { "encryptionSpec": { "kmsKeyName": "KEY_RESOURCE_ID" } } EOFלאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets?datasetId=DATASET_ID"PowerShell
שומרים את גוף הבקשה בקובץ בשם
request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:@' { "encryptionSpec": { "kmsKeyName": "KEY_RESOURCE_ID" } } '@ | Out-File -FilePath request.json -Encoding utf8לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets?datasetId=DATASET_ID" | Select-Object -Expand ContentAPIs Explorer
מעתיקים את גוף הבקשה ופותחים את דף העזר של השיטה. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. מדביקים את גוף הבקשה בכלי הזה, ממלאים את כל שדות החובה ולוחצים על Execute.
OPERATION_ID. תצטרכו את הערך הזה בשלב הבא.-
כדי לקבל את הסטטוס של הפעולה הממושכת, משתמשים בשיטה
projects.locations.datasets.operations.get.לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud -
LOCATION: המיקום של מערך הנתונים -
DATASET_ID: מזהה קבוצת הנתונים -
OPERATION_ID: המזהה שמוחזר מהפעולה הממושכת
כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:
הפלט שיתקבל: כשהתשובה מכילה את הערךcurl
מריצים את הפקודה הבאה:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
מריצים את הפקודה הבאה:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentAPIs Explorer
פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.
"done": true, סימן שהפעולה הממושכת הסתיימה.-
איך בודקים אם מערך נתונים מוגן על ידי Cloud KMS
לכל אחד מהמפתחות שיצרתם או שמגנים על מערכי הנתונים שלכם ב-Cloud Healthcare API, תוכלו לראות אילו משאבים המפתח מגן עליהם באמצעות מעקב אחר השימוש במפתח. מידע נוסף מופיע במאמר הצגת השימוש במפתחות.
רוטציית מפתחות
Cloud KMS תומך ברוטציית מפתחות אוטומטית וידנית לגרסה חדשה.
רוטציה של מפתח גורמת לדברים הבאים:
- מערכי נתונים של Cloud Healthcare API שנוצרו אחרי הרוטציה משתמשים בגרסת המפתח החדשה להצפנה ולכל הפעולות.
- משאבים במערך נתונים קיים שמוצפנים באמצעות המפתח לא מוצפנים מחדש באופן אוטומטי באמצעות גרסת המפתח הראשי החדשה.
כדי שההצפנה תפעל, כל גרסאות המפתח צריכות להיות זמינות. אחרת, מערך הנתונים של Cloud Healthcare API מושבת וכל הבקשות למערך הנתונים נכשלות. מידע נוסף זמין במאמרים בנושא שיקולים לגבי מפתחות חיצוניים והשבתת מערכי נתונים ומחיקה קבועה של מערכי נתונים.
הסרת הגישה ל-Cloud Healthcare API למפתח Cloud KMS
יש לכם שליטה במפתחות ואתם יכולים להשבית אותם, להשמיד אותם או לבטל את ההרשאות שלהם, כך שלא תהיה ל-Cloud Healthcare API גישה לנתונים מוצפנים באמצעות CMEK. אחרי שמשמידים מפתח או גרסת מפתח שמשויכים למערך נתונים של Cloud Healthcare API, כל הנתונים שהוצפנו באמצעות המפתח או גרסת המפתח האלה נמחקים באופן סופי.
יש עיכוב בין השבתה של מפתח או גרסת מפתח לבין המועד שבו אי אפשר יותר להשתמש בהם. יש גם עיכוב בין הרגע שבו מבטלים את ההרשאות של חשבון השירות של סוכן השירות של Cloud Healthcare במפתח לבין הרגע שבו כבר אי אפשר לגשת אליו. מידע נוסף זמין במאמר עקביות של משאבי Cloud KMS.
ייצוא וייבוא של נתונים למופע עם הפעלה של CMEK
כדי לשמור על הצפנת הנתונים באמצעות מפתח בניהול הלקוח במהלך פעולת ייצוא, צריך להגדיר CMEK ביעד האחסון לפני שמתחילים את הייצוא. כשמייבאים נתונים מאחסון שלא מוצפן ב-CMEK או מאחסון שמוצפן ב-CMEK, אין דרישות או הגבלות מיוחדות לייבוא נתונים למערך נתונים שמוצפן ב-CMEK.
הגבלות
- אין תמיכה בהצדקות לגישה למפתחות עם Cloud External Key Manager.
- יש מגבלה של 10 מערכי נתונים עם CMEK לכל פרויקט בתקופה של 30 יום. המכסה הזו נאכפת על ידי מדד המכסה
cmek_datasets. - אין תמיכה ב-VPC Service Controls עם CMEK.
- אין תמיכה במדיניות הארגון ל-CMEK.
תמחור
החיוב על מערכי נתונים זהה בין אם הם מוצפנים באמצעות CMEK ובין אם לא. מידע נוסף מופיע במאמר בנושא תמחור של Cloud Healthcare API.
מערכת Cloud KMS מחייבת אתכם גם על עלות המפתח וגם על כל פעולה קריפטוגרפית שמתבצעת במפתח הזה. הפעולות האלה מתרחשות כש-Cloud Healthcare API משתמש במפתח להצפנה או לפענוח. העלויות האלה צפויות להיות מינימליות, על סמך המספר הצפוי של פעולות קריפטוגרפיות שנוצרות על ידי Cloud Healthcare API. מידע נוסף זמין במאמר בנושא תמחור של Cloud KMS.
מכסות של Cloud KMS ו-Cloud Healthcare API
כשמשתמשים ב-CMEK ב-Cloud Healthcare API, הפרויקטים יכולים לנצל את המכסות של בקשות קריפטוגרפיות ב-Cloud KMS.
מערכי נתונים של Cloud Healthcare API שמוצפנים באמצעות CMEK, ומאגרי DICOM, FHIR ו-HL7v2 שלהם, צורכים את המכסות האלה לכל הפעולות חוץ מ-datasets.get.
פעולות הצפנה ופענוח באמצעות מפתחות CMEK משפיעות על מכסות Cloud KMS רק אם משתמשים במפתחות חומרה (Cloud HSM) או במפתחות חיצוניים (Cloud EKM).
מידע נוסף זמין במאמר בנושא מכסות ב-Cloud KMS.
המאמרים הבאים
- מידע נוסף על CMEK באופן כללי, כולל מתי ולמה כדאי להפעיל אותו, זמין במאמר מפתחות הצפנה בניהול הלקוח (CMEK).