Transmissão de mensagens HL7v2 através de ligações TCP/IP com uma imagem MLLP assinada

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.

Os novos Google Cloud utilizadores podem ser elegíveis para uma avaliação gratuita.

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:

  1. Aceda à Google Cloud consola.

    Google Cloud consola

  2. 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:

  1. Instale e inicialize a CLI gcloud.

  2. 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:

  1. Crie o projeto do Cloud KMS concluindo os seguintes passos:

    1. Na Google Cloud consola, aceda à página Novo projeto.

      Aceder a Novo projeto

    2. 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.

  2. Para ativar a API Cloud KMS no projeto Cloud KMS, execute o seguinte comando:

    gcloud services enable cloudkms.googleapis.com \
        --project=KMS_PROJ_ID
  3. 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
  4. 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"
  5. 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:

  1. Para criar o projeto HL7v2, conclua os seguintes passos:

    1. Na Google Cloud consola, aceda à página Novo projeto.

      Aceder a Novo projeto

    2. 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.

  2. Para ativar a Cloud Healthcare API no projeto, execute o seguinte comando:

    gcloud services enable healthcare.googleapis.com \
        --project=HL7V2_PROJ_ID
  3. 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
  4. 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:

  1. Crie o projeto de notas concluindo os seguintes passos:

    1. Na Google Cloud consola, aceda à página Novo projeto.

      Aceder a Novo projeto

    2. 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.
  2. Para ativar a API Artifact Analysis no projeto da nota, execute o seguinte comando:

    gcloud services enable containeranalysis.googleapis.com \
         --project=NOTE_PROJ_ID
  3. 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
  4. 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"
  5. 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:

  1. Para criar o projeto de atestação, conclua os seguintes passos:

    1. Na Google Cloud consola, aceda à página Novo projeto.

      Aceder a Novo projeto

    2. 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.
  2. 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
  3. 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
  4. Para verificar se o atestador foi criado, execute o seguinte comando:

    gcloud beta container binauthz attestors list \
        --project=ATTESTOR_PROJ_ID
  5. 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:

      1. Aceda à página Painel de controlo na Google Cloud consola.

        Aceda à página Painel de controlo

      2. 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
  6. 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"
  7. 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:

  1. Para criar o projeto de atestação, conclua os seguintes passos:

    1. Na Google Cloud consola, aceda à página Novo projeto.

      Aceder a Novo projeto

    2. 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.
  2. 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
  3. 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:

  1. Para criar o projeto implementador, conclua os seguintes passos:

    1. Na Google Cloud consola, aceda à página Novo projeto.

      Aceder a Novo projeto

    2. 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.
  2. Para ativar a API Binary Authorization no projeto do implementador, execute o seguinte comando:

    gcloud services enable binaryauthorization.googleapis.com \
        --project=DEPLOYER_PROJ_ID
  3. 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
  4. 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
  5. 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
  6. 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
  7. Para ver detalhes sobre a política, aceda à página Autorização binária na Google Cloud consola.

    Aceda à página Autorização binária

  8. 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
  9. 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:

    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. Para criar uma implementação com a imagem atestada, execute o seguinte comando:

    kubectl create -f ./tmp/deployment.yaml
  11. 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 comando get event mostra Scaled 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
  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.