Proteger los despliegues de imágenes en Cloud Run y Google Kubernetes Engine

En esta página se explica cómo puedes proteger los despliegues de imágenes en Cloud Run y Google Kubernetes Engine con Cloud Build.

Consulta cómo configurar Autorización binaria para comprobar las atestaciones de compilación y bloquear los despliegues de imágenes que no haya generado Cloud Build. Este proceso puede reducir el riesgo de implementar software no autorizado.

Antes de empezar

  1. Enable the Cloud Build, Binary Authorization, and Artifact Registry APIs.

    Enable the APIs

  2. Para usar los ejemplos de línea de comandos de esta guía, instala y configura el SDK de Google Cloud.

  3. Configura Autorización binaria para tu plataforma.

Controlar los despliegues con la autorización binaria

Una política de la autorización binaria es un conjunto de reglas que rigen el despliegue de imágenes. Puedes configurar una regla para requerir atestaciones con firma digital.

Cloud Build genera y firma atestaciones en tiempo de compilación. Con la autorización binaria, puedes usar el built-by-cloud-build atestador para verificar las atestaciones y desplegar solo las imágenes creadas por Cloud Build.

Para crear el attestor built-by-cloud-build en tu proyecto, ejecuta una compilación en ese proyecto.

Para permitir que solo se desplieguen imágenes creadas por Cloud Build, sigue estos pasos:

Consola

  1. Ve a la página Autorización binaria de la Google Cloud consola:

    Ir a Autorización binaria

  2. En la pestaña Política, haga clic en Editar política.

  3. En el cuadro de diálogo Editar política, seleccione Permitir solo las imágenes que hayan sido aprobadas por todos los siguientes certificadores.

  4. Haz clic en Añadir verificadores.

  5. En el cuadro de diálogo Añadir certificadores, haz lo siguiente:

    1. Selecciona Añadir por proyecto y nombre de encargado de la atestación y sigue estos pasos:
      1. En el campo Nombre del proyecto, introduce el proyecto en el que ejecutas Cloud Build.
      2. Haz clic en el campo Nombre del attestor y observa que el attestor built-by-cloud-build está disponible.
      3. Haz clic en built-by-cloud-build.
    2. También puede seleccionar Añadir por ID de recurso de encargado de la atestación. En ID de recurso de encargado de la atestación, introduce

      projects/PROJECT_ID/attestors/built-by-cloud-build
      

      Sustituye PROJECT_ID por el proyecto en el que ejecutas Cloud Build.

  6. Haz clic en Añadir 1 attestor (Añadir 1 attestor).

  7. Haz clic en Save Policy.

gcloud

  1. Exporta tu política actual a un archivo con el siguiente comando:

    gcloud container binauthz policy export > /tmp/policy.yaml
    
  2. Edita el archivo de política.

  3. Edita una de las siguientes reglas:

    • defaultAdmissionRule
    • clusterAdmissionRules
    • istioServiceIdentityAdmissionRules
    • kubernetesServiceAccountAdmissionRules
  4. Añade un bloque requireAttestationsBy a la regla si aún no lo has hecho.

  5. En el bloque requireAttestationsBy, añade

    projects/PROJECT_ID/attestors/built-by-cloud-build
    

    Sustituye PROJECT_ID por el proyecto en el que ejecutas Cloud Build.

  6. Guarda el archivo de política.

  7. Importa el archivo de políticas.

    gcloud container binauthz policy import /tmp/policy.yaml
    

    A continuación, se muestra un ejemplo de archivo de política que contiene la referencia al built-by-cloud-build-attestor:

    defaultAdmissionRule:
      evaluationMode: REQUIRE_ATTESTATION
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
      requireAttestationsBy:
        - projects/PROJECT_ID/attestors/built-by-cloud-build
    name: projects/PROJECT_ID/policy
    

    Sustituye PROJECT_ID por el ID del proyecto en el que ejecutas Cloud Build.

Puedes ver los errores de las políticas en los mensajes de registro de la autorización binaria de GKE o Cloud Run.

Usar el modo de prueba

En el modo de ejecución de prueba, la autorización binaria comprueba el cumplimiento de las políticas sin bloquear el despliegue. En su lugar, los mensajes de estado de cumplimiento de las políticas se registran en Cloud Logging. Puede usar estos registros para determinar si su política de bloqueo funciona correctamente e identificar falsos positivos.

