הסרת פרטי זיהוי ושחזור פרטי זיהוי של מידע אישי רגיש

במאמר הזה מוסבר איך משתמשים ב-Sensitive Data Protection כדי להסיר פרטי זיהוי ממידע אישי רגיש בתוכן טקסט, ולהחזיר את פרטי הזיהוי. במהלך התהליך, נסביר איך ליצור מפתח ארוז באמצעות Cloud Key Management Service. אתם צריכים את המפתח הזה בבקשות להסרת פרטי הזיהוי ולהוספה מחדש של פרטי הזיהוי.

התהליך שמתואר במסמך הזה נקרא פסאודונימיזציה (או טוקניזציה). בתהליך הזה, Sensitive Data Protection משתמש במפתח קריפטוגרפי כדי להמיר (להסיר פרטי זיהוי) טקסט רגיש לטוקן. כדי לשחזר את הטקסט הזה (לשחזר פרטי זיהוי), צריך את המפתח הקריפטוגרפי ששימש במהלך הסרת פרטי הזיהוי ואת הטוקן.

‫Sensitive Data Protection תומך בשיטות קריפטוגרפיות הפיכות ולא הפיכות. כדי לשחזר פרטי זיהוי של תוכן, צריך לבחור שיטה הפיכה.

השיטה הקריפטוגרפית שמתוארת כאן נקראת הצפנה דטרמיניסטית באמצעות AES-SIV (תקן Advanced Encryption Standard במצב וקטור אתחול סינתטי). אנחנו ממליצים על השיטה הזו כי היא מספקת את רמת האבטחה הגבוהה ביותר מבין כל השיטות הקריפטוגרפיות ההפיכות ש-Sensitive Data Protection תומך בהן.

