חבילות Assured Open Source Software (Assured OSS) עומדות בדרישות של רמה 2 של Supply-chain Levels for Software Artifacts (SLSA), שדורשת אישור מקור של Build כחלק מהמטא-נתונים של האבטחה. כדי לוודא שהחבילה תקינה, אתם יכולים לאמת את המטא-נתונים של אישור המקור של ה-build.
המסמך הזה רלוונטי לתוכנית בחינם. למידע על אישור המקור של Build במסלול פרימיום, קראו את המאמר גישה למטא-נתונים של אבטחה ואימות חבילות.
לפני שמתחילים
- מתקינים את cosign כדי לאמת את החתימה באישור המקור של Build.
מגדירים אימות
למידע נוסף על הגדרת אימות, ראו הגדרת אימות.
אימות של אישור המקור של Build
אישור המקור של ה-build נחתם באמצעות אישור in-toto, שמשתמש בפורמט מעטפת dsse. כלומר, החתימה שנוצרת מכילה את החתימה העטופה ואת הנתונים הגולמיים.
שימוש בכלי aoss-verifier
כדי לאמת את אישור המקור של Build, מתקינים את הכלי aoss-verifier.
מייצאים את
$(go env GOPATH)/binומריצים את הפקודהaoss-verifier verify-packageעם הדגל--verify_build_provenance.aoss-verifier verify-package \ --language LANGUAGE \ --package_id PACKAGE_ID \ --version VERSION \ --artifact_path ARTIFACT_PATH \ --verify_build_provenance \ [--disable_certificate_verification] \ [--temp_downloads_path TEMP_DOWNLOADS_DIR_PATH] \ [--disable_deletes]מחליפים את מה שכתוב בשדות הבאים:
- LANGUAGE: שפת החבילה. הערך חייב להיות באותיות קטנות.
- PACKAGE_ID: ב-Java, הפורמט הוא groupId:artifactId. ב-Python, הפורמט הוא packageName. הערך חייב להיות באותיות קטנות.
- VERSION: גרסת החבילה.
- ARTIFACT_PATH: הנתיב לקובץ הנתונים בספרייה המקומית שרוצים לאמת. משתמשים בסיומות הקבצים הבאות:
- סיומת הקובץ
jarשל חבילת Java - סיומת הקובץ
whlשל חבילת Python
- סיומת הקובץ
--disable_certificate_verificationהוא דגל אופציונלי שמאפשר לדלג על ההתאמה של אישור הקצה לאישור הבסיס דרך שרשרת האישורים, אם משתמשים בו.
--temp_downloads_pathהוא דגל אופציונלי להגדרת הנתיב שבו רוצים להוריד את הקבצים. החלפת TEMP_DOWNLOADS_DIR_PATH. אם לא מגדירים את הדגל הזה, הקבצים יורדים לתיקייהtmp_downloadsבספרייה הנוכחית.
--disable_deletesהוא דגל אופציונלי ששומר את הקבצים שהורדתם. כברירת מחדל, הכלי מנקה את כל הקבצים שהורדו.
מידע נוסף זמין בקובץ README של הכלי.
אימות ידני
כדי לאמת את אישור המקור של Build:
אחזור של אישור המקור של Build.
הדרך לגשת לאישור המקור של ה-Build תלויה באופן שבו אתם ניגשים למטא-נתונים של האבטחה.
- אם אתם ניגשים למטא-נתונים של אבטחה באמצעות Cloud Storage, אישור המקור של ה-Build זמין כחלק מהמטא-נתונים של
Build InformationבשדהbuildDetails.
מידע נוסף זמין בקטע הקוד לדוגמה של המטא-נתונים:
{ "creationTime": "2023-03-25T05:32:23Z", "buildDetails": [ { "packageFileName": "jackson-databind-2.13.3.jar", "envelope": { "payload": "eyJfdHlwZSI6Imh0d……………", "payloadType": "application/vnd.in-toto+json", "signatures": [ "sig": "eyJwYXlsb2FkVHlwZSI6Im……", "keyid": "gcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/tekton-chains" } ] }, "buildProvenance": "{\"_type\":\"https://in-toto.io/Statement/v0.1…" .....- אם אתם ניגשים למטא-נתונים של אבטחה באמצעות Artifact Analysis API, אישור המקור של ה-build מאוחסן בקטע
BuildOccurrenceשל המטא-נתונים של האבטחה.
קטע קוד לדוגמה של מטא-נתונים:
{'BuildOccurrence': name: "projects/cloud-aoss/occurrences/06c514bb-1069-4cde-8d68-b1306f19535a" resource_uri: "jackson-databind-2.13.3.jar@sha256:4c01a14673bc1cd4a2df337a3b4e695af0a6ed8ac6be19c9e4077377fb8adf92" note_name: "projects/cloud-aoss/notes/tekton-cloudbuild-intoto" kind: BUILD create_time { seconds: 1665556616 nanos: 891004000 } …… …… } envelope { payload: "{\"_type\":\"https://in-toto.io/Statement/v0.1\", ….." payload_type: "application/vnd.in-toto+json" signatures { sig: "{\"payloadType\":\"application/vnd.in-toto+json\",....." keyid: "gcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/tekton-chains" } } , …- אם אתם ניגשים למטא-נתונים של אבטחה באמצעות Cloud Storage, אישור המקור של ה-Build זמין כחלק מהמטא-נתונים של
מאחזרים את החתימה של אישור המקור של ה-build.
אישור המקור של ה-Build מכיל קטע בשם Envelope, שמכיל חתימות בתור EnvelopeSignature. כדי לאחזר את החתימה, פועלים לפי השלבים הבאים:
- שומרים את הנתונים של
sigבקובץ בשםsignature.txt. בודקים אם המטא-נתונים הורדו באמצעות הסקריפט של המטא-נתונים.
אם המטא-נתונים הורדו באמצעות הסקריפט של המטא-נתונים, צריך לשנות את החתימה ולשמור אותה בקובץ אחר בשם
signature.sig.כדי לשנות את החתימה, מריצים את הפקודה הבאה:
cat signature.txt | sed -e 's/\\"/"/g' > signature.sigאם המטא-נתונים לא הורדו באמצעות סקריפט המטא-נתונים, צריך לפענח את החתימה ולשמור אותה בקובץ אחר בשם
signature.sig.כדי לפענח את החתימה, משתמשים בפקודה הבאה:
cat signature.txt | tr '\-_' '+/' | base64 -d > signature.sig
- שומרים את הנתונים של
מאחזרים את המפתח הציבורי של אישור המקור של ה-build.
הקטע EnvelopeSignature באישור המקור של ה-build מכיל את ההפניה למפתח שמשמש לחתימה על אישור המקור של ה-build. המפתח מאוחסן באחד מהפורמטים הבאים:
gcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/KEY_NAMEgcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSIONכאשר KEY_NAME ו-KEY_VERSION הם השם והגרסה של המפתח של Cloud Key Management Service.
המפתח הציבורי מאוחסן בקטגוריה של Cloud Storage שבבעלות Assured OSS.
מאחזרים את המפתח הציבורי באמצעות Google Cloud CLI. משתמשים באחת מהפקודות הבאות:
אם רק KEY_NAME קיים:
gcloud storage cp gs://cloud-aoss/keys/KEY_NAME-public.pem PATH_TO_LOCAL_STOREאם גם KEY_NAME וגם KEY_VERSION קיימים:
gcloud storage cp gs://cloud-aoss/keys/KEY_NAME-KEY_VERSION-public.pem PATH_TO_LOCAL_STORE
מחליפים את הערכים הבאים :
- KEY_NAME בשם של המפתח ב-Cloud Key Management Service.
- KEY_VERSION בגרסה של המפתח ב-Cloud Key Management Service.
- PATH_TO_LOCAL_STORE מחליפים בשם של הנתיב המקומי לאחסון המפתח הציבורי.
מאמתים את החתימה של המקור.
כדי לאמת את החתימה, מריצים את הפקודה הבאה:
cosign verify-blob-attestation --insecure-ignore-tlog --key KEY_REF --signature signature.sig --type slsaprovenance --check-claims=false /dev/nullמחליפים את מה שכתוב בשדות הבאים:
- KEY_REF: הנתיב למפתח הציבורי שהורדתם בשלב הקודם.
- signature.sig: הקובץ שמכיל את החתימה שאוחזרה בשלב הקודם.
אחרי שהפקודה פועלת בהצלחה, מתקבל הפלט הבא:
Verified OKכדי לאמת גם את גיבוב פריט המידע שמשויך למקור, משתמשים בפקודה הבאה:
cosign verify-blob-attestation --insecure-ignore-tlog --key KEY_REF --signature signature.sig --type slsaprovenance --check-claims=true ARTIFACT_PATHמחליפים את מה שכתוב בשדות הבאים:
- KEY_REF: הנתיב למפתח הציבורי שהורדתם בשלב הקודם.
- signature.sig: הקובץ שמכיל את החתימה שאוחזרה בשלב הקודם.
- ARTIFACT_PATH: הנתיב לקובץ ה-artifact.
אחרי שהפקודה פועלת בהצלחה, מתקבל הפלט הבא:
Verified OK