העברת הודעות HL7v2 בחיבורי TCP/IP באמצעות תמונה חתומה של MLLP

במדריך הזה מוסבר איך להשתמש ב-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

כדי ליצור הערכת עלויות בהתאם לשימוש החזוי, אתם יכולים להשתמש במחשבון התמחור.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

דרישות מוקדמות

לפני שמתחילים את המדריך הזה, כדאי לעיין במסמכי ההסבר על 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, מבצעים את השלבים הבאים:

  1. עוברים אל Google Cloud המסוף.

    ‫Google Cloud console

  2. בפינה השמאלית העליונה של המסוף, לוחצים על הלחצן Activate Google Cloud Shell (הפעלת Google Cloud Shell):

בחלק התחתון של המסוף ייפתח סשן של Cloud Shell בתוך מסגרת. משתמשים בשורת הפקודה הזו כדי להריץ פקודות gcloud ו-kubectl.

מעטפת מקומית

כדי להתקין את ה-CLI של gcloud ואת הכלי kubectl, מבצעים את השלבים הבאים:

  1. מתקינים ומפעילים את ה-CLI של gcloud.

  2. מריצים את הפקודה הבאה כדי להתקין את כלי שורת הפקודה kubectl:

    gcloud components install kubectl
    

פרויקט של מאגר

פרויקט הקונטיינר, cloud-healthcare-containers, כבר קיים. היא מכילה את תמונות המתאם של MLLP.

יצירה של אוסף מפתחות וזוג מפתחות

פרויקט Cloud KMS מספק חתימה של תשתית מפתחות ציבוריים (X.509) (PKIX) באמצעות Cloud KMS. ב-Binary Authorization נעשה שימוש במפתחות קריפטוגרפיים כדי לאמת באופן מאובטח את הזהות של המעידים. כך מוודאים שרק גורמים מאומתים יכולים להשתתף בהרשאה של תמונת מאגר. זוג המפתחות מורכב ממפתח פרטי, שמשמש את הגורם המאשר לחתימה דיגיטלית על אישורים, וממפתח ציבורי, שמוסיפים לגורם המאשר כפי שהוא מאוחסן על ידי שירות Binary Authorization.

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

כדי ליצור אוסף מפתחות וזוג מפתחות:

  1. כדי ליצור את פרויקט Cloud KMS, מבצעים את השלבים הבאים:

    1. נכנסים לדף New Project במסוף Google Cloud .

      מעבר אל New Project

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

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

  2. כדי להפעיל את Cloud KMS API בפרויקט Cloud KMS, מריצים את הפקודה הבאה:

    gcloud services enable cloudkms.googleapis.com \
        --project=KMS_PROJ_ID
  3. כדי ליצור אוסף מפתחות, מריצים את הפקודה הבאה, שבה KEY_RING הוא שם ייחודי לאוסף המפתחות ו-KEY_RING_LOCATION הוא אזור כמו us-central-1:

    gcloud kms keyrings create KEY_RING \
        --project=KMS_PROJ_ID \
        --location=KEY_RING_LOCATION
  4. כדי ליצור זוג מפתחות, מריצים את הפקודה הבאה:

    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"
  5. כדי לאמת את גרסת המפתח בפרויקט Cloud KMS, מריצים את הפקודה הבאה. גרסת המפתח צריכה להיות 1.

    gcloud kms keys versions list \
        --project=KMS_PROJ_ID \
        --location=KEY_RING_LOCATION \
        --key=KEY \
        --keyring=KEY_RING

יצירה והגדרה של פרויקט, מערך נתונים ומאגר HL7v2

כדי ליצור ולהגדיר את פרויקט HL7v2, מערך הנתונים ומאגר HL7v2, מבצעים את השלבים הבאים:

  1. כדי ליצור את פרויקט HL7v2, מבצעים את השלבים הבאים:

    1. נכנסים לדף New Project במסוף Google Cloud .

      מעבר אל New Project

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

  2. כדי להפעיל את Cloud Healthcare API בפרויקט, מריצים את הפקודה הבאה:

    gcloud services enable healthcare.googleapis.com \
        --project=HL7V2_PROJ_ID
  3. כדי ליצור מערך נתונים לאחסון החנות ב-HL7v2, מריצים את הפקודה הבאה:

    gcloud healthcare datasets create DATASET_ID \
        --location=HL7V2_STORE_LOCATION \
        --project=HL7V2_PROJ_ID
  4. כדי ליצור את מאגר 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, מבצעים את השלבים הבאים:

  1. כדי ליצור את פרויקט ההערות, מבצעים את השלבים הבאים:

    1. נכנסים לדף New Project במסוף Google Cloud .

      מעבר אל New Project

    2. ממלאים את הטופס ולוחצים על יצירה. שם הפרויקט שתבחרו יופיע במדריך הזה בתור NOTE_PROJ_ID.
  2. כדי להפעיל את Artifact Analysis API בפרויקט של ההערה, מריצים את הפקודה הבאה:

    gcloud services enable containeranalysis.googleapis.com \
         --project=NOTE_PROJ_ID
  3. כדי לשמור את מטען הנתונים של ההערה לדוגמה בקובץ בשם ./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
  4. כדי ליצור הערה של 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"
  5. כדי לוודא שההערה נוצרה, מריצים את הפקודה הבאה:

    curl \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    "https://containeranalysis.googleapis.com/v1/projects/NOTE_PROJ_ID/notes/NOTE_ID"