Para habilitar la prueba de funcionamiento, sigue estos pasos:

Consola

  1. Ve a la página Autorización binaria de la Google Cloud consola.

    Ve a Autorización binaria.

  2. Haz clic en Editar política.

  3. En Regla predeterminada o en una regla específica, selecciona Modo de prueba.

  4. Haz clic en Save Policy.

gcloud

  1. Exporta la política de autorización binaria a un archivo YAML:

    gcloud container binauthz policy export  > /tmp/policy.yaml
    
  2. En un editor de texto, asigna el valor DRYRUN_AUDIT_LOG_ONLY a enforcementMode y guarda el archivo.

  3. Para actualizar la política, importa el archivo ejecutando el siguiente comando:

    gcloud container binauthz policy import /tmp/policy.yaml
    

Puedes ver los errores de las políticas en los mensajes de registro de autorización binaria de GKE o Cloud Run.

Limitaciones

  • Cloud Build y Binary Authorization deben estar en el mismo proyecto. Si ejecutas tu plataforma de implementación en otro proyecto, configura los roles de gestión de identidades y accesos para una configuración de varios proyectos y consulta el proyecto de Cloud Build al añadir el attestor built-by-cloud-build en Autorización binaria.

  • Cloud Build no genera atestaciones cuando insertas imágenes en Artifact Registry mediante un paso de compilación docker push explícito. Asegúrate de enviar el contenido a Artifact Registry mediante el campo images en el paso de compilación docker build. Para obtener más información sobre images, consulta Diferentes formas de almacenar imágenes en Artifact Registry.

  • Debes usar archivos de configuración de compilación independientes para tu canalización de compilación y tu canalización de implementación. Esto se debe a que Cloud Build genera certificaciones solo después de que la canalización de compilación se complete correctamente. A continuación, Autorización binaria comprobará la certificación antes de implementar la imagen.

Habilitar las certificaciones en grupos privados

De forma predeterminada, Cloud Build no genera certificaciones de autorización binaria para las compilaciones en grupos privados. Para generar atestaciones, añade la opción requestedVerifyOption: VERIFIED a tu archivo de configuración de compilación:

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: [ 'build', '-t', 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1', '.' ]
images:
- 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1'
options:
  requestedVerifyOption: VERIFIED

Después de añadir la requestedVerifyOption, Cloud Build habilita la generación de atestaciones y los metadatos de procedencia de tu imagen.

Ver metadatos del attestor

Un certificador se crea la primera vez que ejecutas una compilación en un proyecto. El ID del verificador tiene el formato projects/PROJECT_ID/attestors/built-by-cloud-build, donde PROJECT_ID es el ID de tu proyecto.

Puedes consultar los metadatos del attestor de compilación con el siguiente comando:

curl -X GET -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://binaryauthorization.googleapis.com/v1beta1/projects/PROJECT_ID/attestors/built-by-cloud-build

Sustituye PROJECT_ID por el proyecto en el que ejecutas Cloud Build.

La salida contiene información sobre el attestor y las claves públicas correspondientes. Por ejemplo:

name": "projects/PROJECT_ID/attestors/built-by-cloud-build",
  "userOwnedDrydockNote": {
    "noteReference": "projects/PROJECT_ID/notes/built-by-cloud-build",
    "publicKeys": [
      {
        "id": "//cloudkms.googleapis.com/v1/projects/verified-builder/locations/asia/keyRings/attestor/cryptoKeys/builtByGCB/cryptoKeyVersions/1",
        "pkixPublicKey": {
          "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEMMvFxZLgIiWOLIXsaTkjTmOKcaK7\neIZrgpWHpHziTFGg8qyEI4S8O2/2wh1Eru7+sj0Sh1QxytN/KE5j3mTvYA==\n-----END PUBLIC KEY-----\n",
          "signatureAlgorithm": "ECDSA_P256_SHA256"
        }
      },
...
      }
    ],
    "delegationServiceAccountEmail": "service-942118413832@gcp-binaryauthorization.iam.gserviceaccount.com"
  },
  "updateTime": "2021-09-24T15:26:44.808914Z",
  "description": "Attestor autogenerated by build ID fab07092-30f4-4f70-caf7-4545cbc404d6"

Siguientes pasos