כברירת מחדל, Dataflow מצפין את תוכן הלקוחות במצב מנוחה. Dataflow מטפל בהצפנה בשבילכם בלי שתצטרכו לבצע פעולות נוספות. האפשרות הזו נקראת הצפנת ברירת המחדל של Google.
אם אתם רוצים לשלוט במפתחות ההצפנה, אתם יכולים להשתמש במפתחות הצפנה בניהול הלקוח (CMEK) ב-Cloud KMS עם שירותים שמשולבים ב-CMEK, כולל Dataflow. כשמשתמשים במפתחות של Cloud KMS, אפשר לשלוט ברמת ההגנה, במיקום, בלוח הזמנים של הרוטציה, בהרשאות השימוש והגישה ובגבולות הקריפטוגרפיים שלהם. באמצעות Cloud KMS אפשר גם לראות יומני ביקורת ולשלוט במחזורי החיים של המפתחות. במקום ש-Google תהיה הבעלים של מפתחות ההצפנה (KEK) הסימטריים שמגינים על הנתונים שלכם ותנהל אותם, אתם שולטים במפתחות האלה ומנהלים אותם ב-Cloud KMS.
אחרי שתגדירו את המשאבים עם מפתחות CMEK, חוויית הגישה למשאבי Dataflow תהיה דומה לשימוש בהצפנת ברירת המחדל של Google. מידע נוסף על אפשרויות ההצפנה מופיע במאמר מפתחות הצפנה בניהול הלקוח (CMEK).
אתם יכולים ליצור פייפליין באצווה או פייפליין זורם שמוגן באמצעות CMEK, או לגשת לנתונים שמוגנים באמצעות CMEK במקורות ובכיורים.
מכסות ב-Cloud KMS וב-Dataflow
כשמשתמשים ב-CMEK ב-Dataflow, הפרויקטים שלכם יכולים לצרוך מכסות של בקשות קריפטוגרפיות ב-Cloud KMS. לדוגמה, צינורות עיבוד נתונים של Dataflow יכולים לצרוך את המכסות האלה כשצינור עיבוד הנתונים ניגש לנתונים שמוגנים באמצעות CMEK במקורות ובכיורים, או כשמאחזרים את המצב של צינור עיבוד נתונים שמוצפן באמצעות CMEK. למידע נוסף, קראו את הקטע הצפנה של מיקומי מצב צינור עיבוד הנתונים בדף הזה.
פעולות הצפנה ופענוח באמצעות מפתחות CMEK משפיעות על המכסות של Cloud KMS בדרכים הבאות:
- במפתחות CMEK של תוכנה שנוצרו ב-Cloud KMS, לא נעשה שימוש במכסה של Cloud KMS.
- במפתחות CMEK חיצוניים (לפעמים נקראים מפתחות Cloud EKM), פעולות ההצפנה והפענוח נספרות במסגרת המכסות של Cloud EKM בפרויקט שמכיל את המפתח.
מידע נוסף מופיע במאמר מכסות ב-Cloud KMS.
תמיכה ומגבלות
אפשר להשתמש ב-Cloud KMS בגרסאות הבאות של Apache Beam SDK:
- Java SDK בגרסה 2.13.0 ואילך
- Python SDK בגרסה 2.13.0 ואילך
- Go SDK בגרסה 2.40.0 ואילך
Cloud KMS עם Dataflow תומך במפתחות אזוריים. אם תעקפו את האזור או התחום של ה-worker בצינור עיבוד הנתונים כדי להשתמש באזור אחר מזה שמשויך למפתחות, המפתחות האזוריים לא יפעלו.
האזור של ה-CMEK והאזור של משימת Dataflow חייבים להיות זהים.
אין תמיכה במיקומים גלובליים ובמספר אזורים. אי אפשר להשתמש במפתחות גלובליים ובמפתחות במספר אזורים עם צינורות עיבוד נתונים ב-Dataflow.
הצפנה של פריטי מידע שקשורים למצב הפייפליין
הנתונים שצינור עיבוד נתונים ב-Dataflow קורא ממקורות נתונים שהמשתמשים ציינו מוצפנים, חוץ ממפתחות הנתונים שאתם מציינים לטרנספורמציות מבוססות-מפתחות במשימות סטרימינג.
במשימות באצווה, כל הנתונים, כולל מפתחות הנתונים שאתם מציינים לטרנספורמציות מבוססות-מפתח, תמיד מוגנים באמצעות הצפנת CMEK.
במשימות סטרימינג שנוצרו אחרי 7 במרץ 2024, כל נתוני המשתמשים מוצפנים באמצעות CMEK.
במשימות סטרימינג שנוצרו לפני 7 במרץ 2024, מפתחות הנתונים שמשמשים לפעולות שמבוססות על מפתחות, כמו חלונות, קיבוץ וצירוף, לא מוגנים באמצעות הצפנת CMEK. כדי להפעיל את ההצפנה הזו במשימות, מרוקנים או מבטלים את המשימה ואז מפעילים אותה מחדש.
המטא-נתונים של המשימה לא מוצפנים באמצעות מפתחות Cloud KMS. המטא-נתונים של המשימה כוללים את הפרטים הבאים:
- נתונים שסופקו על ידי המשתמש, כמו שמות של משימות, ערכי פרמטרים של משימות ותרשים צינור עיבוד נתונים
- נתונים שנוצרו על ידי המערכת, כמו מזהי משימות וכתובות IP של עובדים
הצפנה של מיקומי מצב הפייפליין
מיקומי האחסון הבאים מוגנים באמצעות מפתחות Cloud KMS:
- כונני Persistent Disk שמחוברים ל-workers של Dataflow ומשמשים לאחסון מצב סטרימינג ו-shuffle שמבוסס על Persistent Disk.
- מצב ארגון הנתונים של Dataflow לצינורות עיבוד נתונים באצווה.
- קטגוריות של Cloud Storage שבהן מאוחסנים נתוני ייצוא או ייבוא זמניים. Dataflow תומך רק במפתחות ברירת מחדל שהמשתמש הגדיר ברמת הקטגוריה.
- קטגוריות של Cloud Storage שמשמשות לאחסון קבצים בינאריים שמכילים קוד של צינור עיבוד נתונים. Dataflow תומך רק במפתחות ברירת מחדל שהמשתמש הגדיר ברמת הקטגוריה.
- קטגוריות של Cloud Storage שמשמשות לאחסון נתונים שנדגמו מהצינור, כשדגימת הנתונים מופעלת.
- מצב מנוע הסטרימינג של Dataflow לפייפליינים זורמים.
מפתחות חיצוניים
אתם יכולים להשתמש ב-Cloud External Key Manager (Cloud EKM) כדי להצפין נתונים ב-Google Cloud באמצעות מפתחות חיצוניים שאתם מנהלים.
כשאתם משתמשים במפתח Cloud EKM, ל-Google אין שליטה על הזמינות של המפתח שמנוהל באופן חיצוני. אם המפתח לא זמין במהלך יצירת המשימה או הצינור, המשימה או הצינור יבוטלו.
שיקולים נוספים לשימוש במפתחות חיצוניים מפורטים במאמר Cloud External Key Manager.
לפני שמתחילים
מוודאים שמותקנת גרסה 2.13.0 ואילך של Apache Beam SDK ל-Java, גרסה 2.13.0 ואילך של Apache Beam SDK ל-Python או גרסה 2.40.0 ואילך של Apache Beam SDK ל-Go.
למידע נוסף, קראו את המאמר התקנת Apache Beam SDK.
מחליטים אם להריץ את Dataflow ואת Cloud KMS באותו פרויקט ב- Google Cloud או בפרויקטים שונים. בדף הזה נעשה שימוש במוסכמה הבאה:
-
PROJECT_IDהוא מזהה הפרויקט שבו פועל Dataflow. -
PROJECT_NUMBERהוא מספר הפרויקט שבו פועל Dataflow. -
KMS_PROJECT_IDהוא מזהה הפרויקט שבו פועל Cloud KMS.
למידע על מזהי פרויקטים ומספרי פרויקטים ב- Google Cloud , קראו את המאמר זיהוי פרויקטים.
-
בפרויקט Google Cloud שבו רוצים להריץ את Cloud KMS:
- מפעילים את Cloud KMS API.
- יוצרים אוסף מפתחות ומפתח, כמו שמוסבר במאמר יצירת מפתחות סימטריים. Cloud KMS ו-Dataflow הם שירותים אזוריים. האזור של ה-CMEK והאזור של משימת Dataflow חייבים להיות זהים. אל תשתמשו במפתחות גלובליים או במפתחות במספר אזורים בצינורות עיבוד הנתונים של Dataflow. במקום זאת, צריך להשתמש במפתחות אזוריים.
מתן הרשאות הצפנה/פענוח
מקצים את התפקיד
Cloud KMS CryptoKey Encrypter/Decrypterלחשבון השירות של Dataflow. ההרשאה הזו נותנת לחשבון השירות של Dataflow הרשאה להצפין ולפענח באמצעות ה-CMEK שציינתם. אם אתם משתמשים במסוףGoogle Cloud ובדף Create job from template, ההרשאה הזו ניתנת באופן אוטומטי ואפשר לדלג על השלב הזה.משתמשים ב-Google Cloud CLI כדי להקצות את התפקיד:
gcloud projects add-iam-policy-binding KMS_PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@dataflow-service-producer-prod. \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
מחליפים את
KMS_PROJECT_IDבמזהה הפרויקט ב- Google Cloud שבו פועל Cloud KMS, ואתPROJECT_NUMBERבמספר הפרויקט (לא במזהה הפרויקט) ב- Google Cloud שבו פועלים משאבי Dataflow.מקצים את התפקיד
Cloud KMS CryptoKey Encrypter/Decrypterלחשבון השירות של Compute Engine. ההרשאה הזו נותנת לחשבון השירות של Compute Engine הרשאה להצפין ולפענח באמצעות ה-CMEK שציינתם.משתמשים ב-Google Cloud CLI כדי להקצות את התפקיד:
gcloud projects add-iam-policy-binding KMS_PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@compute-system. \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
מחליפים את
KMS_PROJECT_IDבמזהה הפרויקט ב- Google Cloud שבו פועל Cloud KMS, ואתPROJECT_NUMBERבמספר הפרויקט (לא במזהה הפרויקט) ב- Google Cloud שבו פועלים המשאבים של Compute Engine.
יצירת צינור עיבוד נתונים שמוגן באמצעות Cloud KMS
כשיוצרים פייפליין באצווה או פייפליין זורם, אפשר לבחור מפתח Cloud KMS כדי להצפין את מצב הפייפליין. מצב צינור עיבוד הנתונים הוא הנתונים שמאוחסנים על ידי Dataflow באחסון זמני.
ממשק שורת הפקודה (CLI)
כדי ליצור צינור עיבוד נתונים חדש עם מצב שמוגן באמצעות מפתח Cloud KMS, מוסיפים את הדגל הרלוונטי לפרמטרים של צינור עיבוד הנתונים. בדוגמה הבאה מוסבר איך מריצים צינור עיבוד נתונים לספירת מילים באמצעות Cloud KMS.
שימוש ב-Autokey
אם עדיין לא עשיתם זאת, הפעילו את Cloud KMS Autokey.
כדי להשתמש ב-Autokey עם צינורות עיבוד נתונים שנוצרו משורת הפקודה, פועלים לפי ההוראות במאמר שימוש ב-Autokey עם משאבי Dataflow כדי להקצות מפתח, ואז משתמשים בו במקום KMS_KEY.
Java
כשמשתמשים במפתח Cloud KMS, אי אפשר ליצור ב-Dataflow נתיבים ב-Cloud Storage כברירת מחדל לקבצים זמניים. חובה לציין את gcpTempLocation.
mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \ -Dexec.args="--inputFile=gs://dataflow-samples/shakespeare/kinglear.txt \ --output=gs://STORAGE_BUCKET/counts \ --runner=DataflowRunner --project=PROJECT_ID \ --gcpTempLocation=gs://STORAGE_BUCKET/tmp \ --dataflowKmsKey=KMS_KEY" -Pdataflow-runner
Python
כשמשתמשים במפתח Cloud KMS, אי אפשר ליצור ב-Dataflow נתיבים ב-Cloud Storage כברירת מחדל לקבצים זמניים. חובה לציין את gcpTempLocation.
python -m apache_beam.examples.wordcount \ --input gs://dataflow-samples/shakespeare/kinglear.txt \ --output gs://STORAGE_BUCKET/counts \ --runner DataflowRunner \ --region HOST_GCP_REGION \ --project PROJECT_ID \ --temp_location gs://STORAGE_BUCKET/tmp/ \ --dataflow_kms_key=KMS_KEY
המשך
כשמשתמשים במפתח Cloud KMS, אי אפשר ליצור ב-Dataflow נתיבים ב-Cloud Storage כברירת מחדל לקבצים זמניים. חובה לציין את gcpTempLocation.
wordcount --project HOST_PROJECT_ID \ --region HOST_GCP_REGION \ --runner dataflow \ --staging_location gs://STORAGE_BUCKET/staging \ --temp_location gs://STORAGE_BUCKET/temp \ --input gs://dataflow-samples/shakespeare/kinglear.txt \ --output gs://STORAGE_BUCKET/output \ --dataflow_kms_key=KMS_KEY
מסוףGoogle Cloud
- פותחים את ממשק המעקב של Dataflow.
כניסה לממשק האינטרנט של Dataflow - בוחרים באפשרות Create job from template.
- בקטע Encryption, בוחרים באפשרות Customer-managed key.
בפעם הראשונה שתנסו להריץ משימה עם מפתח Cloud KMS מסוים, יכול להיות שלחשבון השירות של Compute Engine או לחשבון השירות של Dataflow לא הוענקו הרשאות להצפנה ולפענוח באמצעות המפתח הזה. במקרה כזה, תופיע הודעת אזהרה שתבקש מכם לתת את ההרשאה לחשבון השירות.
אימות השימוש במפתחות Cloud KMS
אתם יכולים לבדוק אם הצינור משתמש במפתח Cloud KMS באמצעות מסוףGoogle Cloud או Google Cloud CLI.
המסוף
- פותחים את ממשק המעקב של Dataflow.
כניסה לממשק האינטרנט של Dataflow - כדי לראות את פרטי המשימה, בוחרים את משימת Dataflow.
- בחלונית הצדדית Job info, בודקים את השדה Encryption type כדי לראות את סוג המפתח.
- לסוג ההצפנה: "מפתח בניהול Google"
- בקטע Encryption type (סוג ההצפנה): "Customer-Managed key" (מפתח בניהול הלקוח)
- לסוג ההצפנה: "מפתח בניהול Google"
CLI
מריצים את הפקודה describe באמצעות ה-CLI של gcloud:
gcloud dataflow jobs describe JOB_ID
מחפשים את השורה שמכילה את serviceKmsKeyName. המידע הזה מראה שמפתח Cloud KMS שימש להצפנת מצב צינור עיבוד הנתונים ב-Dataflow.
כדי לוודא שהמפתחות של Cloud KMS משמשים להצפנת מקורות וכיורים, אפשר להשתמש בדפים ובכלים של המקורות והכיורים האלה במסוף Google Cloud , כולל Pub/Sub, Cloud Storage ו-BigQuery. אתם יכולים גם לאמת את השימוש במפתחות של Cloud KMS באמצעות צפייה ביומני הביקורת של Cloud KMS.
השבתה או השמדה של המפתח
אם מסיבה כלשהי אתם צריכים להשבית או להשמיד את המפתח, אתם יכולים להשתמש במסוףGoogle Cloud . גם פעולות ההשבתה וגם פעולות ההשמדה מבטלות את המשימות שמשתמשות במפתח הזה. הפעולה הזו היא סופית.
אם אתם משתמשים ב-Cloud EKM, השביתו או השמידו את המפתח במנהל המפתחות החיצוני.
אם אתם משתמשים באפשרות Streaming Engine, מומלץ ליצור תמונת מצב של המשימה לפני שמשביתים את המפתח.
הסרת הגישה של Dataflow למפתח Cloud KMS
כדי להסיר את הגישה של Dataflow למפתח Cloud KMS:
- מבטלים את התפקיד
Cloud KMS CryptoKey Encrypter/Decrypterבחשבון השירות של Dataflow באמצעות מסוףGoogle Cloud או ה-CLI של gcloud. - מבטלים את התפקיד
Cloud KMS CryptoKey Encrypter/Decrypterבחשבון השירות של Compute Engine באמצעות Google Cloud המסוף או ה-CLI של gcloud. - אפשר גם להשמיד את החומר של גרסת המפתח כדי למנוע מ-Dataflow ומשירותים אחרים לגשת למצב צינור עיבוד הנתונים. אפשר גם למחוק את המפתח או את גרסת המפתח כדי להסיר אותם מרשימות המשאבים של Cloud KMS.
אי אפשר למחוק אוספי מפתחות, אבל אין להם עלויות שניתנות לחיוב וגם לא מגבלות מכסה, ולכן אין להם השפעה על העלויות ועל מגבלות הייצור.
משימות Dataflow מאמתות מדי פעם אם חשבון השירות של Dataflow יכול להשתמש במפתח Cloud KMS שצוין. אם בקשת הצפנה או פענוח נכשלת, שירות Dataflow מפסיק את כל קליטת הנתונים והעיבוד שלהם בהקדם האפשרי. Dataflow מתחיל מיד לנקות את המשאבים של Google Cloud שמצורפים למשימה.
שימוש במקורות ובכיורים שמוגנים באמצעות מפתחות Cloud KMS
ל-Dataflow יש גישה למקורות וליעדים שמוגנים באמצעות מפתחות Cloud KMS. Google Cloud אם אתם לא יוצרים אובייקטים חדשים, אתם לא צריכים לציין את מפתח Cloud KMS של המקורות והכיורים האלה. אם יכול להיות שצינור עיבוד הנתונים ב-Dataflow ייצור אובייקטים חדשים בכיור, צריך להגדיר פרמטרים של צינור עיבוד הנתונים. הפרמטרים האלה מציינים את מפתחות Cloud KMS של אותו sink, ומעבירים את מפתח Cloud KMS הזה לשיטות המתאימות של מחבר הקלט/פלט.
הגדרות ה-CMEK של Dataflow לא רלוונטיות למקורות ולכיורים של צינור עיבוד הנתונים ב-Dataflow שלא תומכים ב-CMEK שמנוהל על ידי Cloud KMS.
הרשאות למפתחות Cloud KMS
כשאתם ניגשים לשירותים שמוגנים באמצעות מפתחות Cloud KMS, ודאו שהקציתם את התפקיד Cloud KMS CryptoKey Encrypter/Decrypter לאותו שירות. החשבונות הם בפורמט הבא:
- Cloud Storage:
service-{project_number}@gs-project-accounts. - BigQuery:
bq-{project_number}@bigquery-encryption. - Pub/Sub:
service-{project_number}@gcp-sa-pubsub.
Cloud Storage
אם אתם רוצים להגן על הקטגוריות הזמניות ועל קטגוריות ה-staging שציינתם באמצעות הפרמטרים TempLocation/temp_location ו-stagingLocation/staging_location של צינור עיבוד הנתונים, קראו את המאמר הגדרת קטגוריות של Cloud Storage שמוגנות באמצעות CMEK.
BigQuery
Java
משתמשים ב-method with_kms_key() בערכים שמוחזרים מ-BigQueryIO.readTableRows(), BigQueryIO.read(), BigQueryIO.writeTableRows() ו-BigQueryIO.write().
דוגמה לכך מופיעה במאגר Apache Beam ב-GitHub.
Python
משתמשים בארגומנט kms_key ב-BigQuerySource וב-BigQuerySink.
דוגמה לכך מופיעה במאגר Apache Beam ב-GitHub.
המשך
ב-BigQuery IOs אי אפשר להשתמש במפתח KMS ב-Go.
Pub/Sub
הגישה לנושאים שמוגנים באמצעות CMEK מתבצעת ב-Dataflow באמצעות הגדרת ה-CMEK של הנושא.
כדי לקרוא ולכתוב בנושאי Pub/Sub שמוגנים באמצעות CMEK, קראו את ההוראות לשימוש ב-CMEK ב-Pub/Sub.
רישום ביומני הביקורת של השימוש במפתחות Cloud KMS
Dataflow מאפשר ל-Cloud KMS להשתמש ביומני הביקורת של Cloud כדי לתעד פעולות במפתחות, כמו הצפנה ופענוח. Dataflow מספק את מזהה המשימה כהקשר למבצע הקריאה החוזרת ב-Cloud KMS. המזהה הזה מאפשר לכם לעקוב אחרי כל מופע שבו נעשה שימוש במפתח Cloud KMS ספציפי למשימת Dataflow.
ב-Cloud Audit Logs נשמרים יומני ביקורת לכל פרויקט, תיקייה וארגון ב- Google Cloud. יש כמה אפשרויות לצפייה ביומני הביקורת של Cloud KMS.
Cloud KMS כותב יומני ביקורת של פעילות אדמין למשימות Dataflow עם הצפנת CMEK. ביומנים האלה מתועדות פעולות שמשנות את ההגדרות או את המטא-נתונים של משאב. אי אפשר להשבית את יומני הביקורת Admin Activity.
אם מפעילים באופן מפורש את יומני הביקורת של Data Access, הם נכתבים ב-Cloud KMS בשביל משימות Dataflow עם הצפנת CMEK. יומני בקרת הרשאות גישה לנתונים מכילים קריאות ל-API שקוראות את ההגדרות או את המטא-נתונים של המשאבים. היומנים האלה מכילים גם קריאות ל-API שמונעות על ידי משתמשים, שיוצרות, משנות או קוראות נתוני משאבים שסופקו על ידי משתמשים. במאמר הגדרת יומני ביקורת של גישה לנתונים מוסבר איך מפעילים את כל יומני הביקורת Data Access או חלק מהם.
תמחור
אתם יכולים להשתמש במפתחות ההצפנה של Cloud KMS עם Dataflow בכל האזורים של Dataflow שבהם Cloud KMS זמין.
השילוב הזה לא כרוך בעלויות נוספות מעבר לפעולות במפתחות, שמחויבות בפרויקט ב- Google Cloud. בכל פעם שחשבון השירות של Dataflow משתמש במפתח Cloud KMS, הפעולה מחויבת לפי התעריף של פעולות המפתח ב-Cloud KMS.
מידע נוסף זמין במאמר פרטי התמחור של Cloud KMS.
פתרון בעיות
אתם יכולים להיעזר בהצעות שבקטע הזה כדי לפתור שגיאות.
אי אפשר לאמת את Cloud KMS
יכול להיות שתהליך העבודה ייכשל ותופיע השגיאה הבאה:
Workflow failed. Causes: Cloud KMS key <key-name> cannot be validated.
כדי לפתור את הבעיה, צריך לוודא שהעברתם את נתיב המפתח המלא. נראה שprojects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>. מחפשים שגיאות הקלדה אפשריות בנתיב המפתח.
אין הרשאה למפתח Cloud KMS
יכול להיות שתהליך העבודה ייכשל ותופיע השגיאה הבאה:
Workflow failed. Causes: Cloud KMS key Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource
'projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>' (or it may not exist). cannot be validated.
כדי לפתור את הבעיה, צריך לוודא שמזהה הפרויקט שמופיע בנתיב המפתח נכון. בנוסף, צריך לוודא שיש לכם הרשאה להשתמש במפתח.
מיקום המפתח ב-Cloud KMS לא תואם למיקום של משימת Dataflow
יכול להיות שתהליך העבודה ייכשל ותופיע השגיאה הבאה:
Workflow failed. Causes: Cloud KMS key projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>
can't protect resources for this job. Make sure the region of the KMS key matches the Dataflow region.
כדי לפתור את הבעיה, אם אתם משתמשים במפתח אזורי, ודאו שהמפתח של Cloud KMS נמצא באותו אזור כמו המשימה ב-Dataflow.