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

בדף הזה מוסבר איך להצפין נתונים שמאוחסנים במופעים של AML AI באמצעות מפתחות הצפנה בניהול הלקוח (CMEK).

סקירה כללית

כל נתוני הלקוחות במופע של AML AI מוצפנים במצב מנוחה באמצעות מפתח CMEK. אתם יוצרים את המפתח ומנהלים אותו ב-Cloud Key Management Service ‏(Cloud KMS), ושולטים בגישה למפתח באמצעות ניהול זהויות והרשאות גישה (IAM). אם משביתים באופן זמני או משמידים באופן סופי את מפתח ה-CMEK, אי אפשר לגשת לנתונים שהוצפנו באמצעות המפתח הזה.

‫AML AI תומך ב-CMEK רק באמצעות Cloud KMS. הוא לא תומך בהצפנה של Google כברירת מחדל.

מפתחות CMEK מאפשרים לכם לשלוט במפתחות, כולל רמת ההגנה, המיקום, לוח הזמנים של הרוטציה, השימוש והרשאות הגישה, והגבולות הקריפטוגרפיים. בנוסף, השימוש ב-Cloud KMS מאפשר לכם לראות יומני ביקורת ולשלוט במחזורי החיים של המפתחות, אבל הוא גם כרוך בעלויות נוספות של שירות Cloud KMS.

אפשר להפעיל את Cloud KMS באותו Google Cloud פרויקט כמו AML AI, או בפרויקט נפרד שבו מנהלים באופן מרכזי מפתחות לכמה פרויקטים.

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

מידע נוסף על CMEK באופן כללי מופיע במסמכי התיעוד של Cloud KMS.

רמות ההגנה

ב-Cloud KMS אפשר לבחור מתוך מגוון של רמות הגנה שונות, כולל:

  • מפתחות תוכנה
  • מודולים של אבטחת חומרה (HSM) באמצעות Cloud HSM

CMEK ב-AML AI לא כל רמות ההגנה זמינות בכל האזורים. שימו לב ש-AML AI לא תומך במפתחות הצפנה באספקת הלקוח (CSEK) או ב-Cloud External Key Manager.

נתוני לקוחות

כל נתוני הלקוחות שמטופלים על ידי AML AI מוצפנים במצב מנוחה באמצעות מפתח CMEK שצוין במשאב Instance המתאים ברמת ההורה. זה כולל את כל נתוני הלקוחות שמשויכים למשאבי AML AI, כמו מערכי נתונים, הגדרות מנוע, מודלים ועוד. כל האחסון הזמני והקבוע של נתוני הלקוחות, כולל עותקים של נתוני קלט ופלט, תכונות של למידת מכונה שנוצרו, היפר-פרמטרים של המודל, משקלים של המודל ותוצאות של תחזיות, מוצפן באמצעות מפתח ה-CMEK של המופע המתאים.

הגדרה של נתוני לקוחות מופיעה בתנאים הספציפיים לשירות. יכול להיות שההגדרה לא כוללת מזהי משאבים, מאפיינים או תוויות נתונים אחרות.

הצפנה של נתוני קלט ופלט

הגדרת ההצפנה של AML AI במופע משמשת רק למשאבי AML AI ולנתונים שלהם. ‫AML AI לא מנהל את ההצפנה של נתוני הקלט או הפלט בפרויקט Google Cloud. אם אתם רוצים שהנתונים האלה יוצפנו באמצעות CMEK, אתם צריכים להגדיר מפתח Cloud KMS שיתאים לרמת ההגנה על המפתח שבחרתם והגדרתם במערך הנתונים ב-BigQuery. אפשר גם להשתמש מחדש באותו מפתח שבו נעשה שימוש ב-AML AI.

מידע נוסף על הצפנה ב-BigQuery

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

