Este tutorial fornece instruções para usar a autorização binária como parte de uma implementação do protocolo de camada inferior mínimo (MLLP) numa configuração com vários projetos. A utilização da autorização binária no Google Kubernetes Engine garante que o adaptador MLLP só pode ser implementado a partir de uma imagem de contentor validada e assinada.
O codelab de autorização binária do adaptador MLLP de código aberto no GitHub demonstra um cenário semelhante em detalhe.
Objetivos
Depois de concluir este tutorial, vai saber como:
- Configure um atestador para atestar quando uma imagem MLLP estiver pronta para implementação.
- Implemente uma imagem atestada do ficheiro binário do adaptador MLLP.
- Use uma configuração com vários projetos para separar a responsabilidade pela assinatura de imagens do ambiente de implementação.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
- Cloud Healthcare API
- Google Kubernetes Engine
- Artifact Analysis
- Cloud Key Management Service
- Binary Authorization
Para gerar uma estimativa de custos com base na sua utilização projetada,
use a calculadora de preços.
Pré-requisitos
Antes de começar este tutorial, familiarize-se com a documentação conceptual sobre o MLLP revendo o MLLP e o Google Cloud adaptador MLLP. A documentação conceptual fornece uma vista geral do MLLP, como os sistemas de cuidados de saúde podem enviar e receber mensagens para e do Cloud Healthcare API através de uma ligação MLLP e os princípios básicos da segurança MLLP.
Escolher uma shell
Para concluir este tutorial, pode usar a Cloud Shell ou a shell local.
O Cloud Shell é um ambiente de shell para gerir recursos alojados
no Google Cloud. O Cloud Shell é pré-instalado com a CLI do Google Cloud e a ferramenta de linha de comandos kubectl
. A CLI gcloud fornece a interface de linhas de comando principal para Google Cloud. A ferramenta kubectl
oferece a interface de linhas de comando para executar comandos em clusters do Kubernetes.
Se preferir usar o shell local, tem de instalar a CLI Google Cloud.
Para abrir o Cloud Shell ou configurar o seu shell local, conclua os passos seguintes:
Cloud Shell
Para iniciar o Cloud Shell, conclua os seguintes passos:
Aceda à Google Cloud consola.
No canto superior direito da consola, clique no botão Ativar Google Cloud Shell:
É aberta uma sessão do Cloud Shell numa moldura na parte inferior da consola. Use esta shell para executar os comandos gcloud
e kubectl
.
Shell local
Para instalar a CLI gcloud e a ferramenta kubectl
, conclua os
seguintes passos:
Instale a ferramenta de linha de comandos
kubectl
executando o seguinte comando:gcloud components install kubectl
Projeto de contentor
O projeto do contentor, cloud-healthcare-containers
, já existe. Contém as imagens do adaptador MLLP.
Criar um conjunto de chaves e um par de chaves
O projeto do Cloud KMS fornece uma assinatura de infraestrutura de chave pública (X.509) (PKIX) através do Cloud KMS. A autorização binária usa chaves criptográficas para validar de forma segura a identidade dos atestadores. Isto garante que apenas as partes validadas podem participar na autorização de uma imagem de contentor. O par de chaves consiste numa chave privada, que o atestador usa para assinar digitalmente as atestações, e numa chave pública, que adiciona ao atestador conforme armazenado pelo serviço de autorização binária.
Se quiser gerir pares de chaves públicas e privadas localmente, o projeto do Cloud KMS não é necessário. Para mais informações, consulte o artigo Usar chaves de encriptação geridas pelo cliente.
Para criar um conjunto de chaves e um par de chaves, conclua os seguintes passos:
Crie o projeto do Cloud KMS concluindo os seguintes passos:
Na Google Cloud consola, aceda à página Novo projeto.
Preencha o formulário e, de seguida, clique em Criar. O nome do projeto que selecionar é referenciado como KMS_PROJ_ID ao longo deste tutorial.
Para mais informações sobre a criação de projetos, consulte o artigo Criar e gerir projetos.
Para ativar a API Cloud KMS no projeto Cloud KMS, execute o seguinte comando:
gcloud services enable cloudkms.googleapis.com \ --project=KMS_PROJ_ID
Para criar um conjunto de chaves, execute o seguinte comando, em que KEY_RING é um nome exclusivo para o conjunto de chaves e KEY_RING_LOCATION é uma região, como
us-central-1
:gcloud kms keyrings create KEY_RING \ --project=KMS_PROJ_ID \ --location=KEY_RING_LOCATION
Para criar um par de chaves, execute o seguinte comando:
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"
Para validar a versão da chave no projeto do Cloud KMS, execute o seguinte comando. A versão da chave deve ser
1
.gcloud kms keys versions list \ --project=KMS_PROJ_ID \ --location=KEY_RING_LOCATION \ --key=KEY \ --keyring=KEY_RING
Criar e configurar o projeto, o conjunto de dados e o armazenamento de HL7v2
Para criar e configurar o projeto, o conjunto de dados e o armazenamento HL7v2, conclua os seguintes passos:
Para criar o projeto HL7v2, conclua os seguintes passos:
Na Google Cloud consola, aceda à página Novo projeto.
Preencha o formulário e, de seguida, clique em Criar. O nome do projeto que selecionar é referenciado como HL7V2_PROJ_ID ao longo deste tutorial.
Para ativar a Cloud Healthcare API no projeto, execute o seguinte comando:
gcloud services enable healthcare.googleapis.com \ --project=HL7V2_PROJ_ID
Para criar um conjunto de dados para armazenar o armazenamento de HL7v2, execute o seguinte comando:
gcloud healthcare datasets create DATASET_ID \ --location=HL7V2_STORE_LOCATION \ --project=HL7V2_PROJ_ID
Para criar o armazenamento de HL7v2, execute o seguinte comando:
gcloud healthcare hl7v2-stores create HL7V2_STORE_ID \ --dataset=DATASET_ID \ --location=HL7V2_STORE_LOCATION \ --project=HL7V2_PROJ_ID
Criar uma nota de análise de artefactos
O projeto de notas é proprietário da nota de análise de artefactos.
Para criar uma nota de análise de artefactos, conclua os seguintes passos:
Crie o projeto de notas concluindo os seguintes passos:
- Na Google Cloud consola, aceda à página Novo projeto.
- Preencha o formulário e, de seguida, clique em Criar. O nome do projeto que selecionar é referenciado como NOTE_PROJ_ID ao longo deste tutorial.
Para ativar a API Artifact Analysis no projeto da nota, execute o seguinte comando:
gcloud services enable containeranalysis.googleapis.com \ --project=NOTE_PROJ_ID
Para guardar a carga útil da nota de amostra num ficheiro denominado
./tmp/note_payload.json
, execute o seguinte comando:cat > ./tmp/note_payload.json << EOM { "name": "projects/NOTE_PROJ_ID/notes/NOTE_ID", "attestation": { "hint": { "human_readable_name": "Attestor note" } } } EOM
Para criar uma nota de análise de artefactos no projeto de notas, execute o seguinte comando:
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"
Para verificar se a nota foi criada, execute o seguinte comando:
curl \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ "https://containeranalysis.googleapis.com/v1/projects/NOTE_PROJ_ID/notes/NOTE_ID"
Criar e configurar um atestador
O projeto de atestação armazena atestadores, que validam ou atestam que uma imagem de contentor está pronta para implementação.
Para criar e configurar um atestador, conclua os seguintes passos:
Para criar o projeto de atestação, conclua os seguintes passos:
- Na Google Cloud consola, aceda à página Novo projeto.
- Preencha o formulário e, de seguida, clique em Criar. O nome do projeto que selecionar é referenciado como ATTESTOR_PROJ_ID ao longo deste tutorial.
Para ativar as APIs Binary Authorization e Cloud KMS no projeto do atestador, execute os seguintes comandos:
gcloud services enable binaryauthorization.googleapis.com \ --project=ATTESTOR_PROJ_ID gcloud services enable cloudkms.googleapis.com \ --project=ATTESTOR_PROJ_ID
Para criar um atestador no projeto do atestador, execute o seguinte comando. O atestador usa a nota criada no projeto de notas para atestação.
gcloud beta container binauthz attestors create ATTESTOR_ID \ --project=ATTESTOR_PROJ_ID \ --attestation-authority-note=NOTE_ID \ --attestation-authority-note-project=NOTE_PROJ_ID
Para verificar se o atestador foi criado, execute o seguinte comando:
gcloud beta container binauthz attestors list \ --project=ATTESTOR_PROJ_ID
Faça as seguintes substituições e, de seguida, guarde o JSON de exemplo num ficheiro com o nome
./tmp/iam_request.json
executando o seguinte comando:- Use os valores de NOTE_PROJ_ID e NOTE_ID de Criar uma nota de análise de artefactos.
Para encontrar o ATTESTOR_PROJECT_NUM, conclua os seguintes passos:
Aceda à página Painel de controlo na Google Cloud consola.
Clique na lista pendente Selecionar a partir de na parte superior da página. Na janela Selecionar a partir de apresentada, selecione o projeto do atestador.
O número do projeto é apresentado no cartão Informações do projeto do painel de controlo do projeto.
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
Para conceder à conta de serviço da autorização binária do projeto de atestação autorização para ler as ocorrências de notas da análise de artefactos no projeto de notas, execute o seguinte comando:
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"
Para adicionar a chave gerada no projeto do Cloud KMS ao atestador, execute o seguinte comando:
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
Criar uma atestação
O projeto de atestação armazena atestações. Uma atestação é uma declaração de um atestador de que um processo necessário no seu pipeline está concluído e de que uma imagem de contentor está autorizada para implementação.
Para criar uma atestação, conclua os seguintes passos:
Para criar o projeto de atestação, conclua os seguintes passos:
- Na Google Cloud consola, aceda à página Novo projeto.
- Preencha o formulário e, de seguida, clique em Criar. O nome do projeto que selecionar é referenciado como ATTESTATION_PROJ_ID ao longo deste tutorial.
Para ativar a API Binary Authorization no projeto de atestação, execute o seguinte comando:
gcloud services enable binaryauthorization.googleapis.com \ --project=ATTESTATION_PROJ_ID
Para assinar e criar a atestação, execute o seguinte comando, em que IMAGE_SIGNED é a localização da imagem do adaptador MLLP assinado,
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
Implementar o adaptador MLLP
O projeto implementador é proprietário do cluster do GKE onde a Autorização binária é importada e armazenada.
Para implementar o adaptador MLLP, conclua os seguintes passos:
Para criar o projeto implementador, conclua os seguintes passos:
- Na Google Cloud consola, aceda à página Novo projeto.
- Preencha o formulário e, de seguida, clique em Criar. O nome do projeto que selecionar é referenciado como DEPLOYER_PROJ_ID ao longo deste tutorial.
Para ativar a API Binary Authorization no projeto do implementador, execute o seguinte comando:
gcloud services enable binaryauthorization.googleapis.com \ --project=DEPLOYER_PROJ_ID
Para conceder à conta de serviço da autorização binária no projeto do implementador autorização para aceder ao atestador para validação de atestação, execute o seguinte comando:
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
Para criar um cluster com
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE
no projeto do implementador, execute o seguinte comando:gcloud beta container clusters create CLUSTER_NAME \ --project=DEPLOYER_PROJ_ID \ --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \ --zone CLUSTER_ZONE
A política de implementação de exemplo adiciona origens de imagens à lista de autorizações e define uma regra predefinida de âmbito do projeto para bloquear imagens de origens que não foram atestadas pelo atestador. Para guardar a política de implementação de exemplo num ficheiro com o nome
./tmp/policy.yaml
, execute o seguinte comando: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
Para importar a política de implementação para o projeto implementador, execute o seguinte comando:
gcloud beta container binauthz policy import ./tmp/policy.yaml \ --project=DEPLOYER_PROJ_ID
Para ver detalhes sobre a política, aceda à página Autorização binária na Google Cloud consola.
Para consultar as credenciais do cluster do GKE, execute o seguinte comando:
gcloud container clusters get-credentials \ --project=DEPLOYER_PROJ_ID \ --zone CLUSTER_ZONE CLUSTER_NAME
Faça as seguintes substituições e, de seguida, guarde o YAML de exemplo num ficheiro com o nome
./tmp/deployment.yaml
executando o seguinte comando:- IMAGE_SIGNED é a localização da
imagem do adaptador MLLP assinado,
gcr.io/cloud-healthcare-containers/mllp-adapter@sha256:231b073df13db0c65e57b0e1d526ab6816a73c37262e25c18bcca99bf4b4b185
. - Use os valores de HL7V2_PROJ_ID, HL7V2_STORE_LOCATION, DATASET_ID, e HL7V2_STORE_ID que usou em Criar e configurar o projeto, o conjunto de dados e o armazenamento HL7v2.
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 é a localização da
imagem do adaptador MLLP assinado,
Para criar uma implementação com a imagem atestada, execute o seguinte comando:
kubectl create -f ./tmp/deployment.yaml
Para confirmar que a implementação foi bem-sucedida, execute os seguintes comandos:
kubectl get pods kubectl get event
O comando
get pods
mostra um pod em execução e o comandoget event
mostraScaled up replica set mllp-adapter-deployment-xxxx to 1
.
Depois de concluir esta secção, implementou com êxito e segurança uma imagem do adaptador MLLP atestada no Google Kubernetes Engine.
Eliminar os projetos
Para evitar incorrer em custos na sua Google Cloud conta pelos recursos usados neste tutorial, pode limpar os recursos que criou em Google Cloud.
Siga os passos abaixo para eliminar os seguintes projetos que criou neste tutorial:
- Projeto de atestação
- Projeto de atestação
- Projeto do implementador
- Projeto de notas
- Projeto do 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.