הצפנה של פרמטרים של תבנית באמצעות Cloud KMS

כדי למנוע הצגה של פרטי כניסה רגישים, כמו מפתחות API וסיסמאות, כטקסט פשוט בהגדרות של משימות Dataflow, אתם יכולים להצפין את הפרמטרים של התבניות ש-Google מספקת באמצעות Cloud Key Management Service (Cloud KMS). כדי להצפין ערכי פרמטרים באמצעות מפתח Cloud KMS ולהעביר את הטקסט המעורבל (מידע מוצפן) לצינור עיבוד הנתונים, צריך להשתמש במידע הבא.

סקירה כללית

חלק מהתבניות ש-Google מספקת מאפשרות להצפין נתונים רגישים בפרמטרים של התבנית, כמו שמות משתמשים, סיסמאות, מחרוזות חיבור של JDBC ומפתחות API. כשהתבניות האלה נתמכות, הן כוללות פרמטר לציון מפתח ההצפנה של Cloud KMS, למשל:

  • KMSEncryptionKey
  • tokenKMSEncryptionKey
  • apiKeyKMSEncryptionKey

כדי להשתמש במפתחות הצפנה של Cloud KMS עם התבניות האלה, מבצעים את השלבים הבאים:

  1. מקצים לחשבון השירות של ה-worker VM ב-Dataflow את התפקיד Cloud KMS CryptoKey Decrypter.
  2. יצירת מפתח הצפנה.
  3. משתמשים במפתח כדי להצפין את הנתונים.
  4. מקודדים את הנתונים המוצפנים ב-Base64.
  5. כשמריצים את התבנית, מציינים את מפתח ההצפנה ומשתמשים בערכי הפרמטרים המוצפנים.

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

דוגמה

בדוגמה הבאה נעשה שימוש בתבנית MySQL to BigQuery.

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

    gcloud kms keyrings create "KEY_RING_NAME" \
     --location "global"
    
  2. יוצרים מפתח הצפנה.

    gcloud kms keys create "KEY_NAME" \
     --location "global" \
     --keyring "KEY_RING_NAME" \
     --purpose "encryption"
    
  3. מצפינים ומקודדים ב-base64 את שם המשתמש, הסיסמה ומחרוזת החיבור של JDBC.

    export USER_NAME=`echo -n "USER_NAME" \
     | gcloud kms encrypt --key=quickstart --keyring=test --location=global --plaintext-file=- --ciphertext-file=- \
     | base64 -w 0`
    export PASSWORD=`echo -n "PASSWORD" \
     | gcloud kms encrypt --key=quickstart --keyring=test --location=global --plaintext-file=- --ciphertext-file=- \
     | base64 -w 0`
    export CONNECTION_STRING=`echo -n "CONNECTION_STRING" \
     | gcloud kms encrypt --key=quickstart --keyring=test --location=global --plaintext-file=- --ciphertext-file=- \
     | base64 -w 0`
    
  4. מפעילים את התבנית.

    gcloud dataflow flex-template run mysql-job \
     --project=PROJECT_ID \
     --region=us-central1 \
     --template-file-gcs-location=gs://dataflow-templates/latest/flex/MySQL_to_BigQuery \
     --parameters \
    connectionURL="$CONNECTION_STRING",\
    query="SOURCE_SQL_QUERY",\
    outputTable=PROJECT_ID:DATASET.TABLE_NAME,\
    bigQueryLoadingTemporaryDirectory=CLOUD_STORAGE_PATH,\
    username="$USER_NAME",\
    password="$PASSWORD",\
    KMSEncryptionKey=projects/PROJECT_ID/locations/global/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    

פתרון בעיות

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

ההרשאה נדחתה

כשמריצים את המשימה, מופיעה שגיאת PERMISSION_DENIED ביומני המשימה, בדומה לזו:

PERMISSION_DENIED: Permission cloudkms.cryptoKeyVersions.useToDecrypt denied on
resource RESOURCE_PATH (or it may not exist)

כדי לפענח את הנתונים, חשבון השירות של ה-worker VM ב-Dataflow צריך את ההרשאה cloudkms.cryptoKeyVersions.useToDecrypt למפתח ההצפנה. מוודאים שלחשבון השירות של ה-worker VM יש את התפקיד מפענח CryptoKey של Cloud KMS. מידע נוסף זמין במאמר אבטחה והרשאות ב-Dataflow.

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