אפשר להשלים את השלבים שבמסמך הזה תוך 10 עד 20 דקות, לא כולל השלבים בקטע לפני שמתחילים.

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

  1. נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. התקינו את ה-CLI של Google Cloud.

  3. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  4. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  5. יוצרים או בוחרים Google Cloud פרויקט.

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

    • בחירת פרויקט: כדי לבחור פרויקט לא נדרש תפקיד IAM ספציפי – אתם יכולים לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד "יצירת פרויקטים" (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים?
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של הפרויקט ב- Google Cloud שאתם יוצרים.

    • בוחרים את הפרויקט שיצרתם ב- Google Cloud :

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  6. אם משתמשים בפרויקט קיים, מוודאים שיש את ההרשאות הנדרשות כדי להשלים את ההדרכה. אם משתמשים בפרויקט חדש, לא צריך לוודא כי כבר יש את ההרשאות הנדרשות.

  7. מוודאים שהחיוב מופעל בפרויקט ב- Google Cloud .

  8. אם אחד מהממשקים Sensitive Data Protection API או Cloud KMS API לא מופעל, צריך להפעיל אותו:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    gcloud services enable dlp.googleapis.com cloudkms.googleapis.com
  9. התקינו את ה-CLI של Google Cloud.

  10. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  11. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  12. יוצרים או בוחרים Google Cloud פרויקט.

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

    • בחירת פרויקט: כדי לבחור פרויקט לא נדרש תפקיד IAM ספציפי – אתם יכולים לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד "יצירת פרויקטים" (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים?
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של הפרויקט ב- Google Cloud שאתם יוצרים.

    • בוחרים את הפרויקט שיצרתם ב- Google Cloud :

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  13. אם משתמשים בפרויקט קיים, מוודאים שיש את ההרשאות הנדרשות כדי להשלים את ההדרכה. אם משתמשים בפרויקט חדש, לא צריך לוודא כי כבר יש את ההרשאות הנדרשות.

  14. מוודאים שהחיוב מופעל בפרויקט ב- Google Cloud .

  15. אם אחד מהממשקים Sensitive Data Protection API או Cloud KMS API לא מופעל, צריך להפעיל אותו:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    gcloud services enable dlp.googleapis.com cloudkms.googleapis.com

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות ליצירת מפתח AES עטוף, להסרת פרטי הזיהוי של מידע אישי רגיש ולזיהוי מחדש שלו, בקשו מהאדמין להקצות לכם את התפקידים הבאים ב-IAM בפרויקט:

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

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

יצירה של אוסף מפתחות ומפתח

לפני שמתחילים בתהליך הזה, צריך להחליט איפה רוצים ש-Sensitive Data Protection יעבד את הבקשות להסרת פרטים מזהים ולזיהוי מחדש. כשיוצרים מפתח Cloud KMS, צריך לאחסן אותו ב-global או באותו אזור שבו ישמש לבקשות שלכם ל-Sensitive Data Protection. אחרת, הבקשות של Sensitive Data Protection ייכשלו.

רשימה של המיקומים הנתמכים מופיעה במאמר מיקומים של Sensitive Data Protection. רושמים את השם של האזור שבחרתם (לדוגמה, us-west1).

בתהליך הזה נעשה שימוש ב-global כמיקום לכל בקשות ה-API. אם רוצים להשתמש באזור אחר, מחליפים את global בשם האזור.

  1. יוצרים אוסף מפתחות:

    gcloud kms keyrings create "dlp-keyring" \
        --location "global"
    
  2. יוצרים מפתח:

    gcloud kms keys create "dlp-key" \
        --location "global" \
        --keyring "dlp-keyring" \
        --purpose "encryption"
    
  3. מציגים את אוסף המפתחות ואת המפתח:

    gcloud kms keys list \
        --location "global" \
        --keyring "dlp-keyring"
    

    הפלט הבא מתקבל:

    NAME: projects/<var>PROJECT_ID</var>/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key
    PURPOSE: ENCRYPT_DECRYPT
    ALGORITHM: GOOGLE_SYMMETRIC_ENCRYPTION
    PROTECTION_LEVEL: SOFTWARE
    LABELS:
    PRIMARY_ID: 1
    PRIMARY_STATE: ENABLED
    

    בפלט הזה, PROJECT_ID הוא מזהה הפרויקט.

    הערך של NAME הוא השם המלא של משאב המפתח של Cloud KMS. חשוב לזכור את הערך הזה, כי הוא נדרש בבקשות להסרת פרטי הזיהוי ולשחזור פרטי הזיהוי.

יצירת מפתח AES בקידוד Base64

בקטע הזה מוסבר איך ליצור מפתח תקן Advanced Encryption Standard (AES) ולקודד אותו בפורמט base64.

  1. יוצרים מפתח AES של 128,‏ 192 או 256 ביט. הפקודה הבאה משתמשת ב-openssl כדי ליצור מפתח של 256 ביט בספרייה הנוכחית:

    openssl rand -out "./aes_key.bin" 32
    

    הקובץ aes_key.bin נוסף לספרייה הנוכחית.

  2. מקודדים את מפתח ה-AES כמחרוזת base64:

    base64 -i ./aes_key.bin
    

    הפלט אמור להיראות כך:

    uEDo6/yKx+zCg2cZ1DBwpwvzMVNk/c+jWs7OwpkMc/s=
    

אריזת מפתח ה-AES באמצעות מפתח Cloud KMS

בקטע הזה מוסבר איך להשתמש במפתח Cloud KMS שיצרתם ביצירת אוסף מפתחות ומפתח כדי לארוז את מפתח ה-AES בקידוד Base64 שיצרתם ביצירת מפתח AES בקידוד Base64.

כדי לעטוף את מפתח ה-AES, משתמשים ב-curl כדי לשלוח את הבקשה הבאה ל-method‏ projects.locations.keyRings.cryptoKeys.encrypt של Cloud KMS API:

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key:encrypt" \
    --request "POST" \
    --header "Authorization:Bearer $(gcloud auth application-default print-access-token)" \
    --header "content-type: application/json" \
    --data "{\"plaintext\": \"BASE64_ENCODED_AES_KEY\"}"

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

התגובה שמתקבלת מ-Cloud KMS דומה ל-JSON הבא:

{
  "name": "projects/<var>PROJECT_ID</var>/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key/cryptoKeyVersions/1",
  "ciphertext": "CiQAYuuIGo5DVaqdE0YLioWxEhC8LbTmq7Uy2G3qOJlZB7WXBw0SSQAjdwP8ZusZJ3Kr8GD9W0vaFPMDksmHEo6nTDaW/j5sSYpHa1ym2JHk+lUgkC3Zw5bXhfCNOkpXUdHGZKou1893O8BDby/82HY=",
  "ciphertextCrc32c": "901327763",
  "protectionLevel": "SOFTWARE"
}

בפלט הזה, PROJECT_ID הוא מזהה הפרויקט.

שימו לב לערך של ciphertext בתגובה. זהו המפתח העטוף שלכם.

שליחת בקשה להסרת פרטי הזיהוי ל-DLP API

בקטע הזה מוסבר איך להסיר פרטי זיהוי מנתונים רגישים בתוכן טקסט.

כדי להשלים את המשימה הזו, צריך:

צריך לשמור את הבקשה לדוגמה בקובץ JSON. אם אתם משתמשים ב-Cloud Shell, השתמשו בעורך של Cloud Shell כדי ליצור את הקובץ. כדי להפעיל את העורך, לוחצים על Open Editor בסרגל הכלים של Cloud Shell.

כדי להסיר פרטים אישיים מזהים ממידע רגיש בתוכן טקסטואלי:

  1. יוצרים קובץ בקשת JSON בשם deidentify-request.json עם הטקסט הבא.

    {
      "item": {
        "value": "My name is Alicia Abernathy, and my email address is aabernathy@example.com."
      },
      "deidentifyConfig": {
        "infoTypeTransformations": {
          "transformations": [
            {
              "infoTypes": [
                {
                  "name": "EMAIL_ADDRESS"
                }
              ],
              "primitiveTransformation": {
                "cryptoDeterministicConfig": {
                  "cryptoKey": {
                    "kmsWrapped": {
                      "cryptoKeyName": "projects/PROJECT_ID/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key",
                      "wrappedKey": "WRAPPED_KEY"
                    }
                  },
                  "surrogateInfoType": {
                    "name": "EMAIL_ADDRESS_TOKEN"
                  }
                }
              }
            }
          ]
        }
      },
      "inspectConfig": {
        "infoTypes": [
          {
            "name": "EMAIL_ADDRESS"
          }
        ]
      }
    }
    

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

    חשוב לוודא שהערך שמתקבל ב-cryptoKeyName יוצר את שם המשאב המלא של המפתח ב-Cloud KMS.

    מידע נוסף על הרכיבים של בקשת ה-JSON הזו מופיע במאמר projects.locations.content.deidentify. אחרי שתסיימו את המשימה הזו, נסו קלטים שונים לבקשה הזו. אפשר להשתמש ב-curl כמו שמתואר כאן. אפשר גם להשתמש ב-APIs Explorer בדף מאמרי העזרה של ה-API, בקטע Try this method.

  2. משתמשים ב-curl כדי לשלוח בקשת projects.locations.content.deidentify:

    curl -s \
        -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
        -H "Content-Type: application/json" \
        https://dlp.googleapis.com/v2/projects/PROJECT_ID/locations/global/content:deidentify \
        -d @deidentify-request.json
    

    מחליפים את PROJECT_ID במזהה הפרויקט.

    כדי להעביר שם קובץ אל curl, משתמשים באפשרות -d (לנתונים) ומקדימים את שם הקובץ בסימן @. הקובץ הזה צריך להיות באותה ספרייה שבה מריצים את הפקודה curl.

    התגובה שמתקבלת מ-Sensitive Data Protection דומה ל-JSON הבא:

    {
      "item": {
        "value": "My name is Alicia Abernathy, and my email address is EMAIL_ADDRESS_TOKEN(52):AVAx2eIEnIQP5jbNEr2j9wLOAd5m4kpSBR/0jjjGdAOmryzZbE/q."
      },
      "overview": {
        "transformedBytes": "22",
        "transformationSummaries": [
          {
            "infoType": {
              "name": "EMAIL_ADDRESS"
            },
            "transformation": {
              "cryptoDeterministicConfig": {
                "cryptoKey": {
                  "kmsWrapped": {
                    "wrappedKey": "CiQAYuuIGo5DVaqdE0YLioWxEhC8LbTmq7Uy2G3qOJlZB7WXBw0SSQAjdwP8ZusZJ3Kr8GD9W0vaFPMDksmHEo6nTDaW/j5sSYpHa1ym2JHk+lUgkC3Zw5bXhfCNOkpXUdHGZKou1893O8BDby/82HY=",
                    "cryptoKeyName": "projects/<var>PROJECT_ID</var>/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key"
                  }
                },
                "surrogateInfoType": {
                  "name": "EMAIL_ADDRESS_TOKEN"
                }
              }
            },
            "results": [
              {
                "count": "1",
                "code": "SUCCESS"
              }
            ],
            "transformedBytes": "22"
          }
        ]
      }
    }
    

    בשדה item, כתובת האימייל מוחלפת בטוקן כמו EMAIL_ADDRESS_TOKEN(52):AVAx2eIEnIQP5jbNEr2j9wLOAd5m4kpSBR/0jjjGdAOmryzZbE/q. שימו לב לערך של האסימון בתשובה. כדי לשחזר פרטי זיהוי של התוכן שהוסרו ממנו פרטי הזיהוי, מעבירים את הטוקן כולו בבקשה לשחזור פרטי זיהוי.

שליחת בקשה לשחזור פרטי זיהוי אל DLP API

בקטע הזה מוסבר איך לשחזר פרטי זיהוי של נתונים שעברו טוקניזציה בתוכן טקסטואלי.

כדי להשלים את המשימה הזו, תצטרכו:

כדי לשחזר פרטי זיהוי של תוכן שעבר טוקניזציה:

  1. יוצרים קובץ בקשה בפורמט JSON בשם reidentify-request.json עם הטקסט הבא.

    {
      "reidentifyConfig":{
        "infoTypeTransformations":{
          "transformations":[
            {
              "infoTypes":[
                {
                  "name":"EMAIL_ADDRESS_TOKEN"
                }
              ],
              "primitiveTransformation":{
                "cryptoDeterministicConfig":{
                  "cryptoKey":{
                  "kmsWrapped": {
                    "cryptoKeyName": "projects/PROJECT_ID/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key",
                    "wrappedKey": "WRAPPED_KEY"
                  }
                },
                  "surrogateInfoType":{
                    "name":"EMAIL_ADDRESS_TOKEN"
                  }
                }
              }
            }
          ]
        }
      },
      "inspectConfig":{
        "customInfoTypes":[
          {
            "infoType":{
              "name":"EMAIL_ADDRESS_TOKEN"
            },
            "surrogateType":{
    
            }
          }
        ]
      },
      "item":{
        "value": "My name is Alicia Abernathy, and my email address is TOKEN."
      }
    }
    

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

    חשוב לוודא שהערך שמתקבל ב-cryptoKeyName יוצר את שם המשאב המלא של מפתח Cloud KMS.

    מידע נוסף על הרכיבים של בקשת ה-JSON הזו זמין במאמר projects.locations.content.reidentify. אחרי שתסיימו את המשימה הזו, נסו להזין קלטים שונים לבקשה הזו. אפשר להשתמש ב-curl כמו שמתואר כאן. לחלופין, אפשר להשתמש ב-APIs Explorer בדף מאמרי העזרה של ה-API בקטע Try this method.

  2. משתמשים ב-curl כדי לשלוח בקשת projects.locations.content.reidentify:

    curl -s \
        -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
        -H "Content-Type: application/json" \
        https://dlp.googleapis.com/v2/projects/PROJECT_ID/locations/global/content:reidentify \
        -d @reidentify-request.json
    

    מחליפים את PROJECT_ID במזהה הפרויקט.

    כדי להעביר שם קובץ אל curl, משתמשים באפשרות -d (לנתונים) ומקדימים את שם הקובץ בסימן @. הקובץ הזה צריך להיות באותה ספרייה שבה מריצים את הפקודה curl.

    התגובה שמתקבלת מ-Sensitive Data Protection דומה ל-JSON הבא:

    {
      "item": {
        "value": "My name is Alicia Abernathy, and my email address is aabernathy@example.com."
      },
      "overview": {
        "transformedBytes": "70",
        "transformationSummaries": [
          {
            "infoType": {
              "name": "EMAIL_ADDRESS"
            },
            "transformation": {
              "cryptoDeterministicConfig": {
                "cryptoKey": {
                  "kmsWrapped": {
                    "wrappedKey": "CiQAYuuIGo5DVaqdE0YLioWxEhC8LbTmq7Uy2G3qOJlZB7WXBw0SSQAjdwP8ZusZJ3Kr8GD9W0vaFPMDksmHEo6nTDaW/j5sSYpHa1ym2JHk+lUgkC3Zw5bXhfCNOkpXUdHGZKou1893O8BDby/82HY=",
                    "cryptoKeyName": "projects/<var>PROJECT_ID</var>/locations/global/keyRings/dlp-keyring/cryptoKeys/dlp-key"
                  }
                },
                "surrogateInfoType": {
                  "name": "EMAIL_ADDRESS_TOKEN"
                }
              }
            },
            "results": [
              {
                "count": "1",
                "code": "SUCCESS"
              }
            ],
            "transformedBytes": "70"
          }
        ]
      }
    }
    

    בשדה item, האסימון של כתובת האימייל מוחלף בכתובת האימייל בפועל מהטקסט המקורי.

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

הסרת המשאבים

כדי לא לצבור חיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה, אתם צריכים למחוק את הפרויקט ב- Google Cloud יחד עם המשאבים.

השמדת גרסת המפתח

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

מציגים את הגרסאות הזמינות של המפתח:

gcloud kms keys versions list \
    --location "global" \
    --keyring "dlp-keyring" \
    --key "dlp-key"

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

gcloud kms keys versions destroy KEY_VERSION \
    --location "global" \
    --keyring "dlp-keyring" \
    --key "dlp-key"

מחליפים את KEY_VERSION במספר הגרסה שרוצים להשמיד, לדוגמה 1.

מחיקת הפרויקט

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

    כדי למחוק פרויקט ב- Google Cloud :

    gcloud projects delete PROJECT_ID

ביטול פרטי הכניסה

אם רוצים, מבטלים את פרטי הכניסה של ה-CLI של gcloud.

gcloud auth revoke

המאמרים הבאים