Cómo usar la verificación del directorio de confianza

En esta página, se muestra cómo usar la verificación de directorio de confianza de validación continua (CV) de la autorización binaria para verificar que las imágenes asociadas con los Pods que se ejecutan en clústeres de Google Kubernetes Engine (GKE) habilitados por CV se hayan implementado desde directorios de confianza.

Costos

En esta guía, se usan los siguientes servicios de Google Cloud:

  • La autorización binaria, pero el CV está disponible sin costo durante la etapa de Vista previa
  • GKE

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. Instala Google Cloud CLI.
  3. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  4. Crea o selecciona un proyecto de Google Cloud.

    • Crea un proyecto de Google Cloud:

      gcloud projects create PROJECT_ID
    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID
  5. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  6. Habilita las APIs de Artifact Registry, Binary Authorization, Google Kubernetes Engine:

    gcloud services enable artifactregistry.googleapis.com binaryauthorization.googleapis.com container.googleapis.com
  7. Instala Google Cloud CLI.
  8. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  9. Crea o selecciona un proyecto de Google Cloud.

    • Crea un proyecto de Google Cloud:

      gcloud projects create PROJECT_ID
    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID
  10. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  11. Habilita las APIs de Artifact Registry, Binary Authorization, Google Kubernetes Engine:

    gcloud services enable artifactregistry.googleapis.com binaryauthorization.googleapis.com container.googleapis.com
  12. Asegúrate de que gcloud CLI esté actualizada a la versión más reciente.
  13. Instala la herramienta de línea de comandos de “kubectl”.
  14. Si tus políticas de autorización binaria y clústeres de GKE están en proyectos diferentes, asegúrate de que la autorización binaria esté habilitada en ambos proyectos.

Roles obligatorios

En esta sección, se muestra cómo configurar roles para esta verificación.

Descripción general

Si ejecutas todos los productos mencionados en la guía en el mismo proyecto, no necesitas establecer ningún permiso. La autorización binaria configura las funciones correctamente cuando la habilitas. Si ejecutas los productos en diferentes proyectos, debes configurar la función como se describe en esta sección.

Para asegurarte de que el agente de servicio de autorización binaria del proyecto del clúster tenga los permisos necesarios para evaluar la verificación del directorio de confianza de CV, pídele al administrador que le otorgue las siguientes funciones de IAM al agente de servicio de la autorización binaria del proyecto del clúster:

  • Si tu proyecto de clúster es diferente del proyecto de política, haz lo siguiente: Evaluador de políticas de autorización binaria (roles/binaryauthorization.policyEvaluator): Es el agente de servicio de autorización binaria del proyecto de clúster para acceder al proyecto de política.

Si quieres obtener más información para otorgar roles, consulta Administra el acceso.

Es posible que el administrador también pueda otorgar los permisos necesarios al agente de servicio de autorización binaria del proyecto de clúster mediante funciones personalizadas o cualquier otra función predefinida.

Otorga roles con gcloud CLI

Si el proyecto en el que ejecutas el clúster es diferente del proyecto en el que reside la política, haz lo siguiente para otorgar permiso al agente de servicio de autorización binaria del proyecto de clúster a fin de que acceda a la política en el proyecto de política.

  1. Obtén el agente de servicio de autorización binaria del proyecto del clúster:

    PROJECT_NUMBER=$(gcloud projects list --filter="projectId:CLUSTER_PROJECT_ID" \
      --format="value(PROJECT_NUMBER)")
    CLUSTER_SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
    

    Reemplaza CLUSTER_PROJECT_ID por el ID del proyecto del clúster.

  2. Permita que el CV evalúe la política en el clúster:

    gcloud projects add-iam-policy-binding POLICY_PROJECT_ID \
        --member="serviceAccount:$CLUSTER_SERVICE_ACCOUNT" \
        --role='roles/binaryauthorization.policyEvaluator'
    

    Reemplaza POLICY_PROJECT_ID por el ID del proyecto que contiene tu política.