יצירה והגדרה של גורם מאמת (attestor)

בפרויקט של המאשר מאוחסנים מאשרים שמאמתים או מאשרים שתמונת קונטיינר מוכנה לפריסה.

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

  1. כדי ליצור את פרויקט המאמת, מבצעים את השלבים הבאים:

    1. נכנסים לדף New Project במסוף Google Cloud .

      מעבר אל New Project

    2. ממלאים את הטופס ולוחצים על יצירה. שם הפרויקט שתבחרו יופיע בתור ATTESTOR_PROJ_ID במדריך הזה.
  2. כדי להפעיל את ממשקי ה-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
  3. כדי ליצור מאמת בפרויקט המאמת, מריצים את הפקודה הבאה. הגורם המעיד משתמש בהערה שנוצרה בפרויקט ההערות לצורך אימות.

    gcloud beta container binauthz attestors create ATTESTOR_ID \
        --project=ATTESTOR_PROJ_ID \
        --attestation-authority-note=NOTE_ID \
        --attestation-authority-note-project=NOTE_PROJ_ID
  4. כדי לוודא שהמאמת נוצר, מריצים את הפקודה הבאה:

    gcloud beta container binauthz attestors list \
        --project=ATTESTOR_PROJ_ID
  5. מבצעים את ההחלפות הבאות ושומרים את קובץ ה-JSON לדוגמה בקובץ בשם ./tmp/iam_request.json על ידי הרצת הפקודה הבאה:

    • משתמשים בערכים NOTE_PROJ_ID ו-NOTE_ID מתוך יצירת הערה בניתוח ארטיפקט.
    • כדי למצוא את ATTESTOR_PROJECT_NUM, מבצעים את השלבים הבאים:

      1. נכנסים לדף Dashboard במסוףGoogle Cloud .

        כניסה לדף Dashboard

      2. לוחצים על הרשימה הנפתחת 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
  6. כדי להעניק לחשבון השירות של שירות אישור הבינארי בפרויקט של המאשר הרשאה לקרוא את המופעים של הערות 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"
  7. כדי להוסיף את המפתח שנוצר בפרויקט 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

יצירת אישור

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

כדי ליצור אישור, מבצעים את השלבים הבאים:

  1. כדי ליצור את פרויקט האימות, מבצעים את השלבים הבאים:

    1. נכנסים לדף New Project במסוף Google Cloud .

      מעבר אל New Project

    2. ממלאים את הטופס ולוחצים על יצירה. שם הפרויקט שתבחרו יופיע במדריך הזה בתור ATTESTATION_PROJ_ID.
  2. כדי להפעיל את Binary Authorization API בפרויקט האימות, מריצים את הפקודה הבאה:

    gcloud services enable binaryauthorization.googleapis.com \
        --project=ATTESTATION_PROJ_ID
  3. כדי לחתום על האימות וליצור אותו, מריצים את הפקודה הבאה, כאשר 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, מבצעים את השלבים הבאים:

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

    1. נכנסים לדף New Project במסוף Google Cloud .

      מעבר אל New Project

    2. ממלאים את הטופס ולוחצים על יצירה. שם הפרויקט שתבחרו יופיע במדריך הזה בתור DEPLOYER_PROJ_ID.
  2. כדי להפעיל את Binary Authorization API בפרויקט של כלי הפריסה, מריצים את הפקודה הבאה:

    gcloud services enable binaryauthorization.googleapis.com \
        --project=DEPLOYER_PROJ_ID
  3. כדי להעניק לחשבון השירות של 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
  4. כדי ליצור אשכול עם --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
  5. מדיניות הפריסה לדוגמה מוסיפה מקורות תמונות לרשימת ההיתרים ומגדירה כלל ברירת מחדל בהיקף הפרויקט לחסימת תמונות ממקורות שלא אומתו על ידי הגורם המאמת. כדי לשמור את מדיניות הפריסה לדוגמה בקובץ בשם ./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
  6. כדי לייבא את מדיניות הפריסה לפרויקט הפריסה, מריצים את הפקודה הבאה:

    gcloud beta container binauthz policy import ./tmp/policy.yaml \
        --project=DEPLOYER_PROJ_ID
  7. כדי לראות פרטים על המדיניות, עוברים לדף Binary Authorization ב Google Cloud מסוף.

    כניסה לדף Binary Authorization

  8. כדי לבדוק את פרטי הכניסה של אשכול GKE, מריצים את הפקודה הבאה:

    gcloud container clusters get-credentials \
        --project=DEPLOYER_PROJ_ID \
        --zone CLUSTER_ZONE CLUSTER_NAME
  9. מבצעים את ההחלפות הבאות ושומרים את קובץ ה-YAML לדוגמה בקובץ בשם ./tmp/deployment.yaml על ידי הרצת הפקודה הבאה:

    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
  10. כדי ליצור פריסה עם אימות של קובץ האימג', מריצים את הפקודה הבאה:

    kubectl create -f ./tmp/deployment.yaml
  11. כדי לוודא שהפריסה בוצעה בהצלחה, מריצים את הפקודות הבאות:

    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
  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.