השיטה המומלצת לשמירה על האבטחה היא לבצע רוטציה של המפתחות באופן תקופתי ואוטומטי. עם CMEK, אתם שולטים ברוטציית המפתחות. כשמבצעים רוטציה למפתח, נתונים שהוצפנו באמצעות גרסאות קודמות של המפתח לא מוצפנים מחדש באופן אוטומטי באמצעות גרסת המפתח החדשה.

יכול להיות שמשאב יחיד של AML AI יאוחסן באופן פנימי בכמה יחידות. אם במהלך משך החיים של משאב AML AI מתבצעת רוטציה של גרסת המפתח, יכול להיות שלא כל היחידות יוצפנו באמצעות אותה גרסת מפתח.

אם מבצעים רוטציה של מפתח, אין דרך ב-AML AI לאלץ הצפנה מחדש או לקבוע אם בטוח למחוק גרסאות ישנות יותר של מפתח.

מידע נוסף על רוטציית מפתחות עם Cloud KMS

יצירת מפתח והענקת הרשאות

בהוראות הבאות מוסבר איך ליצור מפתח למופע ולהעניק הרשאות להצפנה ולפענוח של נתוני המופע באמצעות המפתח.

  1. ב Google Cloud פרויקט שבו רוצים לנהל את המפתחות:

    1. הפעלת Cloud KMS API.

    2. יוצרים אוסף מפתחות באמצעות method‏ projects.locations.keyRings.create. המיקום של אוסף המפתחות ב-Cloud KMS צריך להיות זהה למיקום המופע שאתם מצפינים.

      REST

      לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

      • KMS_PROJECT_ID: מזהה הפרויקט שמכיל את מחזיק המפתחות Google Cloud
      • LOCATION: המיקום של אוסף המפתחות. צריך להשתמש באחד מהאזורים הנתמכים.
        הצגת מיקומים
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • europe-west6
        • me-central2
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID: מזהה מוגדר על ידי המשתמש עבור אוסף המפתחות

      כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

      curl

      מריצים את הפקודה הבאה:

      curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d "" \
      "https://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING_ID"

      PowerShell

      מריצים את הפקודה הבאה:

      $cred = gcloud auth print-access-token
      $headers = @{ "Authorization" = "Bearer $cred" }

      Invoke-WebRequest `
      -Method POST `
      -Headers $headers `
      -Uri "https://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING_ID" | Select-Object -Expand Content

      אתם אמורים לקבל תגובת JSON שדומה לזו:

      {
        "name": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID",
        "createTime": "2023-03-14T15:52:55.358979323Z"
      }
      

      gcloud

      לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

      • KMS_PROJECT_ID: מזהה הפרויקט שמכיל את מחזיק המפתחות Google Cloud
      • LOCATION: המיקום של אוסף המפתחות. צריך להשתמש באחד מהאזורים הנתמכים.
        הצגת מיקומים
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • europe-west6
        • me-central2
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID: מזהה מוגדר על ידי המשתמש עבור אוסף המפתחות

      מריצים את הפקודה הבאה:

      ‫Linux,‏ macOS או Cloud Shell

      gcloud kms keyrings create KEY_RING_ID \
        --project KMS_PROJECT_ID --location LOCATION

      ‏Windows (PowerShell)

      gcloud kms keyrings create KEY_RING_ID `
        --project KMS_PROJECT_ID --location LOCATION

      Windows‏ (cmd.exe)

      gcloud kms keyrings create KEY_RING_ID ^
        --project KMS_PROJECT_ID --location LOCATION
      אמורה להתקבל תגובה ריקה:
      $

    3. יוצרים מפתח באמצעות ה-method‏ projects.locations.keyRings.cryptoKeys.

      REST

      לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

      • KMS_PROJECT_ID: מזהה הפרויקט שמכיל את מחזיק המפתחות Google Cloud
      • LOCATION: המיקום של אוסף המפתחות. צריך להשתמש באחד מהאזורים הנתמכים.
        הצגת מיקומים
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • europe-west6
        • me-central2
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID: המזהה שהמשתמש הגדיר לאוסף המפתחות
      • KEY_ID: מזהה מוגדר על ידי המשתמש עבור המפתח

      תוכן בקשת JSON:

      {
        "purpose": "ENCRYPT_DECRYPT"
      }
      

      כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

      curl

      שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

      cat > request.json << 'EOF'
      {
        "purpose": "ENCRYPT_DECRYPT"
      }
      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://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys?crypto_key_id=KEY_ID"

      PowerShell

      שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

      @'
      {
        "purpose": "ENCRYPT_DECRYPT"
      }
      '@  | 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://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys?crypto_key_id=KEY_ID" | Select-Object -Expand Content

      אתם אמורים לקבל תגובת JSON שדומה לזו:

      {
        "name": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys/KEY_ID",
        "primary": {
          "name": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys/KEY_ID/cryptoKeyVersions/1",
          "state": "ENABLED",
          "createTime": "2023-03-14T15:52:55.358979323Z",
          "protectionLevel": "SOFTWARE",
          "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
          "generateTime": "2023-03-14T15:52:55.358979323Z"
        },
        "purpose": "ENCRYPT_DECRYPT",
        "createTime": "2023-03-14T15:52:55.358979323Z",
        "versionTemplate": {
          "protectionLevel": "SOFTWARE",
          "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
        },
        "destroyScheduledDuration": "86400s"
      }
      

      gcloud

      לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

      • KMS_PROJECT_ID: מזהה הפרויקט שמכיל את מחזיק המפתחות Google Cloud
      • LOCATION: המיקום של אוסף המפתחות. צריך להשתמש באחד מהאזורים הנתמכים.
        הצגת מיקומים
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • europe-west6
        • me-central2
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID: המזהה שהמשתמש הגדיר לאוסף המפתחות
      • KEY_ID: מזהה מוגדר על ידי המשתמש עבור המפתח

      מריצים את הפקודה הבאה:

      ‫Linux,‏ macOS או Cloud Shell

      gcloud kms keys create KEY_ID \
        --keyring KEY_RING_ID \
        --project KMS_PROJECT_ID \
        --location LOCATION \
        --purpose "encryption"

      ‏Windows (PowerShell)

      gcloud kms keys create KEY_ID `
        --keyring KEY_RING_ID `
        --project KMS_PROJECT_ID `
        --location LOCATION `
        --purpose "encryption"

      Windows‏ (cmd.exe)

      gcloud kms keys create KEY_ID ^
        --keyring KEY_RING_ID ^
        --project KMS_PROJECT_ID ^
        --location LOCATION ^
        --purpose "encryption"
      אמורה להתקבל תגובה ריקה:
      $

  2. אם לא יצרתם מכונה של AML AI בפרויקט AML AI, חשבון השירות של AML AI עדיין לא קיים. יוצרים את חשבון השירות.

    לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט שבו פועל AML AI Google Cloud

    מריצים את הפקודה הבאה:

    ‫Linux,‏ macOS או Cloud Shell

    gcloud beta services identity create --service=financialservices.googleapis.com --project=PROJECT_ID

    ‏Windows (PowerShell)

    gcloud beta services identity create --service=financialservices.googleapis.com --project=PROJECT_ID

    Windows‏ (cmd.exe)

    gcloud beta services identity create --service=financialservices.googleapis.com --project=PROJECT_ID

    אמורים לקבל תגובה שדומה לזו:

    Service identity created: service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com

  3. מקצים לחשבון השירות של AML AI את התפקיד CryptoKey Encrypter/Decrypter ב-IAM (roles/cloudkms.cryptoKeyEncrypterDecrypter). צריך לתת את ההרשאה הזו למפתח שיצרתם.

    לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט שבו פועל AML AI Google Cloud
    • KEY_ID: המזהה שהמשתמש מגדיר למפתח
    • LOCATION: המיקום של אוסף המפתחות. צריך להשתמש באחד מהאזורים הנתמכים.
      הצגת מיקומים
      • us-central1
      • us-east1
      • asia-south1
      • europe-west1
      • europe-west2
      • europe-west4
      • europe-west6
      • me-central2
      • northamerica-northeast1
      • southamerica-east1
      • australia-southeast1
    • KEY_RING_ID: מזהה מוגדר על ידי המשתמש עבור אוסף המפתחות
    • PROJECT_NUMBER: Google Cloud מספר הפרויקט של הפרויקט שבו פועל AML AI

    מריצים את הפקודה הבאה:

    ‫Linux,‏ macOS או Cloud Shell

    gcloud kms keys add-iam-policy-binding KEY_ID --project=PROJECT_ID \
      --location LOCATION --keyring=KEY_RING_ID \
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter

    ‏Windows (PowerShell)

    gcloud kms keys add-iam-policy-binding KEY_ID --project=PROJECT_ID `
      --location LOCATION --keyring=KEY_RING_ID `
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com `
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter

    Windows‏ (cmd.exe)

    gcloud kms keys add-iam-policy-binding KEY_ID --project=PROJECT_ID ^
      --location LOCATION --keyring=KEY_RING_ID ^
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com ^
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter

    אמורים לקבל תגובה שדומה לזו:

    Updated IAM policy for key KEY_ID.
    bindings:
    - members:
      - serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com
      role: roles/cloudkms.cryptoKeyEncrypterDecrypter
    etag: BwYCq0Sq4Ho=
    version: 1
    

    מידע נוסף על הפקודה הזו זמין במאמר gcloud kms keys add-iam-policy-binding.

עכשיו אפשר ליצור מכונה ולציין את המפתח שבו רוצים להשתמש להצפנה.

הסרת הגישה

יש כמה דרכים להסיר את הגישה למפתח מהמופע המוצפן באמצעות CMEK:

מומלץ לבטל את ההרשאות מחשבון השירות של AML AI לפני השבתה או השמדה של מפתח. השינויים בהרשאות מועברים תוך שניות, כך שאפשר לראות את ההשפעות של השבתה או השמדה של מפתח.

כשמשביתים או משמידים את מפתח ההצפנה של מכונה, מאבדים את היכולת להשתמש בנתוני לקוחות שמשויכים למכונה או לאחזר אותם. לא תהיה יותר גישה לכל נתוני הלקוחות שמאוחסנים במופע, כולל מודלים, הגדרות מנוע, תוצאות של בדיקות היסטוריות ותוצאות של תחזיות. משתמשים עם כל תפקיד של צופה ב-AML AI עדיין יכולים לראות שדות כמו שם המופע או שדות משאבים אחרים שמוחזרים על ידי אחזור משאבי AML AI.

כל הפעולות שמשתמשות בנתוני לקוחות או מייצאות אותם, למשל ייצוא מטא-נתונים של backtestResults, ייכשלו.

משתמשים עם תפקיד אדמין או בעלים של AML AI יכולים למחוק את המופע.

מדיניות הארגון ל-CMEK

‫AML AI לא תומך במדיניות הארגון לגבי CMEK. עם זאת, תמיד נדרש שימוש ב-CMEK ב-AML AI, ללא קשר constraints/gcp.restrictNonCmekServicesלמדיניות הארגון.

אינטראקציה עם VPC-SC

אם הגדרתם את AML AI בתוך היקף של VPC-SC, עדיין צריך להעניק לחשבון השירות גישה למפתח ה-CMEK. אם המפתח לא נמצא באותו היקף של VPC-SC, יש כמה דרכים לעשות את זה, כולל:

  • שימוש בכלל יציאה כדי להוסיף את המשאב לרשימת ההיתרים
  • שימוש בקישור בין רשתות VPC שכנות (peering) של היקף

מה השלב הבא?