Crea la política de la plataforma

Para crear la política de la plataforma de CV con una verificación de directorio de confianza, haz lo siguiente:

  1. Crea el archivo de políticas del directorio de confianza:

    cat > /tmp/my-policy.yaml <<EOF
    gkePolicy:
      checkSets:
        checks:
          trustedDirectoryCheck:
            trustedDirPatterns:
            - PATTERN1
            - PATTERN2
          displayName: CHECK_DISPLAY_NAME
        displayName: CHECK_SET_DISPLAY_NAME
    EOF
    

    Reemplaza lo siguiente:

    • PATTERN1: Es un elemento de lista con un patrón de directorio.
    • PATTERN2: Es un elemento de lista con un patrón de directorio.
    • CHECK_DISPLAY_NAME: Es un nombre visible opcional para la verificación del directorio de confianza.
    • CHECK_SET_DISPLAY_NAME: Es un nombre visible opcional para la verificación del directorio de confianza.

    Los siguientes son ejemplos de patrones:

    • asia-east1-docker.pkg.dev/my-project/my-repo: confía solo en este repositorio.
    • europe-central1-docker.pkg.dev/my-project/my-repo/test*: Confia solo en este repositorio y repositorios inmediatamente debajo de él que comienzan con test.
    • us-central1-docker.pkg.dev/my-project/my-repo/**: confía solo en este repositorio y en todos los repositorios inferiores.
  2. Crea la política de la plataforma:

    Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

    • POLICY_ID: Un ID de política de plataforma que elijas. Si la política está en otro proyecto, puedes usar el nombre completo del recurso: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
    • POLICY_PATH: Es una ruta de acceso al archivo de políticas.
    • POLICY_PROJECT_ID: El ID del proyecto de política

    Ejecuta el siguiente comando:

    Linux, macOS o Cloud Shell

    gcloud beta container binauthz policy create POLICY_ID \
        --platform=gke \
        --policy-file=POLICY_PATH \
        --project=POLICY_PROJECT_ID
    

    Windows (PowerShell)

    gcloud beta container binauthz policy create POLICY_ID `
        --platform=gke `
        --policy-file=POLICY_PATH `
        --project=POLICY_PROJECT_ID
    

    Windows (cmd.exe)

    gcloud beta container binauthz policy create POLICY_ID ^
        --platform=gke ^
        --policy-file=POLICY_PATH ^
        --project=POLICY_PROJECT_ID
    

Habilita la CV

Puede crear un clúster nuevo o actualizar uno existente para usar la supervisión de CV con políticas de plataforma basadas en verificaciones.

Crear un clúster que use la supervisión de CV

En esta sección, crearás un clúster que solo use la supervisión de CV con políticas de plataforma basadas en verificaciones.

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

  • CLUSTER_NAME: Es un nombre de clúster.
  • LOCATION: Es la ubicación, por ejemplo: us-central1 o asia-south1.
  • POLICY_PROJECT_ID: Es el ID del proyecto en el que se almacena la política.
  • POLICY_ID: Es el ID de la política.
  • CLUSTER_PROJECT_ID: Es el ID del proyecto del clúster.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud beta container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --binauthz-evaluation-mode=POLICY_BINDINGS \
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
    --project=CLUSTER_PROJECT_ID

Windows (PowerShell)

gcloud beta container clusters create CLUSTER_NAME `
    --location=LOCATION `
    --binauthz-evaluation-mode=POLICY_BINDINGS `
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID `
    --project=CLUSTER_PROJECT_ID

Windows (cmd.exe)

gcloud beta container clusters create CLUSTER_NAME ^
    --location=LOCATION ^
    --binauthz-evaluation-mode=POLICY_BINDINGS ^
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^
    --project=CLUSTER_PROJECT_ID

Crear un clúster que use la aplicación forzosa y la supervisión de CV

En esta sección, crearás un clúster que aplique la aplicación de políticas project-singleton y la supervisión de CV con políticas de plataforma basadas en verificaciones:

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

  • CLUSTER_NAME: Es un nombre de clúster.
  • LOCATION: Es la ubicación, por ejemplo: us-central1 o asia-south1.
  • POLICY_PROJECT_ID: Es el ID del proyecto en el que se almacena la política.
  • POLICY_ID: Es el ID de la política.
  • CLUSTER_PROJECT_ID: Es el ID del proyecto del clúster.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud beta container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE \
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
    --project=CLUSTER_PROJECT_ID

Windows (PowerShell)

gcloud beta container clusters create CLUSTER_NAME `
    --location=LOCATION `
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE `
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID `
    --project=CLUSTER_PROJECT_ID

Windows (cmd.exe)

gcloud beta container clusters create CLUSTER_NAME ^
    --location=LOCATION ^
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ^
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^
    --project=CLUSTER_PROJECT_ID

Actualiza un clúster para usar la supervisión de CV

En esta sección, actualizarás un clúster para usar la supervisión de CV con políticas de plataforma basadas solo en verificaciones. Si el clúster ya tiene habilitada la aplicación de políticas de project-singleton, la ejecución de este comando la inhabilita. En su lugar, considera actualizar el clúster con la aplicación forzosa y la supervisión de CV habilitadas.

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

  • CLUSTER_NAME: Es el nombre del clúster.
  • LOCATION: Es la ubicación, por ejemplo: us-central1 o asia-south1.
  • POLICY_PROJECT_ID: Es el ID del proyecto en el que se almacena la política.
  • POLICY_ID: Es el ID de la política.
  • CLUSTER_PROJECT_ID: Es el ID del proyecto del clúster.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud beta container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --binauthz-evaluation-mode=POLICY_BINDINGS \
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
    --project=CLUSTER_PROJECT_ID

Windows (PowerShell)

gcloud beta container clusters update CLUSTER_NAME `
    --location=LOCATION `
    --binauthz-evaluation-mode=POLICY_BINDINGS `
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID `
    --project=CLUSTER_PROJECT_ID

Windows (cmd.exe)

gcloud beta container clusters update CLUSTER_NAME ^
    --location=LOCATION ^
    --binauthz-evaluation-mode=POLICY_BINDINGS ^
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^
    --project=CLUSTER_PROJECT_ID

Actualizar un clúster para usar la aplicación forzosa y la supervisión de CV

En esta sección, actualizarás un clúster para usar la aplicación de políticas de proyecto único y la supervisión de CV con políticas de plataforma basadas en verificaciones.

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

  • CLUSTER_NAME: Es un nombre de clúster.
  • LOCATION: Es la ubicación, por ejemplo: us-central1 o asia-south1.
  • POLICY_PROJECT_ID: Es el ID del proyecto en el que se almacena la política.
  • POLICY_ID: Es el ID de la política.
  • CLUSTER_PROJECT_ID: Es el ID del proyecto del clúster.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud beta container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE \
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
    --project=CLUSTER_PROJECT_ID

Windows (PowerShell)

gcloud beta container clusters update CLUSTER_NAME `
    --location=LOCATION `
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE `
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID `
    --project=CLUSTER_PROJECT_ID

Windows (cmd.exe)

gcloud beta container clusters update CLUSTER_NAME ^
    --location=LOCATION ^
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ^
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^
    --project=CLUSTER_PROJECT_ID

Ver registros de las entradas de CV

El CV registra los incumplimientos de políticas de la plataforma en Cloud Logging en un plazo de 24 horas. Por lo general, es posible que veas entradas en un par de horas.

Si ninguna imagen infringe las políticas de la plataforma que habilitaste, no aparecerá ninguna entrada en los registros.

Para ver las entradas del registro de CV de los últimos siete días, ejecute el siguiente comando:

gcloud logging read \
     --order="desc" \
     --freshness=7d \
     --project=CLUSTER_PROJECT_ID \
    'logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "policyName"'

Reemplaza CLUSTER_PROJECT_ID por el ID del proyecto del clúster.

Comprobar tipos

Los registros de CV verifican la información de incumplimiento de checkResults. En la entrada, el valor checkType indica la verificación. Los valores para cada verificación son los siguientes:

  • ImageFreshnessCheck
  • SimpleSigningAttestationCheck
  • SlsaCheck
  • TrustedDirectoryCheck
  • VulnerabilityCheck

Registro de ejemplo

En el siguiente ejemplo, la entrada de CV Logging describe una imagen que no cumple con las condiciones para infringir una verificación de directorio de confianza:

{
  "insertId": "637c2de7-0000-2b64-b671-24058876bb74",
  "jsonPayload": {
    "podEvent": {
      "endTime": "2022-11-22T01:14:30.430151Z",
      "policyName": "projects/123456789/platforms/gke/policies/my-policy",
      "images": [
        {
          "result": "DENY",
          "checkResults": [
            {
              "explanation": "TrustedDirectoryCheck at index 0 with display name \"My trusted directory check\" has verdict NOT_CONFORMANT. Image is not in a trusted directory",
              "checkSetName": "My check set",
              "checkSetIndex": "0",
              "checkName": "My trusted directory check",
              "verdict": "NON_CONFORMANT",
              "checkType": "TrustedDirectoryCheck",
              "checkIndex": "0"
            }
          ],
          "image": "gcr.io/my-project/hello-app:latest"
        }
      ],
      "verdict": "VIOLATES_POLICY",
      "podNamespace": "default",
      "deployTime": "2022-11-22T01:06:53Z",
      "pod": "hello-app"
    },
    "@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent"
  },
  "resource": {
    "type": "k8s_cluster",
    "labels": {
      "project_id": "my-project",
      "location": "us-central1-a",
      "cluster_name": "my-test-cluster"
    }
  },
  "timestamp": "2022-11-22T01:44:28.729881832Z",
  "severity": "WARNING",
  "logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
  "receiveTimestamp": "2022-11-22T03:35:47.171905337Z"
}

Limpia

En esta sección, se describe cómo limpiar la supervisión de CV que configuraste antes en esta guía.

Puedes inhabilitar la supervisión de CV o la autorización binaria y el CV en el clúster.

Inhabilita la autorización binaria en un clúster

Para inhabilitar la aplicación de la autorización binaria y el CV en el clúster, ejecuta el siguiente comando:

gcloud beta container clusters update CLUSTER_NAME \
    --binauthz-evaluation-mode=DISABLED \
    --location=LOCATION \
    --project=CLUSTER_PROJECT_ID

Reemplaza lo siguiente:

  • CLUSTER_NAME: es el nombre del clúster
  • LOCATION: Es la ubicación del clúster.
  • CLUSTER_PROJECT_ID: Es el ID del proyecto del clúster.

Inhabilita la supervisión de políticas basada en verificaciones en un clúster

Para inhabilitar el CV con políticas basadas en verificaciones en el clúster y volver a habilitar la aplicación forzosa con la política de aplicación de la autorización binaria, ejecuta el siguiente comando:

gcloud beta container clusters update CLUSTER_NAME  \
    --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
    --location=LOCATION \
    --project="CLUSTER_PROJECT_ID"

Reemplaza lo siguiente:

  • CLUSTER_NAME: es el nombre del clúster
  • LOCATION: Es la ubicación del clúster.
  • CLUSTER_PROJECT_ID: Es el ID del proyecto del clúster.

Ten en cuenta que --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE es equivalente a la marca --enable-binauthz anterior.

Borrar la política

Para borrar la política, ejecuta el siguiente comando. No es necesario borrar la política de la plataforma basada en verificaciones para inhabilitar la auditoría de la política basada en verificaciones.

gcloud beta container binauthz policy delete POLICY_ID \
    --platform=gke \
    --project="POLICY_PROJECT_ID"

Reemplaza lo siguiente:

  • POLICY_ID: El ID de la política
  • POLICY_PROJECT_ID: Es el ID del proyecto de política.

¿Qué sigue?