本教學課程提供操作說明,說明如何在多專案設定中,將 Binary Authorization 用於最低層級通訊協定 (MLLP) 部署作業。在 Google Kubernetes Engine 上使用二進位授權,可確保 MLLP 配接器只能從經過驗證和簽署的容器映像檔部署。
GitHub 中的開放原始碼 MLLP 配接器二進位授權程式碼研究室,詳細說明瞭類似情境。
目標
完成本教學課程後,您將會學到以下內容:
- 設定驗證者,在 MLLP 映像檔準備好部署時進行驗證。
- 部署 MLLP 轉接程式二進位檔的經過認證映像檔。
- 使用多專案設定,將簽署映像檔的責任與部署環境分開。
費用
在本文件中,您會使用 Google Cloud的下列計費元件:
- Cloud Healthcare API
- Google Kubernetes Engine
- Artifact Analysis
- Cloud Key Management Service
- Binary Authorization
如要根據預測用量估算費用,請使用 Pricing Calculator。
必要條件
開始本教學課程前,請先詳閱 MLLP 和 Google Cloud MLLP 介面卡,熟悉 MLLP 的概念文件。概念文件概略說明 MLLP、照護系統如何透過 MLLP 連線與 Cloud Healthcare API 傳送及接收訊息,以及 MLLP 安全性的基本概念。
選擇殼層
如要完成本教學課程,可以使用 Cloud Shell 或本機殼層。
Cloud Shell 是殼層環境,用於管理託管在 Google Cloud的資源。Cloud Shell 已預先安裝 Google Cloud CLI 和 kubectl
指令列工具。gcloud CLI 是 Google Cloud的主要指令列介面。kubectl
工具提供指令列介面,可對 Kubernetes 叢集執行指令。
如果您想要使用本機殼層,就必須安裝 Google Cloud CLI。
如要開啟 Cloud Shell 或設定本機殼層,請完成下列步驟:
Cloud Shell
如要啟動 Cloud Shell,請完成下列步驟:
前往 Google Cloud 控制台。
按一下主控台右上角的「啟用 Google Cloud Shell」按鈕:
主控台底部的頁框中會開啟一個 Cloud Shell 工作階段。您可以使用這個殼層來執行 gcloud
和 kubectl
指令。
本機殼層
如要安裝 gcloud CLI 和 kubectl
工具,請完成下列步驟:
執行下列指令來安裝
kubectl
指令列工具:gcloud components install kubectl
容器專案
容器專案「cloud-healthcare-containers
」已存在。其中包含 MLLP 配接器映像檔。
建立金鑰環和金鑰組
Cloud KMS 專案會使用 Cloud KMS 提供公開金鑰基礎架構 (X.509) (PKIX) 簽章。二進位授權會使用加密編譯金鑰,安全地驗證驗證者的身分。確保只有經過驗證的當事人可以授權容器映像檔。金鑰組包含私密金鑰 (認證者用來數位簽署認證) 和公開金鑰 (您新增至認證者,由 Binary Authorization 服務儲存)。
如要在本機管理私密和公開金鑰組,則不需要 Cloud KMS 專案。詳情請參閱「使用客戶管理的加密金鑰」。
如要建立金鑰環和金鑰組,請完成下列步驟:
完成下列步驟,建立 Cloud KMS 專案:
前往 Google Cloud 控制台的「New Project」(新增專案) 頁面。
填寫表單,然後按一下「建立」。在本教學課程中,您選取的專案名稱會稱為 KMS_PROJ_ID。
如要進一步瞭解如何建立專案,請參閱「建立及管理專案」。
如要在 Cloud KMS 專案中啟用 Cloud KMS API,請執行下列指令:
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 儲存庫,請完成下列步驟:
如要建立 HL7v2 專案,請完成下列步驟:
前往 Google Cloud 控制台的「New Project」(新增專案) 頁面。
填寫表單,然後按一下「建立」。在本教學課程中,您選取的專案名稱會稱為 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 記事。
如要建立構件分析記事,請完成下列步驟:
完成下列步驟以建立附註專案:
- 前往 Google Cloud 控制台的「New Project」(新增專案) 頁面。
- 填寫表單,然後按一下「建立」。在本教學課程中,您選取的專案名稱會稱為 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"
建立及設定驗證者
驗證者專案會儲存驗證者,這些驗證者會驗證或證明容器映像檔已準備好部署。
如要建立及設定認證者,請完成下列步驟:
如要建立驗證者專案,請完成下列步驟:
- 前往 Google Cloud 控制台的「New Project」(新增專案) 頁面。
- 填寫表單,然後按一下「建立」。在本教學課程中,您選取的專案名稱會稱為 ATTESTOR_PROJ_ID。
如要在驗證者專案中啟用 Binary Authorization 和 Cloud KMS API,請執行下列指令:
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,請完成下列步驟:
前往Google Cloud 控制台的「資訊主頁」頁面。
按一下頁面頂端的 [Select from] (可用的選項) 下拉式清單。在顯示的「Select from」(可用的選項) 視窗中,選取認證者專案。
專案編號會顯示在專案資訊主頁的「專案資訊」資訊卡中。
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
建立認證
認證專案會儲存認證。認證是認證者所做的聲明,表示管道中必要的程序已完成,且容器映像檔已獲授權可供部署。
如要建立認證,請完成下列步驟:
如要建立認證專案,請完成下列步驟:
- 前往 Google Cloud 控制台的「New Project」(新增專案) 頁面。
- 填寫表單,然後按一下「建立」。在本教學課程中,您選取的專案名稱會稱為 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 叢集,二進位授權會匯入並儲存在該叢集。
如要部署 MLLP 配接器,請完成下列步驟:
如要建立部署者專案,請完成下列步驟:
- 前往 Google Cloud 控制台的「New Project」(新增專案) 頁面。
- 填寫表單,然後按一下「建立」。在本教學課程中,您選取的專案名稱會稱為 DEPLOYER_PROJ_ID。
如要在部署者專案中啟用 Binary Authorization API,請執行下列指令:
gcloud services enable binaryauthorization.googleapis.com \ --project=DEPLOYER_PROJ_ID
如要授予部署者專案的二進位授權服務帳戶權限,以存取驗證者進行驗證,請執行下列指令:
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
如要查看政策詳細資料,請前往 Google Cloud 控制台中的「Binary Authorization」(二進位授權) 頁面。
如要查看 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 專案、資料集和商店」中使用的 HL7V2_PROJ_ID、HL7V2_STORE_LOCATION、DATASET_ID 和 HL7V2_STORE_ID 值。
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
指令會顯示一個正在執行的 Pod,而get event
則會顯示Scaled up replica set mllp-adapter-deployment-xxxx to 1
。
完成本節後,您已成功將經過認證的 MLLP 介面卡映像檔安全地部署至 Google Kubernetes Engine。
刪除專案
如要避免系統向您的 Google Cloud 帳戶收取這個教學課程所用資源的費用,請清除您在Google Cloud上建立的資源。
請按照下列步驟刪除您在本教學課程中建立的下列專案:
- 驗證者專案
- 認證專案
- 部署者專案
- 附註專案
- Cloud KMS 專案
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.