הבטחת תקינות הנתונים

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

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

‫Secret Manager משתמש בסכומי ביקורת בדרכים הבאות:

  1. כשמוסיפים גרסה של סוד:

    • ‫Secret Manager מחשב את סכום הביקורת CRC32C של נתוני הסוד.

    • סכום הבדיקה הזה מאוחסן יחד עם הנתונים הסודיים.

  2. כשניגשים לגרסה סודית:

    • ‫Secret Manager מחזיר את נתוני הסוד יחד עם סכום הביקורת שלו.

    • אפשר להשתמש בסכום הביקורת הזה כדי לוודא שהנתונים שקיבלתם זהים בדיוק לנתונים שמאוחסנים ב-Secret Manager.

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

בדוגמה הבאה אפשר לראות איך סכומי ביקורת פועלים ב-Secret Manager:

API

בדוגמאות האלה נעשה שימוש ב-curl כדי להדגים את השימוש ב-API. אפשר ליצור אסימוני גישה באמצעות הפקודה gcloud auth print-access-token. ב-Compute Engine או ב-GKE, צריך לעבור אימות באמצעות ההיקף cloud-platform.

אם הנתונים הסודיים מאוחסנים בקובץ נתונים, מחשבים את סכום הבדיקה באמצעות gcloud storage hash. יש להמיר את סכום הביקורת לפורמט עשרוני. הוא מקודד כ-int64 בפרוטוקול SecretPayload.

$ gcloud storage hash "/path/to/file.txt" --hex

אם מעבירים נתונים סודיים בשורת הפקודה, מחשבים את סיכום הביקורת (checksum) באופן הבא:

$ gcloud storage hash --hex cat <(echo ${SECRET_DATA})

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

$ SECRET_DATA=$(echo "seCr3t" | base64)

מפעילים את ה-API באמצעות curl.

$ curl "https://secretmanager.googleapis.com/v1/projects/project-id/secrets/secret-id:addVersion" \
    --request "POST" \
    --header "authorization: Bearer $(gcloud auth print-access-token)" \
    --header "content-type: application/json" \
    --data "{\"payload\": {\"data\": \"${SECRET_DATA}\", \"data_crc32c\": $CHECKSUM}}"

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

{
  "name": "projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID",
  "payload": {
    "data": "YQo=",
    "dataCrc32c": "163439259"
  }
}

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

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

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