HL7v2-Nachrichten über TCP/IP-Verbindungen mithilfe eines signierten MLLP-Images übertragen

Diese Anleitung enthält Anweisungen zur Verwendung der Binärautorisierung als Teil einer minimalen MLLP-Bereitstellung (Minimal Lower Layer Protocol) in einer Einrichtung mit mehreren Projekten. Die Verwendung der Binärautorisierung in Google Kubernetes Engine sorgt dafür, dass der MLLP-Adapter nur aus einem verifizierten und signierten Container-Image bereitgestellt werden kann.

Das Open-Source-Codelab für die Binärautorisierung des MLLP-Adapters in GitHub zeigt, wie ein Google Cloud-Projekt pro Rolle verwendet wird.

Ziele

Nach Abschluss dieser Anleitung beherrschen Sie Folgendes:

  • Konfigurieren Sie einen Attestierer, um zu bestätigen, dass ein MLLP-Image bereit für die Bereitstellung ist.
  • Stellen Sie ein attestiertes Image der Binärdatei des MLLP-Adapters bereit.
  • Verwenden Sie eine Einrichtung mit mehreren Projekten, um die Verantwortung für das Signieren von Images von der Bereitstellungsumgebung zu trennen.

Kosten

In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter:

  • Cloud Healthcare API
  • Google Kubernetes Engine
  • Container Analysis
  • Cloud Key Management Service
  • Binärautorisierung

Sie können mithilfe des Preisrechners eine Kostenschätzung für Ihre voraussichtliche Nutzung erstellen. Neuen Cloud Platform-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Vorbereitung

Bevor Sie mit dieser Anleitung beginnen, machen Sie sich mit der Konzeptdokumentation zu MLLP vertraut, indem Sie MLLP und den Google Cloud MLLP-Adapter lesen. Die Konzeptdokumentation bietet einen Überblick über MLLP, wie Pflegesysteme Nachrichten über eine MLLP-Verbindung an die Cloud Healthcare API senden und von ihr empfangen können, sowie die Grundlagen der MLLP-Sicherheit.

Shell auswählen

Für diese Anleitung können Sie Cloud Shell oder Ihre lokale Shell verwenden.

Cloud Shell ist eine Shell-Umgebung für die Verwaltung von Ressourcen, die in Google Cloud gehostet werden. In Cloud Shell sind das gcloud-Befehlszeilentool und das kubectl-Befehlszeilentool vorinstalliert. Das gcloud-Tool bietet die primäre Befehlszeilenschnittstelle für die GCP. Das kubectl-Tool bietet die Befehlszeilenschnittstelle zum Ausführen von Befehlen für Kubernetes-Cluster.

Wenn Sie Ihre lokale Shell bevorzugen, müssen Sie das Cloud SDK installieren, das das Tool gcloud und das Tool kubectl enthält.

So öffnen Sie Cloud Shell oder konfigurieren Ihre lokale Shell:

Cloud Shell

So starten Sie Cloud Shell:

  1. Öffnen Sie die Google Cloud Console.

    Google Cloud Console

  2. Klicken Sie in der oberen rechten Ecke der Console auf die Schaltfläche Google Cloud Shell aktivieren:

Im unteren Bereich der Konsole wird ein Frame für die Cloud Shell-Sitzung geöffnet. In dieser Shell führen Sie gcloud- und kubectl-Befehle aus.

Lokale Shell

So installieren Sie das gcloud- und das kubectl-Tool:

  1. Installieren und initialisieren Sie das Cloud SDK.

  2. Installieren Sie das kubectl-Befehlszeilentool mit dem folgenden Befehl:

    gcloud components install kubectl
    

Containerprojekt

Das Containerprojekt cloud-healthcare-containers ist bereits vorhanden. Sie enthält die MLLP-Adapter-Images.

Schlüsselbund und Schlüsselpaar erstellen

Das Cloud KMS-Projekt bietet eine Cloud Key-Signatur (Public Key Infrastructure, X.509) mit Cloud KMS. Die Binärautorisierung verwendet kryptografische Schlüssel, um die Identität von Attestierern sicher zu bestätigen. Dadurch wird sichergestellt, dass nur bestätigte Parteien an der Autorisierung eines Container-Images teilnehmen können. Das Schlüsselpaar besteht aus einem privaten Schlüssel, mit dem der Attestierer Attestierungen digital signiert, und einem öffentlichen Schlüssel, den Sie dem Attestierer hinzufügen, wie er vom Binärautorisierungsdienst gespeichert wurde.

