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 (MLLP) minimal dalam penyiapan multi-project. Penggunaan 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 mengetahui cara:

  • Mengonfigurasi attestor untuk mengesahkan saat image MLLP siap untuk deployment.
  • Deploy image yang sudah dibuktikan dari biner adaptor MLLP.
  • Gunakan penyiapan multi-project untuk memisahkan tanggung jawab atas penandatanganan image dari lingkungan deployment.

Biaya

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

  • Cloud Healthcare API
  • Google Kubernetes Engine
  • Artifact Analysis
  • Cloud Key Management Service
  • Otorisasi Biner

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 konseptual 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 dilengkapi dengan Google Cloud CLI dan alat command line kubectl. Gcloud CLI menyediakan antarmuka command line utama untuk Google Cloud. Alat kubectl menyediakan antarmuka command line untuk menjalankan perintah pada cluster Kubernetes.

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

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

Cloud Shell

Untuk meluncurkan Cloud Shell, selesaikan langkah-langkah berikut:

  1. Buka Konsol Google Cloud.

    Google Cloud console

  2. Dari pojok kanan atas konsol, klik tombol Activate 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 container, 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 kriptografis untuk memverifikasi identitas attestor dengan aman. Hal ini memastikan bahwa hanya pihak terverifikasi yang dapat berpartisipasi dalam otorisasi image container. Pasangan kunci terdiri dari kunci pribadi, yang digunakan attestor untuk menandatangani pengesahan secara digital, dan kunci publik, yang Anda tambahkan ke attestor seperti yang disimpan oleh layanan Otorisasi Biner.

Jika 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. Isi formulir, lalu klik Buat. Nama project yang Anda pilih akan dirujuk sebagai KMS_PROJ_ID selama tutorial ini.

    Untuk informasi lebih lanjut tentang membuat project, baca Membuat dan mengelola project.

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

    gcloud services enable cloudkms.googleapis.com \
        --project=KMS_PROJ_ID
  3. Untuk membuat key ring, jalankan perintah berikut, dengan KEY_RING adalah nama unik untuk key ring 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 pada 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 HL7v2, set data, dan penyimpanan HL7v2

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

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

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

      Buka Project Baru

    2. Isi formulir, lalu klik Buat. Nama project yang Anda pilih akan dirujuk sebagai HL7V2_PROJ_ID selama tutorial ini.

  2. Untuk mengaktifkan Cloud Healthcare API pada 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 Artifact Analysis.

Untuk membuat catatan Artifact Analysis, selesaikan langkah-langkah berikut:

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

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

      Buka Project Baru

    2. Isi formulir, lalu klik Buat. Nama project yang Anda pilih akan dirujuk sebagai NOTE_PROJ_ID selama tutorial ini.
  2. Untuk mengaktifkan Artifact Analysis API pada project catatan, jalankan perintah berikut:

    gcloud services enable containeranalysis.googleapis.com \
         --project=NOTE_PROJ_ID
  3. Untuk menyimpan contoh payload catatan 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 Artifact Analysis 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/note_payload.json  \
        "https://containeranalysis.googleapis.com/v1/projects/NOTE_PROJ_ID/notes/?noteId=NOTE_ID"
  5. Untuk memastikan 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 attestor

Project attestor menyimpan attestor, yang memverifikasi atau menyatakan bahwa image container siap untuk deployment.

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

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

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

      Buka Project Baru

    2. Isi formulir, lalu klik Buat. Nama project yang Anda pilih akan dirujuk sebagai ATTESTOR_PROJ_ID selama tutorial ini.
  2. Untuk mengaktifkan Otorisasi Biner dan Cloud KMS API pada project attestor, 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 attestor pada project attestor, jalankan perintah berikut. Attestor 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 attestor telah dibuat, jalankan perintah berikut:

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

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

      1. Buka halaman Dashboard di Konsol Google Cloud.

        Buka halaman Dasbor

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

      Nomor project ditampilkan di kartu Project info 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 kepada akun layanan Otorisasi Biner project attestor untuk membaca kemunculan catatan Artifact Analysis 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 dalam project Cloud KMS ke attestor, 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 dari attestor bahwa proses yang diperlukan di pipeline Anda sudah lengkap dan image container diizinkan untuk deployment.

Untuk membuat pengesahan, selesaikan langkah-langkah berikut:

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

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

      Buka Project Baru

    2. Isi formulir, lalu klik Buat. Nama project yang Anda pilih akan dirujuk sebagai ATTESTATION_PROJ_ID selama 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 deploy 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 New Project.

      Buka Project Baru

    2. Isi formulir, lalu klik Buat. Nama project yang Anda pilih akan dirujuk sebagai DEPLOYER_PROJ_ID selama tutorial ini.
  2. Untuk mengaktifkan Binary Authorization API pada project deployer, jalankan perintah berikut:

    gcloud services enable binaryauthorization.googleapis.com \
        --project=DEPLOYER_PROJ_ID
  3. Untuk memberikan izin kepada akun layanan Otorisasi Biner pada project deployer guna mengakses attestor untuk 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 dalam 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 akan menambahkan sumber image ke daftar yang diizinkan dan menetapkan aturan default cakupan project untuk memblokir image dari sumber yang belum disahkan oleh attestor. 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 ini, 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. Buat substitusi 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 disahkan, 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 menunjukkan satu pod yang berjalan dan get event menampilkan Scaled up replica set mllp-adapter-deployment-xxxx to 1.

Setelah menyelesaikan bagian ini, Anda telah berhasil men-deploy gambar adaptor MLLP yang telah disahkan 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 yang Anda buat dalam tutorial ini:

  • Project attestor
  • Project pengesahan
  • Project deployer
  • Catat project
  • Project Cloud KMS
  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.