במדריך הזה מוסבר איך להשתמש ב-Binary Authorization כחלק מפריסת פרוטוקול מינימלי בשכבה התחתונה (MLLP) בהגדרה של כמה פרויקטים. שימוש ב-Binary Authorization ב-Google Kubernetes Engine מבטיח שאפשר לפרוס את מתאם MLLP רק מקובץ אימג' של קונטיינר מאומת וחתום.
ב-Codelab של Binary Authorization בנושא מתאם MLLP בקוד פתוח ב-GitHub מוצג תרחיש דומה בפירוט.
מטרות
בסיום המדריך הזה, תדעו איך:
- הגדרת מאמת שיאמת כשקובץ אימג' של MLLP מוכן לפריסה.
- פריסת תמונה מאומתת של קובץ ה-MLLP adapter הבינארי.
- כדי להפריד את האחריות לחתימה על תמונות מסביבת הפריסה, משתמשים בהגדרה של כמה פרויקטים.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
- Cloud Healthcare API
- Google Kubernetes Engine
- Artifact Analysis
- Cloud Key Management Service
- Binary Authorization
כדי ליצור הערכת עלויות בהתאם לשימוש החזוי, אתם יכולים להשתמש במחשבון התמחור.
דרישות מוקדמות
לפני שמתחילים את המדריך הזה, כדאי לעיין במסמכי ההסבר על MLLP כדי להבין את המושגים. לשם כך, אפשר לקרוא את המאמרים MLLP ו Google Cloud מתאם MLLP. במסמכי הקונספט מוסבר על MLLP, על האופן שבו מערכות לטיפול יכולות לשלוח ולקבל הודעות אל Cloud Healthcare API וממנו דרך חיבור MLLP, ועל היסודות של אבטחת MLLP.
בחירת מעטפת
כדי להשלים את המדריך הזה, אפשר להשתמש ב-Cloud Shell או במעטפת המקומית.
Cloud Shell היא סביבת Shell לניהול משאבים שמתארחים ב- Google Cloud. ב-Cloud Shell מותקנים מראש Google Cloud CLI וכלי שורת הפקודה kubectl. ה-CLI של gcloud הוא ממשק שורת הפקודה העיקרי ל- Google Cloud. הכלי kubectl מספק את ממשק שורת הפקודה להרצת פקודות באשכולות Kubernetes.
אם אתם מעדיפים להשתמש במעטפת המקומית, אתם צריכים להתקין את Google Cloud CLI.
כדי לפתוח את Cloud Shell או להגדיר את המעטפת המקומית:
Cloud Shell
כדי להפעיל את Cloud Shell, מבצעים את השלבים הבאים:
עוברים אל Google Cloud המסוף.
בפינה השמאלית העליונה של המסוף, לוחצים על הלחצן Activate Google Cloud Shell (הפעלת Google Cloud Shell):

