En este tutorial se explica cómo usar la autorización binaria como parte de una implementación de protocolo de capa inferior mínimo (MLLP) en una configuración de varios proyectos. Si usas la autorización binaria en Google Kubernetes Engine, te aseguras de que el adaptador MLLP solo se pueda desplegar desde una imagen de contenedor verificada y firmada.
El codelab de código abierto de autorización binaria del adaptador MLLP en GitHub muestra un caso similar en detalle.
Objetivos
Cuando hayas terminado este tutorial, sabrás cómo hacer lo siguiente:
- Configura un attestor para que certifique cuándo está lista para implementarse una imagen de MLLP.
- Despliega una imagen certificada del archivo binario del adaptador MLLP.
- Usa una configuración de varios proyectos para separar la responsabilidad de firmar imágenes del entorno de implementación.
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
- Cloud Healthcare API
- Google Kubernetes Engine
- Artifact Analysis
- Cloud Key Management Service
- Binary Authorization
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Requisitos previos
Antes de empezar este tutorial, familiarízate con la documentación conceptual sobre MLLP. Para ello, consulta MLLP y el adaptador MLLP Google Cloud . La documentación conceptual ofrece una descripción general de MLLP, cómo pueden enviar y recibir mensajes los sistemas de atención a la API Cloud Healthcare a través de una conexión MLLP y los conceptos básicos de la seguridad de MLLP.
Elegir un shell
Para completar este tutorial, puedes usar Cloud Shell o tu shell local.
Cloud Shell es un entorno de shell para gestionar recursos alojados en Google Cloud. Cloud Shell tiene preinstaladas la CLI de Google Cloud y la herramienta de línea de comandos kubectl
. La CLI de gcloud proporciona la interfaz de línea de comandos principal de Google Cloud. La herramienta kubectl
proporciona la interfaz de línea de comandos para ejecutar comandos en clústeres de Kubernetes.
Si prefieres usar tu shell local, debes instalar Google Cloud CLI.
Para abrir Cloud Shell o configurar tu shell local, sigue estos pasos:
Cloud Shell
Para iniciar Cloud Shell, sigue estos pasos:
Ve a la Google Cloud consola.
En la esquina superior derecha de la consola, haz clic en el botón Activar Google Cloud Shell:
.
Se abrirá una sesión de Cloud Shell dentro de un marco en la parte inferior de la consola. Esta shell se usa para ejecutar comandos gcloud
y kubectl
.
Shell local
Para instalar gcloud CLI y la herramienta kubectl
, sigue estos pasos:
Instala la herramienta de línea de comandos
kubectl
ejecutando el siguiente comando:gcloud components install kubectl
Proyecto de contenedor
El proyecto de contenedor cloud-healthcare-containers
ya existe. Contiene las imágenes del adaptador MLLP.
Crear un conjunto de claves y un par de claves
El proyecto de Cloud KMS proporciona una firma de infraestructura de clave pública (X.509) (PKIX) mediante Cloud KMS. Autorización binaria usa claves criptográficas para verificar de forma segura la identidad de los certificadores. De esta forma, solo las partes verificadas pueden participar en la autorización de una imagen de contenedor. El par de claves consta de una clave privada, que usa el attestor para firmar digitalmente las certificaciones, y una clave pública, que añades al attestor y que almacena el servicio Autorización binaria.
Si quieres gestionar pares de claves públicas y privadas de forma local, no necesitas el proyecto de Cloud KMS. Para obtener más información, consulta el artículo Usar claves de cifrado gestionadas por el cliente.
Para crear un conjunto de claves y un par de claves, sigue estos pasos:
Crea el proyecto de Cloud KMS siguiendo estos pasos:
En la Google Cloud consola, ve a la página Nuevo proyecto.
Rellena el formulario y haz clic en Crear. El nombre del proyecto que selecciones se mencionará como KMS_PROJ_ID a lo largo de este tutorial.
Para obtener más información sobre cómo crear proyectos, consulta el artículo Crear y gestionar proyectos.
Para habilitar la API de Cloud KMS en el proyecto de Cloud KMS, ejecuta el siguiente comando:
gcloud services enable cloudkms.googleapis.com \ --project=KMS_PROJ_ID
Para crear un conjunto de claves, ejecuta el siguiente comando, donde KEY_RING es un nombre único para el conjunto de claves y KEY_RING_LOCATION es una región como
us-central-1
:gcloud kms keyrings create KEY_RING \ --project=KMS_PROJ_ID \ --location=KEY_RING_LOCATION
Para crear un par de claves, ejecuta el siguiente 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 verificar la versión de la clave en el proyecto de Cloud KMS, ejecuta el siguiente comando. La versión de la clave debe ser
1
.gcloud kms keys versions list \ --project=KMS_PROJ_ID \ --location=KEY_RING_LOCATION \ --key=KEY \ --keyring=KEY_RING
Crear y configurar el proyecto, el conjunto de datos y el almacén HL7v2
Para crear y configurar el proyecto, el conjunto de datos y el almacén HL7v2, sigue estos pasos:
Para crear el proyecto HL7v2, sigue estos pasos:
En la Google Cloud consola, ve a la página Nuevo proyecto.
Rellena el formulario y haz clic en Crear. El nombre del proyecto que selecciones se mencionará como HL7V2_PROJ_ID a lo largo de este tutorial.
Para habilitar la API Cloud Healthcare en el proyecto, ejecuta el siguiente comando:
gcloud services enable healthcare.googleapis.com \ --project=HL7V2_PROJ_ID
Para crear un conjunto de datos en el que almacenar el almacén HL7v2, ejecuta el siguiente comando:
gcloud healthcare datasets create DATASET_ID \ --location=HL7V2_STORE_LOCATION \ --project=HL7V2_PROJ_ID
Para crear el almacén HL7v2, ejecuta el siguiente comando:
gcloud healthcare hl7v2-stores create HL7V2_STORE_ID \ --dataset=DATASET_ID \ --location=HL7V2_STORE_LOCATION \ --project=HL7V2_PROJ_ID
Crear una nota de Artifact Analysis
El proyecto de la nota es el propietario de la nota de Artifact Analysis.
Para crear una nota de análisis de artefactos, sigue estos pasos:
Crea el proyecto de notas siguiendo estos pasos:
- En la Google Cloud consola, ve a la página Nuevo proyecto.
- Rellena el formulario y haz clic en Crear. El nombre del proyecto que selecciones se mencionará como NOTE_PROJ_ID a lo largo de este tutorial.
Para habilitar la API Artifact Analysis en el proyecto de la nota, ejecuta el siguiente comando:
gcloud services enable containeranalysis.googleapis.com \ --project=NOTE_PROJ_ID
Para guardar la carga útil de la nota de ejemplo en un archivo llamado
./tmp/note_payload.json
, ejecuta el siguiente comando:cat > ./tmp/note_payload.json << EOM { "name": "projects/NOTE_PROJ_ID/notes/NOTE_ID", "attestation": { "hint": { "human_readable_name": "Attestor note" } } } EOM
Para crear una nota de análisis de artefactos en el proyecto de notas, ejecuta el siguiente 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 que se ha creado la nota, ejecuta el siguiente comando:
curl \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ "https://containeranalysis.googleapis.com/v1/projects/NOTE_PROJ_ID/notes/NOTE_ID"
Crear y configurar un encargado de la atestación
El proyecto de attestor almacena attestors, que verifican o certifican que una imagen de contenedor está lista para implementarse.
Para crear y configurar un attestor, sigue estos pasos:
Para crear el proyecto de attestor, sigue estos pasos:
- En la Google Cloud consola, ve a la página Nuevo proyecto.
- Rellena el formulario y haz clic en Crear. El nombre del proyecto que selecciones se mencionará como ATTESTOR_PROJ_ID a lo largo de este tutorial.
Para habilitar las APIs Binary Authorization y Cloud KMS en el proyecto del attestor, ejecuta los siguientes comandos:
gcloud services enable binaryauthorization.googleapis.com \ --project=ATTESTOR_PROJ_ID gcloud services enable cloudkms.googleapis.com \ --project=ATTESTOR_PROJ_ID
Para crear un attestor en el proyecto del attestor, ejecuta el siguiente comando. El attestor usa la nota creada en el proyecto de nota para la certificación.
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 que se ha creado el attestor, ejecuta el siguiente comando:
gcloud beta container binauthz attestors list \ --project=ATTESTOR_PROJ_ID
Haz las sustituciones que se indican a continuación y, después, guarda el archivo JSON de ejemplo en un archivo llamado
./tmp/iam_request.json
ejecutando el siguiente comando:- Usa los valores de NOTE_PROJ_ID y NOTE_ID de Crear una nota de análisis de artefactos.
Para encontrar el ATTESTOR_PROJECT_NUM, sigue estos pasos:
Ve a la página Panel de control de la consola de Google Cloud .
En la parte superior de la página, haz clic en la lista desplegable Seleccionar de. En la ventana Seleccionar de que aparece, selecciona el proyecto del attestor.
El número de proyecto se muestra en la tarjeta Información del proyecto del panel de control del proyecto.
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 a la cuenta de servicio de Autorización binaria del proyecto de atestación permiso para leer las ocurrencias de notas de Análisis de artefactos en el proyecto de notas, ejecuta el siguiente 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 añadir la clave generada en el proyecto de Cloud KMS al verificador, ejecuta el siguiente 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
Crear una atestación
El proyecto de certificación almacena certificaciones. Una certificación es una declaración de un certificador que indica que se ha completado un proceso obligatorio en tu canalización y que se ha autorizado la implementación de una imagen de contenedor.
Para crear una certificación, sigue estos pasos:
Para crear el proyecto de certificación, sigue estos pasos:
- En la Google Cloud consola, ve a la página Nuevo proyecto.
- Rellena el formulario y haz clic en Crear. El nombre del proyecto que selecciones se mencionará como ATTESTATION_PROJ_ID a lo largo de este tutorial.
Para habilitar la API de autorización binaria en el proyecto de certificación, ejecuta el siguiente comando:
gcloud services enable binaryauthorization.googleapis.com \ --project=ATTESTATION_PROJ_ID
Para firmar y crear la certificación, ejecuta el siguiente comando, donde IMAGE_SIGNED es la ubicación de la imagen del adaptador MLLP firmado:
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 el adaptador MLLP
El proyecto de implementación es el propietario del clúster de GKE en el que se importa y se almacena la autorización binaria.
Para implementar el adaptador MLLP, sigue estos pasos:
Para crear el proyecto de implementación, sigue estos pasos:
- En la Google Cloud consola, ve a la página Nuevo proyecto.
- Rellena el formulario y haz clic en Crear. El nombre del proyecto que selecciones se mencionará como DEPLOYER_PROJ_ID a lo largo de este tutorial.
Para habilitar la API de autorización binaria en el proyecto de implementación, ejecuta el siguiente comando:
gcloud services enable binaryauthorization.googleapis.com \ --project=DEPLOYER_PROJ_ID
Para conceder a la cuenta de servicio de Autorización binaria del proyecto de implementación permiso para acceder al encargado de la atestación para verificar la atestación, ejecuta el siguiente 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 crear un clúster con
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE
en el proyecto de implementación, ejecuta el siguiente comando:gcloud beta container clusters create CLUSTER_NAME \ --project=DEPLOYER_PROJ_ID \ --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \ --zone CLUSTER_ZONE
La política de implementación de ejemplo añade fuentes de imágenes a la lista de permitidas y define una regla predeterminada de ámbito de proyecto para bloquear las imágenes de fuentes que no haya verificado el verificador. Para guardar la política de implementación de muestra en un archivo llamado
./tmp/policy.yaml
, ejecuta el siguiente 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 la política de implementación al proyecto de implementador, ejecuta el siguiente comando:
gcloud beta container binauthz policy import ./tmp/policy.yaml \ --project=DEPLOYER_PROJ_ID
Para ver los detalles de la política, ve a la página Autorización binaria de la Google Cloud consola.
Para consultar las credenciales del clúster de GKE, ejecuta el siguiente comando:
gcloud container clusters get-credentials \ --project=DEPLOYER_PROJ_ID \ --zone CLUSTER_ZONE CLUSTER_NAME
Sustituye los valores que se indican a continuación y, después, guarda el archivo YAML de ejemplo con el nombre
./tmp/deployment.yaml
ejecutando el siguiente comando:- IMAGE_SIGNED es la ubicación de la
imagen del adaptador MLLP firmado,
gcr.io/cloud-healthcare-containers/mllp-adapter@sha256:231b073df13db0c65e57b0e1d526ab6816a73c37262e25c18bcca99bf4b4b185
. - Usa los valores de HL7V2_PROJ_ID, HL7V2_STORE_LOCATION, DATASET_ID y HL7V2_STORE_ID que has usado en Crear y configurar el proyecto, el conjunto de datos y el almacén 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 es la ubicación de la
imagen del adaptador MLLP firmado,
Para crear un despliegue con la imagen certificada, ejecuta el siguiente comando:
kubectl create -f ./tmp/deployment.yaml
Para confirmar que la implementación se ha realizado correctamente, ejecuta los siguientes comandos:
kubectl get pods kubectl get event
El comando
get pods
muestra un pod en ejecución y el comandoget event
muestraScaled up replica set mllp-adapter-deployment-xxxx to 1
.
Después de completar esta sección, habrás desplegado de forma segura una imagen de adaptador MLLP atestada en Google Kubernetes Engine.
Eliminar los proyectos
Para evitar que se apliquen cargos en tu cuenta de Google Cloud por los recursos utilizados en este tutorial, puedes eliminar los recursos que has creado enGoogle Cloud.
Sigue los pasos que se indican a continuación para eliminar los proyectos que has creado en este tutorial:
- Proyecto de encargado de la atestación
- Proyecto de atestación
- Proyecto de implementador
- Proyecto de nota
- Proyecto de 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.