Mengirimkan pesan HL7v2 melalui koneksi TCP/IP menggunakan image MLLP bertanda tangan

Tutorial ini memberikan petunjuk untuk menggunakan Otorisasi Biner sebagai bagian dari deployment protokol lapisan bawah minimal (MLLP) dalam penyiapan multi-project. Menggunakan Otorisasi Biner di Google Kubernetes Engine memastikan bahwa adaptor MLLP hanya dapat di-deploy dari image container yang diverifikasi dan ditandatangani.

Codelab Otorisasi Biner adaptor MLLP open source di GitHub menunjukkan skenario serupa secara mendetail.

Tujuan

Setelah menyelesaikan tutorial ini, Anda akan tahu cara:

  • Konfigurasikan attestor untuk melakukan pengesahan saat image MLLP siap di-deploy.
  • Men-deploy image yang diautentikasi dari biner adaptor MLLP.
  • Gunakan penyiapan multi-project untuk memisahkan tanggung jawab penandatanganan image dari lingkungan deployment.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut:

  • Cloud Healthcare API
  • Google Kubernetes Engine
  • Artifact Analysis
  • Cloud Key Management Service
  • Binary Authorization

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Prasyarat

Sebelum memulai tutorial ini, pahami dokumentasi konsep tentang MLLP dengan meninjau MLLP dan adaptor MLLP Google Cloud. Dokumentasi konseptual memberikan ringkasan tentang MLLP, cara sistem perawatan dapat mengirim dan menerima pesan ke dan dari Cloud Healthcare API melalui koneksi MLLP, dan dasar-dasar keamanan MLLP.

Memilih shell

Untuk menyelesaikan tutorial ini, Anda dapat menggunakan Cloud Shell atau shell lokal Anda.

Cloud Shell adalah lingkungan shell untuk mengelola resource yang dihosting di Google Cloud. Cloud Shell telah diinstal lebih dulu dengan alat command line Google Cloud CLI dan kubectl. Gcloud CLI menyediakan antarmuka command line utama untuk Google Cloud. Alat kubectl menyediakan antarmuka command line untuk menjalankan perintah terhadap cluster Kubernetes.

Jika lebih suka menggunakan shell lokal, Anda harus menginstal Google Cloud CLI.

Untuk membuka Cloud Shell atau mengonfigurasi shell lokal, selesaikan langkah-langkah berikut:

Cloud Shell

Untuk meluncurkan Cloud Shell, selesaikan langkah-langkah berikut:

  1. Buka Konsol Google Cloud.

    Konsol Google Cloud

  2. Dari pojok kanan atas konsol, klik tombol Aktifkan Google Cloud Shell:

Sesi Cloud Shell akan terbuka di dalam frame di bagian bawah konsol. Anda menggunakan shell ini untuk menjalankan perintah gcloud dan kubectl.

Shell Lokal

Untuk menginstal gcloud CLI dan alat kubectl, selesaikan langkah-langkah berikut:

  1. Instal dan lakukan inisialisasi gcloud CLI.

  2. Instal alat command line kubectl dengan menjalankan perintah berikut:

    gcloud components install kubectl
    

Project penampung

Project penampung, cloud-healthcare-containers, sudah ada. File ini menyimpan gambar adaptor MLLP.

Membuat key ring dan pasangan kunci

Project Cloud KMS menyediakan tanda tangan Infrastruktur Kunci Publik (X.509) (PKIX) menggunakan Cloud KMS. Otorisasi Biner menggunakan kunci kriptografi untuk memverifikasi identitas pengesah dengan aman. Hal ini memastikan hanya pihak terverifikasi yang dapat berpartisipasi dalam otorisasi image penampung. Pasangan kunci terdiri dari kunci pribadi, yang digunakan pengautentikasi untuk menandatangani pengesahan secara digital, dan kunci publik, yang Anda tambahkan ke pengautentikasi seperti yang disimpan oleh layanan Otorisasi Biner.

Jika Anda ingin mengelola pasangan kunci pribadi dan publik secara lokal, project Cloud KMS tidak diperlukan. Untuk informasi selengkapnya, lihat Menggunakan kunci enkripsi yang dikelola pelanggan.

Untuk membuat key ring dan pasangan kunci, selesaikan langkah-langkah berikut:

  1. Buat project Cloud KMS dengan menyelesaikan langkah-langkah berikut:

    1. Di konsol Google Cloud, buka halaman New Project.

      Buka Project Baru

    2. Lengkapi formulir, lalu klik Buat. Nama project yang Anda pilih direferensikan sebagai KMS_PROJ_ID di seluruh tutorial ini.

    Untuk informasi selengkapnya tentang cara membuat project, lihat Membuat dan mengelola project.

  2. Untuk mengaktifkan Cloud KMS API di project Cloud KMS, jalankan perintah berikut:

    gcloud services enable cloudkms.googleapis.com \
        --project=KMS_PROJ_ID
  3. Untuk membuat ring kunci, jalankan perintah berikut, dengan KEY_RING adalah nama unik untuk ring kunci dan KEY_RING_LOCATION adalah region seperti us-central-1:

    gcloud kms keyrings create KEY_RING \
        --project=KMS_PROJ_ID \
        --location=KEY_RING_LOCATION
  4. Untuk membuat pasangan kunci, jalankan perintah berikut:

    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. Untuk memverifikasi versi kunci di project Cloud KMS, jalankan perintah berikut. Versi kunci harus 1.

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