Wenn Sie private und öffentliche Schlüsselpaare lokal verwalten möchten, ist das Cloud KMS-Projekt nicht erforderlich. Weitere Informationen finden Sie unter vom Kunden verwaltete Verschlüsselungsschlüssel verwenden.

So erstellen Sie einen Schlüsselbund und ein Schlüsselpaar:

  1. Erstellen Sie das Cloud KMS-Projekt, indem Sie die folgenden Schritte ausführen:

    1. Rufen Sie in der Cloud Console die Seite "Neues Projekt" auf.

      Zur Seite "Neues Projekt"

    2. Füllen Sie das Formular aus und klicken Sie auf Erstellen. Der ausgewählte Projektname wird in dieser Anleitung als KMS_PROJ_ID bezeichnet.

    Weitere Informationen zum Erstellen von Projekten finden Sie unter Projekte erstellen und verwalten.

  2. Führen Sie den folgenden Befehl aus, um die Cloud KMS API im Cloud KMS-Projekt zu aktivieren:

    gcloud services enable cloudkms.googleapis.com \
        --project=KMS_PROJ_ID
    
  3. Führen Sie den folgenden Befehl aus, um einen Schlüsselbund zu erstellen. Dabei ist KEY_RING ein eindeutiger Name für den Schlüsselbund und KEY_RING_LOCATION eine Region wie us-central-1:

    gcloud kms keyrings create KEY_RING \
        --project=KMS_PROJ_ID \
        --location=KEY_RING_LOCATION
    
  4. Führen Sie den folgenden Befehl aus, um ein Schlüsselpaar zu erstellen:

    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. Führen Sie den folgenden Befehl aus, um die Schlüsselversion im Cloud KMS-Projekt zu überprüfen. Die Schlüsselversion sollte 1 sein.

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

HL7v2-Projekt, Dataset und HL7v2-Speicher erstellen und konfigurieren

So erstellen und konfigurieren Sie das HL7v2-Projekt, das Dataset und den HL7v2-Speicher:

  1. So erstellen Sie das HL7v2-Projekt:

    1. Rufen Sie in der Cloud Console die Seite "Neues Projekt" auf.

      Zur Seite "Neues Projekt"

    2. Füllen Sie das Formular aus und klicken Sie auf Erstellen. Der ausgewählte Projektname wird in dieser Anleitung als HL7V2_PROJ_ID bezeichnet.

  2. Führen Sie den folgenden Befehl aus, um die Cloud Healthcare API für das Projekt zu aktivieren:

    gcloud services enable healthcare.googleapis.com \
        --project=HL7V2_PROJ_ID
    
  3. Führen Sie den folgenden Befehl aus, um ein Dataset zum Speichern des HL7v2-Speichers zu erstellen:

    gcloud healthcare datasets create DATASET_ID \
        --location=HL7V2_STORE_LOCATION \
        --project=HL7V2_PROJ_ID
    
  4. Führen Sie den folgenden Befehl aus, um den HL7v2-Speicher zu erstellen:

    gcloud healthcare hl7v2-stores create HL7V2_STORE_ID \
        --dataset=DATASET_ID \
        --location=HL7V2_STORE_LOCATION \
        --project=HL7V2_PROJ_ID
    

Container Analysis-Notiz erstellen

Das Notizenprojekt ist Eigentümer der Container Analysis-Notiz.

So erstellen Sie eine Container Analysis-Notiz:

  1. Erstellen Sie das Notizprojekt, indem Sie die folgenden Schritte ausführen:

    1. Rufen Sie in der Cloud Console die Seite "Neues Projekt" auf.

      Zur Seite "Neues Projekt"

    2. Füllen Sie das Formular aus und klicken Sie auf Erstellen. Der ausgewählte Projektname wird in dieser Anleitung als NOTE_PROJ_ID bezeichnet.
  2. Führen Sie den folgenden Befehl aus, um die Container Analysis API im Notizprojekt zu aktivieren:

    gcloud services enable containeranalysis.googleapis.com \
         --project=NOTE_PROJ_ID
    
  3. Führen Sie den folgenden Befehl aus, um die Beispielnutzlast in einer Datei mit dem Namen ./tmp/note_payload.json zu speichern:

    cat > ./tmp/note_payload.json << EOM
    {
      "name": "projects/NOTE_PROJ_ID/notes/NOTE_ID",
      "attestation": {
        "hint": {
          "human_readable_name": "Attestor note"
        }
      }
    }
    EOM
    
  4. Führen Sie den folgenden Befehl aus, um eine Container Analysis-Notiz im Notizprojekt zu erstellen:

    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. Führen Sie den folgenden Befehl aus, um zu überprüfen, ob die Notiz erstellt wurde:

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