בחלק התחתון של המסוף ייפתח סשן של Cloud Shell בתוך מסגרת. משתמשים בשורת הפקודה הזו כדי להריץ פקודות gcloud ו-kubectl.
מעטפת מקומית
כדי להתקין את ה-CLI של gcloud ואת הכלי kubectl, מבצעים את השלבים הבאים:
מריצים את הפקודה הבאה כדי להתקין את כלי שורת הפקודה
kubectl:gcloud components install kubectl
פרויקט של מאגר
פרויקט הקונטיינר, cloud-healthcare-containers, כבר קיים. היא מכילה את תמונות המתאם של MLLP.
יצירה של אוסף מפתחות וזוג מפתחות
פרויקט Cloud KMS מספק חתימה של תשתית מפתחות ציבוריים (X.509) (PKIX) באמצעות Cloud KMS. ב-Binary Authorization נעשה שימוש במפתחות קריפטוגרפיים כדי לאמת באופן מאובטח את הזהות של המעידים. כך מוודאים שרק גורמים מאומתים יכולים להשתתף בהרשאה של תמונת מאגר. זוג המפתחות מורכב ממפתח פרטי, שמשמש את הגורם המאשר לחתימה דיגיטלית על אישורים, וממפתח ציבורי, שמוסיפים לגורם המאשר כפי שהוא מאוחסן על ידי שירות Binary Authorization.
אם רוצים לנהל זוגות של מפתחות פרטיים וציבוריים באופן מקומי, לא צריך פרויקט Cloud KMS. מידע נוסף מופיע במאמר בנושא שימוש במפתחות הצפנה בניהול הלקוח.
כדי ליצור אוסף מפתחות וזוג מפתחות:
כדי ליצור את פרויקט Cloud KMS, מבצעים את השלבים הבאים:
נכנסים לדף New Project במסוף Google Cloud .
ממלאים את הטופס ולוחצים על יצירה. שם הפרויקט שתבחרו יופיע בתור KMS_PROJ_ID במדריך הזה.
מידע נוסף על יצירת פרויקטים זמין במאמר יצירה וניהול של פרויקטים.
כדי להפעיל את Cloud KMS API בפרויקט Cloud KMS, מריצים את הפקודה הבאה:
gcloud services enable cloudkms.googleapis.com \ --project=KMS_PROJ_ID
כדי ליצור אוסף מפתחות, מריצים את הפקודה הבאה, שבה KEY_RING הוא שם ייחודי לאוסף המפתחות ו-KEY_RING_LOCATION הוא אזור כמו
us-central-1:gcloud kms keyrings create KEY_RING \ --project=KMS_PROJ_ID \ --location=KEY_RING_LOCATION
כדי ליצור זוג מפתחות, מריצים את הפקודה הבאה:
gcloud kms keys create KEY \ --project=KMS_PROJ_ID \ --keyring=KEY_RING \ --location=KEY_RING_LOCATION \ --purpose=asymmetric-signing \ --default-algorithm="ec-sign-p256-sha256"
כדי לאמת את גרסת המפתח בפרויקט Cloud KMS, מריצים את הפקודה הבאה. גרסת המפתח צריכה להיות
1.gcloud kms keys versions list \ --project=KMS_PROJ_ID \ --location=KEY_RING_LOCATION \ --key=KEY \ --keyring=KEY_RING
יצירה והגדרה של פרויקט, מערך נתונים ומאגר HL7v2
כדי ליצור ולהגדיר את פרויקט HL7v2, מערך הנתונים ומאגר HL7v2, מבצעים את השלבים הבאים:
כדי ליצור את פרויקט HL7v2, מבצעים את השלבים הבאים:
נכנסים לדף New Project במסוף Google Cloud .
ממלאים את הטופס ולוחצים על יצירה. שם הפרויקט שתבחרו יופיע בתור HL7V2_PROJ_ID במדריך הזה.
כדי להפעיל את Cloud Healthcare API בפרויקט, מריצים את הפקודה הבאה:
gcloud services enable healthcare.googleapis.com \ --project=HL7V2_PROJ_ID
כדי ליצור מערך נתונים לאחסון החנות ב-HL7v2, מריצים את הפקודה הבאה:
gcloud healthcare datasets create DATASET_ID \ --location=HL7V2_STORE_LOCATION \ --project=HL7V2_PROJ_ID
כדי ליצור את מאגר HL7v2, מריצים את הפקודה הבאה:
gcloud healthcare hl7v2-stores create HL7V2_STORE_ID \ --dataset=DATASET_ID \ --location=HL7V2_STORE_LOCATION \ --project=HL7V2_PROJ_ID
יצירת הערה ב-Artifact Analysis
הפרויקט של ההערה הוא הבעלים של ההערה ב-Artifact Analysis.
כדי ליצור הערה של Artifact Analysis, מבצעים את השלבים הבאים:
כדי ליצור את פרויקט ההערות, מבצעים את השלבים הבאים:
- נכנסים לדף New Project במסוף Google Cloud .
- ממלאים את הטופס ולוחצים על יצירה. שם הפרויקט שתבחרו יופיע במדריך הזה בתור NOTE_PROJ_ID.
כדי להפעיל את Artifact Analysis API בפרויקט של ההערה, מריצים את הפקודה הבאה:
gcloud services enable containeranalysis.googleapis.com \ --project=NOTE_PROJ_ID
כדי לשמור את מטען הנתונים של ההערה לדוגמה בקובץ בשם
./tmp/note_payload.json, מריצים את הפקודה הבאה:cat > ./tmp/note_payload.json << EOM { "name": "projects/NOTE_PROJ_ID/notes/NOTE_ID", "attestation": { "hint": { "human_readable_name": "Attestor note" } } } EOM
כדי ליצור הערה של Artifact Analysis בפרויקט ההערות, מריצים את הפקודה הבאה:
curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ --data-binary @./tmp/note_payload.json \ "https://containeranalysis.googleapis.com/v1/projects/NOTE_PROJ_ID/notes/?noteId=NOTE_ID"
כדי לוודא שההערה נוצרה, מריצים את הפקודה הבאה:
curl \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ "https://containeranalysis.googleapis.com/v1/projects/NOTE_PROJ_ID/notes/NOTE_ID"
יצירה והגדרה של גורם מאמת (attestor)
בפרויקט של המאשר מאוחסנים מאשרים שמאמתים או מאשרים שתמונת קונטיינר מוכנה לפריסה.
כדי ליצור ולהגדיר מאמת, מבצעים את השלבים הבאים:
כדי ליצור את פרויקט המאמת, מבצעים את השלבים הבאים:
- נכנסים לדף New Project במסוף Google Cloud .
- ממלאים את הטופס ולוחצים על יצירה. שם הפרויקט שתבחרו יופיע בתור ATTESTOR_PROJ_ID במדריך הזה.
כדי להפעיל את ממשקי ה-API של Binary Authorization ו-Cloud KMS בפרויקט של המאשר, מריצים את הפקודות הבאות:
gcloud services enable binaryauthorization.googleapis.com \ --project=ATTESTOR_PROJ_ID gcloud services enable cloudkms.googleapis.com \ --project=ATTESTOR_PROJ_ID
כדי ליצור מאמת בפרויקט המאמת, מריצים את הפקודה הבאה. הגורם המעיד משתמש בהערה שנוצרה בפרויקט ההערות לצורך אימות.
gcloud beta container binauthz attestors create ATTESTOR_ID \ --project=ATTESTOR_PROJ_ID \ --attestation-authority-note=NOTE_ID \ --attestation-authority-note-project=NOTE_PROJ_ID
כדי לוודא שהמאמת נוצר, מריצים את הפקודה הבאה:
gcloud beta container binauthz attestors list \ --project=ATTESTOR_PROJ_ID
מבצעים את ההחלפות הבאות ושומרים את קובץ ה-JSON לדוגמה בקובץ בשם
./tmp/iam_request.jsonעל ידי הרצת הפקודה הבאה:- משתמשים בערכים NOTE_PROJ_ID ו-NOTE_ID מתוך יצירת הערה בניתוח ארטיפקט.
כדי למצוא את ATTESTOR_PROJECT_NUM, מבצעים את השלבים הבאים:
נכנסים לדף Dashboard במסוףGoogle Cloud .
לוחצים על הרשימה הנפתחת Select from בחלק העליון של הדף. בחלון Select from שמופיע, בוחרים את פרויקט המאמת.
מספר הפרויקט מוצג בכרטיס Project info בלוח הבקרה של הפרויקט.
cat > ./tmp/iam_request.json << EOM { "resource": "projects/NOTE_PROJ_ID/notes/NOTE_ID", "policy": { "bindings": [ { "role": "roles/containeranalysis.notes.occurrences.viewer", "members": [ "serviceAccount:service-ATTESTOR_PROJ_NUM@gcp-sa-binaryauthorization.iam.gserviceaccount.com" ] } ] } } EOM
כדי להעניק לחשבון השירות של שירות אישור הבינארי בפרויקט של המאשר הרשאה לקרוא את המופעים של הערות Artifact Analysis בפרויקט של ההערות, מריצים את הפקודה הבאה:
curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ --data-binary @./tmp/iam_request.json \ "https://containeranalysis.googleapis.com/v1/projects/NOTE_PROJ_ID/notes/NOTE_ID:setIamPolicy"
כדי להוסיף את המפתח שנוצר בפרויקט Cloud KMS למאמת, מריצים את הפקודה הבאה:
gcloud beta container binauthz attestors public-keys add \ --project=ATTESTOR_PROJ_ID \ --attestor=ATTESTOR_ID \ --keyversion-project=KMS_PROJ_ID \ --keyversion-location=KEY_RING_LOCATION \ --keyversion-keyring=KEY_RING \ --keyversion-key=KEY \ --keyversion=KEY_VERSION
יצירת אישור
פרויקט האימות מאחסן אישורים. אישור הוא הצהרה של נותן האישור שלפיה תהליך נדרש בצינור העברת הנתונים הושלם ותמונת קונטיינר אושרה לפריסה.
כדי ליצור אישור, מבצעים את השלבים הבאים:
כדי ליצור את פרויקט האימות, מבצעים את השלבים הבאים:
- נכנסים לדף New Project במסוף Google Cloud .
- ממלאים את הטופס ולוחצים על יצירה. שם הפרויקט שתבחרו יופיע במדריך הזה בתור ATTESTATION_PROJ_ID.
כדי להפעיל את Binary Authorization API בפרויקט האימות, מריצים את הפקודה הבאה:
gcloud services enable binaryauthorization.googleapis.com \ --project=ATTESTATION_PROJ_ID
כדי לחתום על האימות וליצור אותו, מריצים את הפקודה הבאה, כאשר IMAGE_SIGNED הוא המיקום של תמונת המתאם החתומה של MLLP,
gcr.io/cloud-healthcare-containers/mllp-adapter@sha256:231b073df13db0c65e57b0e1d526ab6816a73c37262e25c18bcca99bf4b4b185:gcloud beta container binauthz attestations sign-and-create \ --project=ATTESTATION_PROJ_ID \ --artifact-url=IMAGE_SIGNED \ --attestor=ATTESTOR_ID \ --attestor-project=ATTESTOR_PROJ_ID \ --keyversion-project=KMS_PROJ_ID \ --keyversion-location=KEY_RING_LOCATION \ --keyversion-keyring=KEY_RING \ --keyversion-key=KEY \ --keyversion=KEY_VERSION
פריסת מתאם MLLP
פרויקט הפריסה הוא הבעלים של אשכול GKE שאליו מתבצע הייבוא של Binary Authorization והוא מאוחסן בו.
כדי לפרוס את מתאם MLLP, מבצעים את השלבים הבאים:
כדי ליצור את פרויקט הפריסה, מבצעים את השלבים הבאים:
- נכנסים לדף New Project במסוף Google Cloud .
- ממלאים את הטופס ולוחצים על יצירה. שם הפרויקט שתבחרו יופיע במדריך הזה בתור DEPLOYER_PROJ_ID.
כדי להפעיל את Binary Authorization API בפרויקט של כלי הפריסה, מריצים את הפקודה הבאה:
gcloud services enable binaryauthorization.googleapis.com \ --project=DEPLOYER_PROJ_ID
כדי להעניק לחשבון השירות של Binary Authorization בפרויקט הפורס הרשאה לגשת לגורם המאמת לצורך אימות האישור, מריצים את הפקודה הבאה:
gcloud beta container binauthz attestors add-iam-policy-binding \ "projects/ATTESTOR_PROJ_ID/attestors/ATTESTOR_ID" \ --project=ATTESTOR_PROJ_ID \ --member="serviceAccount:service-DEPLOYER_PROJ_NUM@gcp-sa-binaryauthorization.iam.gserviceaccount.com" \ --role=roles/binaryauthorization.attestorsVerifier
כדי ליצור אשכול עם
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCEבפרויקט של כלי הפריסה, מריצים את הפקודה הבאה:gcloud beta container clusters create CLUSTER_NAME \ --project=DEPLOYER_PROJ_ID \ --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \ --zone CLUSTER_ZONE
מדיניות הפריסה לדוגמה מוסיפה מקורות תמונות לרשימת ההיתרים ומגדירה כלל ברירת מחדל בהיקף הפרויקט לחסימת תמונות ממקורות שלא אומתו על ידי הגורם המאמת. כדי לשמור את מדיניות הפריסה לדוגמה בקובץ בשם
./tmp/policy.yaml, מריצים את הפקודה הבאה:cat > ./tmp/policy.yaml << EOM admissionWhitelistPatterns: - namePattern: gcr.io/google_containers/* - namePattern: gcr.io/google-containers/* - namePattern: k8s.gcr.io/* - namePattern: gcr.io/stackdriver-agents/* defaultAdmissionRule: evaluationMode: REQUIRE_ATTESTATION enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG requireAttestationsBy: - projects/ATTESTOR_PROJ_ID/attestors/ATTESTOR_ID name: projects/DEPLOYER_PROJ_ID/policy EOM
כדי לייבא את מדיניות הפריסה לפרויקט הפריסה, מריצים את הפקודה הבאה:
gcloud beta container binauthz policy import ./tmp/policy.yaml \ --project=DEPLOYER_PROJ_ID
כדי לראות פרטים על המדיניות, עוברים לדף Binary Authorization ב Google Cloud מסוף.
כדי לבדוק את פרטי הכניסה של אשכול GKE, מריצים את הפקודה הבאה:
gcloud container clusters get-credentials \ --project=DEPLOYER_PROJ_ID \ --zone CLUSTER_ZONE CLUSTER_NAME
מבצעים את ההחלפות הבאות ושומרים את קובץ ה-YAML לדוגמה בקובץ בשם
./tmp/deployment.yamlעל ידי הרצת הפקודה הבאה:- IMAGE_SIGNED הוא המיקום של תמונת מתאם MLLP חתומה,
gcr.io/cloud-healthcare-containers/mllp-adapter@sha256:231b073df13db0c65e57b0e1d526ab6816a73c37262e25c18bcca99bf4b4b185. - משתמשים בערכים של HL7V2_PROJ_ID, HL7V2_STORE_LOCATION, DATASET_ID ו-HL7V2_STORE_ID שבהם השתמשתם ביצירה והגדרה של פרויקט, מערך נתונים ומאגר HL7v2.
cat > ./tmp/deployment.yaml << EOM apiVersion: apps/v1 kind: Deployment metadata: name: mllp-adapter-deployment spec: replicas: 1 selector: matchLabels: app: mllp-adapter template: metadata: labels: app: mllp-adapter spec: containers: - name: mllp-adapter imagePullPolicy: Always image: IMAGE_SIGNED ports: - containerPort: 2575 protocol: TCP name: "port" command: - "/usr/mllp_adapter/mllp_adapter" - "--hl7_v2_project_id=HL7V2_PROJ_ID" - "--hl7_v2_location_id=HL7V2_STORE_LOCATION" - "--hl7_v2_dataset_id=DATASET_ID" - "--hl7_v2_store_id=HL7V2_STORE_ID" - "--api_addr_prefix=https://healthcare.googleapis.com:443/v1beta1" - "--logtostderr" - "--receiver_ip=0.0.0.0" EOM
- IMAGE_SIGNED הוא המיקום של תמונת מתאם MLLP חתומה,
כדי ליצור פריסה עם אימות של קובץ האימג', מריצים את הפקודה הבאה:
kubectl create -f ./tmp/deployment.yaml
כדי לוודא שהפריסה בוצעה בהצלחה, מריצים את הפקודות הבאות:
kubectl get pods kubectl get event
הפקודה
get podsמציגה פוד אחד שפועל, והפקודהget eventמציגהScaled up replica set mllp-adapter-deployment-xxxx to 1.
אחרי שמסיימים את הקטע הזה, פורסים בהצלחה ובאופן מאובטח תמונה של מתאם MLLP מאומת ב-Google Kubernetes Engine.
מחיקת הפרויקטים
כדי להימנע מחיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם במדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם ב-Google Cloud.
כדי למחוק את הפרויקטים הבאים שיצרתם במדריך הזה:
- פרויקט של גורם מאמת
- פרויקט אימות (Attestation)
- פרויקט הפריסה
- פרויקט הערות
- פרויקט Cloud KMS
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.