מפתחות הצפנה בניהול הלקוח (CMEK)

כשמשתמשים ב-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

לפני שמתחילים

  1. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. 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.enable permission. 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.

    Enable the APIs

  4. Install the Google Cloud CLI.

  5. Configure the gcloud CLI to use your federated identity.

    For more information, see Sign in to the gcloud CLI with your federated identity.

  6. To initialize the gcloud CLI, run the following command:

    gcloud init

יצירת מפתחות

כדי להגן על המשאבים של Managed Service for Apache Spark באמצעות CMEK, אתם יכולים ליצור מפתחות באופן אוטומטי או ידני.

יצירת מפתחות אוטומטית

משתמשים ב-Autokey כדי להקצות ולהגדיר CMEK באופן אוטומטי. ‫Autokey יוצר אוספי מפתחות ומפתחות לפי דרישה כשנוצרים משאבים. סוכני השירות משתמשים במפתחות לפעולות הצפנה ופענוח. במקרה הצורך, Autokey יוצר את הסוכנים ומקצה להם את התפקידים הנדרשים בניהול הזהויות והרשאות הגישה (IAM). מידע נוסף זמין במאמר סקירה כללית על Autokey.

יצירת מפתח באופן ידני

כדי ליצור באופן ידני מפתחות להצפנת CMEK של נתוני אשכול:

  1. יוצרים מפתח אחד או יותר באמצעות Cloud KMS. שם המשאב, שנקרא גם מזהה המשאב של המפתח, משמש בשלבים הבאים והוא בנוי באופן הבא:

    projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    
    המפתח (CMEK) צריך להיות באותו מיקום שבו נמצא המשאב המוצפן. לדוגמה, אם משתמשים ב-CMEK כדי להצפין משאב באזור us-central1, גם ה-CMEK צריך להיות באזור us-central1.

  2. כדי לוודא שלכל אחד מחשבונות השירות הבאים, חשבון השירות של סוכן השירות של 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.

  3. אם התפקיד "סוכן שירות של 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:
    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:
    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 כשהתכונה הזו מופעלת.

  1. יוצרים מפתח באמצעות Cloud KMS. שם המשאב של המפתח, שבו משתמשים בשלבים הבאים, בנוי באופן הבא:
    projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
    
  2. כדי לאפשר לחשבונות השירות של Managed Service for Apache Spark להשתמש במפתח:

    1. מקצים את התפקיד 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.

    2. מפעילים את Cloud KMS API בפרויקט שבו פועלים המשאבים של Managed Service for Apache Spark.

    3. אם התפקיד של סוכן השירות של 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, אתם יכולים לדלג על השלב הזה.

  3. אתם יכולים להשתמש ב-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 אפשר לבדוק את השגיאות של האשכול שנכשל.