כשמשתמשים ב-Managed Service for Apache Spark, נתוני האשכולות והמשימות מאוחסנים בדיסקים אחסון מתמידים (persistent disks) שמשויכים למכונות הווירטואליות של Compute Engine באשכול, ובקטגוריית Staging ב-Cloud Storage. כברירת מחדל, הנתונים של דיסק אחסון מתמיד (persistent disk) והקטגוריה מוצפנים באמצעות מפתח להצפנת נתונים (DEK) שנוצר על ידי Google ומפתח להצפנת מפתחות הצפנה (KEK).
אם אתם רוצים לשלוט במפתח להצפנת מפתחות (KEK) ולנהל אותו, אתם יכולים להשתמש במפתחות הצפנה בניהול הלקוח (CMEK) (Google ממשיכה לשלוט במפתח להצפנת נתונים (DEK)). מידע נוסף על מפתחות הצפנת הנתונים בחשבון Google זמין במאמר הצפנה במנוחה.
הצפנת נתונים באשכול באמצעות CMEK
אתם יכולים להשתמש במפתחות הצפנה בניהול הלקוח (CMEK) כדי להצפין את נתוני האשכול הבאים:
- נתונים בדיסקי אחסון מתמיד (persistent disk) שמחוברים למכונות וירטואליות של אשכולות Managed Service for Apache Spark
- נתוני ארגומנטים של משימות שנשלחו לאשכול, כמו מחרוזת שאילתה שנשלחה עם משימת Spark SQL
- מטא-נתונים של אשכולות, פלט של מנהלי משימות ונתונים אחרים שנכתבים בקטגוריית ה-Staging של אשכול Managed Service for Apache Spark
לפני שמתחילים
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc, Cloud Key Management Service, Compute Engine, and Cloud Storage APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
Configure the gcloud CLI to use your federated identity.
For more information, see Sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
יצירת מפתחות
כדי להגן על המשאבים של Managed Service for Apache Spark באמצעות CMEK, אתם יכולים ליצור מפתחות באופן אוטומטי או ידני.
יצירת מפתחות אוטומטית
משתמשים ב-Autokey כדי להקצות ולהגדיר CMEK באופן אוטומטי. Autokey יוצר אוספי מפתחות ומפתחות לפי דרישה כשנוצרים משאבים. סוכני השירות משתמשים במפתחות לפעולות הצפנה ופענוח. במקרה הצורך, Autokey יוצר את הסוכנים ומקצה להם את התפקידים הנדרשים בניהול הזהויות והרשאות הגישה (IAM). מידע נוסף זמין במאמר סקירה כללית על Autokey.
יצירת מפתח באופן ידני
כדי ליצור באופן ידני מפתחות להצפנת CMEK של נתוני אשכול:
יוצרים מפתח אחד או יותר באמצעות Cloud KMS. שם המשאב, שנקרא גם מזהה המשאב של המפתח, משמש בשלבים הבאים והוא בנוי באופן הבא:
המפתח (CMEK) צריך להיות באותו מיקום שבו נמצא המשאב המוצפן. לדוגמה, אם משתמשים ב-CMEK כדי להצפין משאב באזורprojects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
us-central1, גם ה-CMEK צריך להיות באזורus-central1.כדי לוודא שלכל אחד מחשבונות השירות הבאים, חשבון השירות של סוכן השירות של Compute Engine, חשבון השירות של סוכן השירות של Cloud Storage וחשבון השירות של סוכן השירות של Managed Service for Apache Spark, יש את ההרשאות הנדרשות כדי להגן על המשאבים באמצעות מפתחות Cloud KMS, צריך לבקש מהאדמין להקצות את תפקיד ה-IAM הצפנה/פענוח של Cloud KMS CryptoKey (
roles/cloudkms.cryptoKeyEncrypterDecrypter) לכל אחד מחשבונות השירות הבאים, חשבון השירות של סוכן השירות של Compute Engine, חשבון השירות של סוכן השירות של Cloud Storage וחשבון השירות של סוכן השירות של Managed Service for Apache Spark, בפרויקט.דוגמה להקצאת התפקיד "הצפנה/פענוח של מפתח הצפנה ב-Cloud KMS" לחשבון השירות של סוכן השירות של Managed Service for Apache Spark באמצעות Google Cloud CLI:
gcloud projects add-iam-policy-binding KMS_PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@dataproc-accounts. \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
מחליפים את מה שכתוב בשדות הבאים:
KMS_PROJECT_ID: מזהה הפרויקט ב- Google Cloud שמכיל את המפתח של Cloud KMS.
PROJECT_NUMBER: מספר הפרויקט (לא מזהה הפרויקט) של הפרויקט ב- Google Cloud שמריץ משאבים של Managed Service for Apache Spark.אם התפקיד "סוכן שירות של Managed Service for Apache Spark" לא משויך לחשבון השירות של סוכן השירות של Managed Service for Apache Spark, צריך להוסיף את ההרשאה
serviceusage.services.useלתפקיד בהתאמה אישית שמשויך לחשבון השירות של סוכן השירות של Managed Service for Apache Spark.
יצירת אשכול עם CMEK
כשיוצרים את אשכול Managed Service for Apache Spark, מעבירים את מזהה המשאב של המפתח.
CLI של gcloud
- כדי להצפין את נתוני הדיסק לאחסון מתמיד של האשכול באמצעות המפתח, מעבירים את מזהה המשאב של המפתח לדגל
--gce-pd-kms-keyכשיוצרים את האשכול.gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --gce-pd-kms-key='projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME' \ other arguments ...אפשר לאמת את הגדרת המפתח באמצעות כלי שורת הפקודה
gcloud.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGIONקטע קוד של פלט פקודה:
... configBucket: dataproc- ... encryptionConfig: gcePdKmsKeyName: projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name ... - כדי להצפין את נתוני הדיסק לאחסון מתמיד של האשכול ואת נתוני הארגומנטים של המשימה באמצעות המפתח, מעבירים את מזהה המשאב של המפתח לדגל
--kms-keyכשיוצרים את האשכול. במאמר [Cluster.EncryptionConfig.kmsKey](/managed-spark/docs/reference/rest/v1/ClusterConfig#EncryptionConfig.FIELDS.kms_key) מפורטים סוגי העבודה והארגומנטים שמוצפנים באמצעות הדגל `--kms-key` .gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --kms-key='projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME' \ other arguments ...אתם יכולים לאמת את הגדרות המפתח באמצעות הפקודה
dataproc clusters describeשל ה-CLI של gcloud. מזהה המשאב של המפתח מוגדר ב-gcePdKmsKeyNameוב-kmsKeyכדי להשתמש במפתח להצפנת הדיסק לאחסון מתמיד של האשכול ונתוני הארגומנטים של המשימה.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGIONקטע קוד של פלט פקודה:
... configBucket: dataproc- ... encryptionConfig: gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME kmsKey: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME ... - כדי להצפין את המטא-נתונים של האשכול, את מנהל ההתקן של המשימה ונתוני פלט אחרים שנכתבו בקטגוריית ה-Staging של Managed Service for Apache Spark ב-Cloud Storage:
- יצירת קטגוריה משלכם עם CMEK. כשמוסיפים את המפתח לקטגוריה, משתמשים במפתח שיצרתם בשלב 1.
- מעבירים את שם הקטגוריה לדגל
--bucketכשיוצרים את האשכול.
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --bucket=CMEK_BUCKET_NAME \ other arguments ...אפשר גם להעביר קטגוריות עם CMEK לפקודה `gcloud dataproc jobs submit` אם המשימה מקבלת ארגומנטים של קטגוריות, כמו בדוגמה הבאה של `cmek-bucket`:
gcloud dataproc jobs submit pyspark gs://cmek-bucket/wordcount.py \ --region=region \ --cluster=cluster-name \ -- gs://cmek-bucket/shakespeare.txt gs://cmek-bucket/counts
API בארכיטקטורת REST
- כדי להצפין את הנתונים בדיסק אחסון מתמיד (persistent disk) של ה-VM באשכול באמצעות המפתח שלכם, צריך לכלול את השדה ClusterConfig.EncryptionConfig.gcePdKmsKeyName כחלק מבקשת cluster.create.
אפשר לאמת את הגדרת המפתח באמצעות הפקודה
dataproc clusters describeשל ה-CLI של gcloud.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGIONקטע קוד של פלט פקודה:
... configBucket: dataproc- ... encryptionConfig: gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME ... - כדי להצפין את נתוני הדיסק הקבוע של המכונה הווירטואלית באשכול ואת נתוני הארגומנטים של המשימה באמצעות המפתח שלכם, צריך לכלול את השדה
Cluster.EncryptionConfig.kmsKeyכחלק מבקשת cluster.create. ברשימה Cluster.EncryptionConfig.kmsKey מפורטים סוגי העבודות והארגומנטים שמוצפנים באמצעות השדה--kms-key.אתם יכולים לאמת את הגדרות המפתח באמצעות הפקודה
dataproc clusters describeשל ה-CLI של gcloud. מזהה המשאב של המפתח מוגדר ב-gcePdKmsKeyNameוב-kmsKeyכדי להשתמש במפתח להצפנת הדיסק לאחסון מתמיד של האשכול ונתוני הארגומנטים של המשימה.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGIONקטע קוד של פלט פקודה:
... configBucket: dataproc- ... encryptionConfig: gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME kmsKey: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME ... - כדי להצפין מטא-נתונים של אשכולות, מנהלי התקנים של משימות ונתוני פלט אחרים שנכתבו בקטגוריית ה-Staging של Managed Service for Apache Spark ב-Cloud Storage:
- יצירת קטגוריה משלכם עם CMEK. כשמוסיפים את המפתח לקטגוריה, משתמשים במפתח שיצרתם בשלב 1.
- מעבירים את שם הקטגוריה לשדה ClusterConfig.configBucket כחלק מבקשת cluster.create.
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --bucket=CMEK_BUCKET_NAME \ other arguments ...אפשר גם להעביר קטגוריות עם CMEK לפקודה `gcloud dataproc jobs submit` אם המשימה מקבלת ארגומנטים של קטגוריות, כמו בדוגמה הבאה של `cmek-bucket`:
gcloud dataproc jobs submit pyspark gs://cmek-bucket/wordcount.py \ --region=region \ --cluster=cluster-name \ -- gs://cmek-bucket/shakespeare.txt gs://cmek-bucket/counts
שימוש ב-CMEK עם נתונים של תבניות של תהליכי עבודה
אפשר להצפין באמצעות CMEK את נתוני הארגומנטים של משימות בתבניות של תהליכי עבודה ב-Managed Service for Apache Spark, כמו מחרוזת השאילתה של משימת Spark SQL. כדי להשתמש ב-CMEK עם תבנית של תהליך עבודה ב-Managed Service for Apache Spark, צריך לבצע את שלבים 1, 2 ו-3 בקטע הזה. במאמר WorkflowTemplate.EncryptionConfig.kmsKey מפורטים סוגי העבודות והארגומנטים של תבניות תהליכי עבודה שמוצפנים באמצעות CMEK כשהתכונה הזו מופעלת.
- יוצרים מפתח באמצעות Cloud KMS.
שם המשאב של המפתח, שבו משתמשים בשלבים הבאים, בנוי באופן הבא:
projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
כדי לאפשר לחשבונות השירות של Managed Service for Apache Spark להשתמש במפתח:
מקצים את התפקיד
CryptoKey Encrypter/Decrypterשל Cloud KMS לחשבון השירות של סוכן השירות של Managed Service for Apache Spark. אתם יכולים להשתמש ב-CLI של gcloud כדי להקצות את התפקיד:gcloud projects add-iam-policy-binding KMS_PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@dataproc-accounts. \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
מחליפים את מה שכתוב בשדות הבאים:
KMS_PROJECT_ID: מזהה הפרויקט ב- Google Cloud שבו פועל Cloud KMS. הפרויקט הזה יכול להיות גם הפרויקט שבו מופעלים המשאבים של Managed Service for Apache Spark.
PROJECT_NUMBER: מספר הפרויקט (לא מזהה הפרויקט) של הפרויקט ב- Google Cloud שמריץ משאבים של Managed Service for Apache Spark.
מפעילים את Cloud KMS API בפרויקט שבו פועלים המשאבים של Managed Service for Apache Spark.
אם התפקיד של סוכן השירות של Managed Service for Apache Spark לא משויך לחשבון של סוכן השירות של Managed Service for Apache Spark, מוסיפים את ההרשאה
serviceusage.services.useלתפקיד בהתאמה אישית שמשויך לחשבון של סוכן השירות של Managed Service for Apache Spark. אם התפקיד "סוכן שירות של Managed Service for Apache Spark" כבר מוקצה לחשבון השירות של Managed Service for Apache Spark, אתם יכולים לדלג על השלב הזה.
אתם יכולים להשתמש ב-CLI של gcloud או ב-Dataproc API כדי להגדיר את המפתח שיצרתם בשלב 1 בתהליך עבודה. אחרי שמגדירים את המפתח בתהליך עבודה, כל הארגומנטים והשאילתות של המשימות בתהליך העבודה מוצפנים באמצעות המפתח, לכל סוגי העבודה והארגומנטים שמפורטים ב-WorkflowTemplate.EncryptionConfig.kmsKey.
CLI של gcloud
מעבירים את מזהה המשאב של המפתח לדגל
--kms-keyכשיוצרים את תבנית תהליך העבודה באמצעות הפקודה gcloud dataproc workflow-templates create.לדוגמה:
אפשר לאמת את הגדרת המפתח באמצעות כלי שורת הפקודהgcloud dataproc workflow-templates create my-template-name \ --region=region \ --kms-key='projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name' \ other arguments ...
gcloud.gcloud dataproc workflow-templates describe TEMPLATE_NAME \ --region=REGION
... id: my-template-name encryptionConfig: kmsKey: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME ...
API בארכיטקטורת REST
משתמשים ב-WorkflowTemplate.EncryptionConfig.kmsKey כחלק מבקשת workflowTemplates.create.
כדי לאמת את הגדרת המפתח, אפשר לשלוח בקשת workflowTemplates.get. קובץ ה-JSON שמוחזר מכיל את
kmsKey:... "id": "my-template-name", "encryptionConfig": { "kmsKey": "projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name" },
Cloud External Key Manager
Cloud External Key Manager (Cloud EKM) מאפשר להגן על הנתונים של Managed Service for Apache Spark באמצעות מפתחות שמנוהלים על ידי שותף נתמך לניהול מפתחות חיצוניים. השלבים לשימוש ב-Cloud EKM ב-Managed Service for Apache Spark זהים לשלבים להגדרת מפתחות CMEK, עם ההבדל הבא: המפתח שלכם מצביע על URI של המפתח שמנוהל באופן חיצוני (ראו סקירה כללית על Cloud EKM).
שגיאות ב-Cloud EKM
כשמשתמשים ב-Cloud EKM, יכול להיות שהניסיון ליצור אשכול ייכשל בגלל שגיאות שקשורות לקלט, ל-Cloud EKM, למערכת של השותף החיצוני לניהול מפתחות או לתקשורת בין Cloud EKM למערכת החיצונית. אם אתם משתמשים ב-API בארכיטקטורת REST או במסוף Google Cloud , השגיאות נרשמות ב-Cloud Logging. בכרטיסייה View Log אפשר לבדוק את השגיאות של האשכול שנכשל.