Attestierer erstellen und konfigurieren

Das Attestierungsprojekt speichert Attestierer, die bestätigen oder bestätigen, dass ein Container-Image bereit für die Bereitstellung ist.

So erstellen und konfigurieren Sie einen Attestierer:

  1. So erstellen Sie das Attestiererprojekt:

    1. Rufen Sie in der Cloud Console die Seite "Neues Projekt" auf.

      Zur Seite "Neues Projekt"

    2. Füllen Sie das Formular aus und klicken Sie auf Erstellen. Der ausgewählte Projektname wird in dieser Anleitung als ATTESTOR_PROJ_ID bezeichnet.
  2. Führen Sie die folgenden Befehle aus, um die Binärautorisierung und die Cloud KMS APIs im Attestiererprojekt zu aktivieren:

    gcloud services enable binaryauthorization.googleapis.com \
        --project=ATTESTOR_PROJ_ID
    gcloud services enable cloudkms.googleapis.com \
        --project=ATTESTOR_PROJ_ID
    
  3. Führen Sie den folgenden Befehl aus, um einen Attestierer im Attestiererprojekt zu erstellen. Der Attestierer verwendet die im Notizprojekt erstellte Notiz zur Bestätigung.

    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. Führen Sie den folgenden Befehl aus, um zu überprüfen, ob der Attestierer erstellt wurde:

    gcloud beta container binauthz attestors list \
        --project=ATTESTOR_PROJ_ID
    
  5. Nehmen Sie die folgenden Ersetzungen vor und speichern Sie die JSON-Beispieldatei in einer Datei mit dem Namen ./tmp/iam_request.json. Führen Sie dazu den folgenden Befehl aus:

    • Verwenden Sie die Werte von NOTE_PROJ_ID und NOTE_ID aus Container Analysis-Hinweis erstellen.
    • So finden Sie ATTESTOR_PROJECT_NUM:

      1. Öffnen Sie in der Cloud Console die Seite Dashboard.

        Zur Seite "Dashboard"

      2. Klicken Sie oben auf der Seite auf die Drop-down-Liste Auswählen aus. Wählen Sie im angezeigten Fenster Auswählen aus das Attestiererprojekt aus.

      Die Projektnummer wird auf der Karte Projektinformationen des Projekt-Dashboards angezeigt.

    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. Führen Sie den folgenden Befehl aus, um dem Dienstkonto des Binärautorisierungsdienstes des Attestierungsprojekts die Berechtigung zu erteilen, die Vorkommen von Container Analysis-Notizen zu lesen:

    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. Führen Sie den folgenden Befehl aus, um den im Cloud KMS-Projekt generierten Schlüssel zum Attestierer hinzuzufügen:

    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
    

Attestierung erstellen

Das Attestierungsprojekt speichert Attestierungen. Eine Attestierung ist eine Erklärung eines Attestierers, dass ein erforderlicher Prozess in Ihrer Pipeline abgeschlossen ist und ein Container-Image für die Bereitstellung autorisiert ist.

So erstellen Sie eine Attestierung:

  1. So erstellen Sie das Attestierungsprojekt:

    1. Rufen Sie in der Cloud Console die Seite "Neues Projekt" auf.

      Zur Seite "Neues Projekt"

    2. Füllen Sie das Formular aus und klicken Sie auf Erstellen. Der ausgewählte Projektname wird in dieser Anleitung als ATTESTATION_PROJ_ID bezeichnet.
  2. Führen Sie den folgenden Befehl aus, um die Binärautorisierungs-API im Attestierungsprojekt zu aktivieren:

    gcloud services enable binaryauthorization.googleapis.com \
        --project=ATTESTATION_PROJ_ID
    
  3. Führen Sie den folgenden Befehl aus, um die Attestierung zu signieren und zu erstellen. Dabei ist IMAGE_SIGNED der Speicherort des signierten MLLP-Adapter-Images 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-Adapter bereitstellen