Membuat dan mengonfigurasi project, set data, dan penyimpanan HL7v2 HL7v2

Untuk membuat dan mengonfigurasi project, set data, dan penyimpanan HL7v2 HL7v2, selesaikan langkah-langkah berikut:

  1. Untuk membuat project HL7v2, selesaikan langkah-langkah berikut:

    1. Di konsol Google Cloud, buka halaman Project Baru.

      Buka Project Baru

    2. Lengkapi formulir, lalu klik Buat. Nama project yang Anda pilih direferensikan sebagai HL7V2_PROJ_ID di seluruh tutorial ini.

  2. Untuk mengaktifkan Cloud Healthcare API di project, jalankan perintah berikut:

    gcloud services enable healthcare.googleapis.com \
        --project=HL7V2_PROJ_ID
  3. Untuk membuat set data guna menyimpan penyimpanan HL7v2, jalankan perintah berikut:

    gcloud healthcare datasets create DATASET_ID \
        --location=HL7V2_STORE_LOCATION \
        --project=HL7V2_PROJ_ID
  4. Untuk membuat penyimpanan HL7v2, jalankan perintah berikut:

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

Membuat catatan Artifact Analysis

Project catatan memiliki catatan Analisis Artefak.

Untuk membuat catatan Analisis Artefak, selesaikan langkah-langkah berikut:

  1. Buat project catatan dengan menyelesaikan langkah-langkah berikut:

    1. Di konsol Google Cloud, buka halaman Project Baru.

      Buka Project Baru

    2. Lengkapi formulir, lalu klik Buat. Nama project yang Anda pilih direferensikan sebagai NOTE_PROJ_ID di seluruh tutorial ini.
  2. Untuk mengaktifkan Artifact Analysis API di project catatan, jalankan perintah berikut:

    gcloud services enable containeranalysis.googleapis.com \
         --project=NOTE_PROJ_ID
  3. Untuk menyimpan payload catatan contoh ke file bernama ./tmp/note_payload.json, jalankan perintah berikut:

    cat > ./tmp/note_payload.json << EOM
    {
      "name": "projects/NOTE_PROJ_ID/notes/NOTE_ID",
      "attestation": {
        "hint": {
          "human_readable_name": "Attestor note"
        }
      }
    }
    EOM
  4. Untuk membuat catatan Analisis Artefak dalam project catatan, jalankan perintah berikut:

    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. Untuk memverifikasi bahwa catatan telah dibuat, jalankan perintah berikut:

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

Membuat dan mengonfigurasi pengautentikasi

Project pengesah menyimpan pengesah, yang memverifikasi atau menyatakan bahwa image penampung siap di-deploy.

Untuk membuat dan mengonfigurasi pengautentikasi, selesaikan langkah-langkah berikut:

  1. Untuk membuat project pengautentikasi, selesaikan langkah-langkah berikut:

    1. Di konsol Google Cloud, buka halaman New Project.

      Buka Project Baru

    2. Lengkapi formulir, lalu klik Buat. Nama project yang Anda pilih direferensikan sebagai ATTESTOR_PROJ_ID di seluruh tutorial ini.
  2. Untuk mengaktifkan Binary Authorization dan Cloud KMS API di project pengesahan, jalankan perintah berikut:

    gcloud services enable binaryauthorization.googleapis.com \
        --project=ATTESTOR_PROJ_ID
    gcloud services enable cloudkms.googleapis.com \
        --project=ATTESTOR_PROJ_ID
  3. Untuk membuat pengautentikasi di project pengautentikasi, jalankan perintah berikut. Pengesah menggunakan catatan yang dibuat dalam project catatan untuk pengesahan.

    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. Untuk memverifikasi bahwa pengautentikasi telah dibuat, jalankan perintah berikut:

    gcloud beta container binauthz attestors list \
        --project=ATTESTOR_PROJ_ID
  5. Lakukan penggantian berikut, lalu simpan contoh JSON ke file bernama ./tmp/iam_request.json dengan menjalankan perintah berikut:

    • Gunakan nilai NOTE_PROJ_ID dan NOTE_ID dari Membuat catatan Artifact Analysis.
    • Untuk menemukan ATTESTOR_PROJECT_NUM, selesaikan langkah-langkah berikut:

      1. Buka halaman Dasbor di konsol Google Cloud.

        Buka halaman Dasbor

      2. Klik menu drop-down Select from di bagian atas halaman. Di jendela Pilih dari yang muncul, pilih project pengautentikasi.

      Nomor project ditampilkan di kartu Project info pada Dasbor project.

    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. Untuk memberikan izin akun layanan Otorisasi Biner project pengesahan agar dapat membaca kemunculan catatan Analisis Artefak di project catatan, jalankan perintah berikut:

    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. Untuk menambahkan kunci yang dihasilkan di project Cloud KMS ke pengautentikasi, jalankan perintah berikut:

    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

