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

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

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

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

השיטה הקריפטוגרפית שמתוארת כאן נקראת הצפנה דטרמיניסטית באמצעות AES-SIV (תקן הצפנה מתקדם במצב וקטור אתחול סינתטי). אנחנו ממליצים על השיטה הזו כי היא מספקת את רמת האבטחה הגבוהה ביותר מבין כל השיטות הקריפטוגרפיות הניתנות להיפוך שנתמכות על ידי 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 פרויקט.

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

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (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. מפעילים את ממשקי ה-API של Cloud KMS ושל Sensitive Data Protection:

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

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    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 פרויקט.

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

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (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. מפעילים את ממשקי ה-API של Cloud KMS ושל Sensitive Data Protection:

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

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    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

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

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

    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 Editor. כדי להפעיל את העורך, לוחצים על 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 כמו שמתואר כאן. אפשר גם להשתמש ב-API 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

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