Das Deployment-Projekt besitzt den GKE-Cluster, in den die Binärautorisierung importiert und gespeichert wird.

Führen Sie die folgenden Schritte aus, um den MLLP-Adapter bereitzustellen:

  1. So erstellen Sie das Deployer-Projekt:

    1. Rufen Sie in der Cloud Console die Seite "Neues Projekt" auf.

      Zur Seite "Neues Projekt"

    2. Füllen Sie das Formular aus und klicken Sie auf Erstellen. Der ausgewählte Projektname wird in dieser Anleitung als DEPLOYER_PROJ_ID bezeichnet.
  2. Führen Sie den folgenden Befehl aus, um die Binärautorisierungs-API im Deployment-Projekt zu aktivieren:

    gcloud services enable binaryauthorization.googleapis.com \
        --project=DEPLOYER_PROJ_ID
    
  3. Führen Sie den folgenden Befehl aus, um dem Dienstkonto der Binärautorisierung für das Deployer-Projekt die Berechtigung zum Zugriff auf den Attestierer für die Bestätigung zu erteilen:

    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. Führen Sie den folgenden Befehl aus, um einen Cluster mit --enable-binauthz im Deployment-Projekt zu erstellen:

    gcloud beta container clusters create CLUSTER_NAME \
        --project=DEPLOYER_PROJ_ID \
        --enable-binauthz \
        --zone CLUSTER_ZONE
    
  5. Die Beispielbereitstellungsrichtlinie fügt Bildquellen zur weißen Liste hinzu und legt eine Standardregel für den Projektumfang fest, um Bilder von Quellen zu blockieren, die nicht vom Attestierer bestätigt wurden. Führen Sie den folgenden Befehl aus, um die Beispielbereitstellungsrichtlinie in einer Datei mit dem Namen ./tmp/policy.yaml zu speichern:

    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. Führen Sie den folgenden Befehl aus, um die Bereitstellungsrichtlinie in das Bereitstellungsprojekt zu importieren:

    gcloud beta container binauthz policy import ./tmp/policy.yaml \
        --project=DEPLOYER_PROJ_ID
    
  7. Details zur Richtlinie finden Sie in der Google Cloud Console auf der Seite "Binärautorisierung".

    Zur Seite "Binärautorisierung"

  8. Führen Sie den folgenden Befehl aus, um die Anmeldedaten des GKE-Clusters zu überprüfen:

    gcloud container clusters get-credentials \
        --project=DEPLOYER_PROJ_ID \
        --zone CLUSTER_ZONE CLUSTER_NAME
    
  9. Nehmen Sie die folgenden Ersetzungen vor und speichern Sie die Beispiel-YAML mit dem folgenden Befehl in einer Datei mit dem Namen ./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. Führen Sie den folgenden Befehl aus, um eine Bereitstellung mit dem bestätigten Image zu erstellen:

    kubectl create -f ./tmp/deployment.yaml
    
  11. Führen Sie die folgenden Befehle aus, um zu bestätigen, dass die Bereitstellung erfolgreich war:

    kubectl get pods
    kubectl get event
    

    Der Befehl get pods zeigt einen ausgeführten Pod und get event zeigt Scaled up replica set mllp-adapter-deployment-xxxx to 1 an.

Nach Bearbeitung dieses Abschnitts haben Sie ein zertifiziertes MLLP-Adapter-Image sicher in Google Kubernetes Engine bereitgestellt.

Projekte löschen

Um zu vermeiden, dass Ihrem Google Cloud-Konto die in dieser Kurzanleitung verwendeten Ressourcen in Rechnung gestellt werden, können Sie die in Google Cloud erstellten Ressourcen bereinigen.

Führen Sie die folgenden Schritte aus, um die folgenden Projekte zu löschen, die Sie in dieser Anleitung erstellt haben:

  • Attestierer-Projekt
  • Attestierungsprojekt
  • Deployer-Projekt
  • Notieren Sie sich das Projekt
  • Cloud KMS-Projekt
  1. Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite "Ressourcen verwalten"

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen .
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Beenden, um das Projekt zu löschen.