Membuat pengesahan

Project pengesahan menyimpan pengesahan. Pengesahan adalah pernyataan oleh penegasnya bahwa proses yang diperlukan dalam pipeline Anda telah selesai dan image penampung diberi otorisasi untuk di-deploy.

Untuk membuat pengesahan, selesaikan langkah-langkah berikut:

  1. Untuk membuat project pengesahan, selesaikan langkah-langkah berikut:

    1. Di konsol Google Cloud, buka halaman Project Baru.

      Buka Project Baru

    2. Lengkapi formulir, lalu klik Buat. Nama project yang Anda pilih direferensikan sebagai ATTESTATION_PROJ_ID di seluruh tutorial ini.
  2. Untuk mengaktifkan Binary Authorization API pada project pengesahan, jalankan perintah berikut:

    gcloud services enable binaryauthorization.googleapis.com \
        --project=ATTESTATION_PROJ_ID
  3. Untuk menandatangani dan membuat pengesahan, jalankan perintah berikut, dengan IMAGE_SIGNED adalah lokasi Image Adaptor MLLP yang ditandatangani, 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

Men-deploy adaptor MLLP

Project deployer memiliki cluster GKE tempat Otorisasi Biner diimpor dan disimpan.

Untuk men-deploy adaptor MLLP, selesaikan langkah-langkah berikut:

  1. Untuk membuat project deployer, selesaikan langkah-langkah berikut:

    1. Di konsol Google Cloud, buka halaman Project Baru.

      Buka Project Baru

    2. Lengkapi formulir, lalu klik Buat. Nama project yang Anda pilih direferensikan sebagai DEPLOYER_PROJ_ID di seluruh tutorial ini.
  2. Untuk mengaktifkan Binary Authorization API di project deployer, jalankan perintah berikut:

    gcloud services enable binaryauthorization.googleapis.com \
        --project=DEPLOYER_PROJ_ID
  3. Untuk memberikan izin akun layanan Otorisasi Biner di project deployer untuk mengakses attestor guna verifikasi pengesahan, jalankan perintah berikut:

    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. Untuk membuat cluster dengan --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE di project deployer, jalankan perintah berikut:

    gcloud beta container clusters create CLUSTER_NAME \
        --project=DEPLOYER_PROJ_ID \
        --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
        --zone CLUSTER_ZONE
  5. Kebijakan deployment contoh menambahkan sumber image ke daftar yang diizinkan dan menetapkan aturan default cakupan project untuk memblokir image dari sumber yang belum disahkan oleh pengautentikasi. Untuk menyimpan contoh kebijakan deployment ke file bernama ./tmp/policy.yaml, jalankan perintah berikut:

    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. Untuk mengimpor kebijakan deployment ke project deployer, jalankan perintah berikut:

    gcloud beta container binauthz policy import ./tmp/policy.yaml \
        --project=DEPLOYER_PROJ_ID
  7. Untuk melihat detail tentang kebijakan, buka halaman Otorisasi Biner di konsol Google Cloud.

    Buka halaman Otorisasi Biner

  8. Untuk memeriksa kredensial cluster GKE, jalankan perintah berikut:

    gcloud container clusters get-credentials \
        --project=DEPLOYER_PROJ_ID \
        --zone CLUSTER_ZONE CLUSTER_NAME
  9. Lakukan penggantian berikut, lalu simpan contoh YAML ke file bernama ./tmp/deployment.yaml dengan menjalankan perintah berikut:

    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. Untuk membuat deployment dengan image yang diautentikasi, jalankan perintah berikut:

    kubectl create -f ./tmp/deployment.yaml
  11. Untuk mengonfirmasi bahwa deployment berhasil, jalankan perintah berikut:

    kubectl get pods
    kubectl get event

    Perintah get pods menampilkan satu pod yang sedang berjalan dan get event menampilkan Scaled up replica set mllp-adapter-deployment-xxxx to 1.

Setelah menyelesaikan bagian ini, Anda telah berhasil men-deploy image adaptor MLLP yang diautentikasi dengan aman ke Google Kubernetes Engine.

Menghapus project

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, Anda dapat membersihkan resource yang dibuat di Google Cloud.

Ikuti langkah-langkah di bawah ini untuk menghapus project berikut yang Anda buat dalam tutorial ini:

  • Project attestor
  • Project pengesahan
  • Project deployer
  • Project catatan
  • Project Cloud KMS
  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.