Usa el servicio de evaluación de políticas

En esta página, se muestra cómo usar el comando del servicio de evaluación de políticas de Google Cloud CLI para evaluar rápidamente si una imagen o un recurso de Kubernetes cumple con una política de plataforma basada en la verificación de validación continua.

Descripción general

El servicio de evaluación de políticas es una función de Autorización Binaria que puedes usar con las políticas de plataforma basadas en verificaciones de validación continua (CV). El servicio de evaluación de políticas evalúa a pedido si una imagen de contenedor que especificas se ajusta a una política de la plataforma de la CV. El servicio de evaluación de políticas está disponible como un comando de gcloud CLI y el método projects.platforms.gke.policies.evaluate.

La CV verifica que no haya incumplimientos de política al menos una vez cada 24 horas. Como resultado, los eventos de CV pueden tardar hasta 24 horas en aparecer en Logging después de que se habilita la CV o se implementa un recurso de Kubernetes. Además, la CV produce entradas de registro cuando detecta un incumplimiento de política. La CV no produce entradas de registro cuando los recursos de Kubernetes se ajustan a la política.

El servicio de evaluación de políticas genera un veredicto que indica si la imagen cumple con la política o si la infringe.

Mediante el servicio de evaluación de políticas, puedes determinar con rapidez si la imagen cumple con una política.

Cuando usas el servicio, especificas la URL de la imagen, ya sea directamente o dentro de un recurso de Kubernetes, y, también, especificas el nombre de la política basada en verificaciones de la CV de GKE.

De esta manera, el servicio de evaluación de políticas puede ayudarte a desarrollar políticas y depurar recursos de Kubernetes que no cumplen con las políticas antes de usar la CV.

Esta característica solo admite políticas basadas en verificaciones de la CV de GKE.

Las imágenes también deben especificar un resumen de imágenes con el formato IMAGE_URL@IMAGE_DIGEST, excepto en los siguientes casos:

  • Verificación del directorio de confianza: La verificación se aprueba si la imagen se encuentra en un directorio que especifiques.
  • Listas de entidades permitidas de imágenes exentas: todas las demás verificaciones requieren un resumen de imágenes con el formato IMAGE_URL@IMAGE_DIGEST.

Antes de comenzar

  1. Instala Google Cloud CLI.
  2. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init

Roles obligatorios

A fin de obtener los permisos que necesitas para usar el servicio de evaluación de políticas, pídele a tu administrador que te otorgue el rol de IAM de Evaluador de políticas (roles/binaryauthorization.policyEvaluator) en el proyecto de política. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

También puedes obtener los permisos necesarios a través de funciones personalizadas o cualquier otro rol predefinido.

Si tu política usa ciertas verificaciones, es posible que debas pedirle a tu administrador que otorgue los siguientes roles necesarios específicos de la verificación:

Evalúa las políticas de plataforma basadas en verificaciones

El servicio de evaluación de políticas puede evaluar una sola URL de imagen o una imagen especificada en un recurso de Kubernetes con formato JSON o YAML.

Evalúa las políticas de plataforma basadas en verificaciones con un recurso de Kubernetes

Para evaluar una política con un recurso de Kubernetes mediante gcloud CLI, ejecuta el siguiente comando:

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

  • POLICY_ID: el ID de la política de la plataforma. Si la política se encuentra en otro proyecto, puedes usar el nombre completo del recurso: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
  • POD_SPECIFICATION_PATH: es la ruta de acceso de la especificación del Pod.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud beta container binauthz policy evaluate POLICY_ID \
    --resource=POD_SPECIFICATION_PATH

Windows (PowerShell)

gcloud beta container binauthz policy evaluate POLICY_ID `
    --resource=POD_SPECIFICATION_PATH

Windows (cmd.exe)

gcloud beta container binauthz policy evaluate POLICY_ID ^
    --resource=POD_SPECIFICATION_PATH

Para evaluar una política que especifica la plataforma, que se debe configurar como gke, ejecuta el siguiente comando:

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

  • POLICY_ID: el ID de la política de la plataforma. Si la política se encuentra en otro proyecto, puedes usar el nombre completo del recurso: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
  • POD_SPECIFICATION_PATH: es la ruta de acceso de la especificación del Pod.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud beta container binauthz policy evaluate POLICY_ID \
    --platform=gke \
    --resource=POD_SPECIFICATION_PATH

Windows (PowerShell)

gcloud beta container binauthz policy evaluate POLICY_ID `
    --platform=gke `
    --resource=POD_SPECIFICATION_PATH

Windows (cmd.exe)

gcloud beta container binauthz policy evaluate POLICY_ID ^
    --platform=gke ^
    --resource=POD_SPECIFICATION_PATH

Evalúa las políticas de plataforma basadas en verificaciones con una URL de imagen

Para evaluar una política mediante una URL de imagen, ejecuta el siguiente comando:

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

  • POLICY_ID: el ID de la política de la plataforma. Si la política se encuentra en otro proyecto, puedes usar el nombre completo del recurso: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
  • IMAGE_URL: es la ruta de acceso de la especificación del Pod.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud beta container binauthz policy evaluate POLICY_ID \
    --image=IMAGE_URL

Windows (PowerShell)

gcloud beta container binauthz policy evaluate POLICY_ID `
    --image=IMAGE_URL

Windows (cmd.exe)

gcloud beta container binauthz policy evaluate POLICY_ID ^
    --image=IMAGE_URL

Cuando usas la marca --image, se supone que el espacio de nombres y la cuenta de servicio están vacíos. Si la política que evalúas usa conjuntos de verificación con alcance kubernetesNamespace o kubernetesServiceAccount, es posible que los resultados que se muestren no sean precisos.

Revisa el resultado del comando

El resultado del comando contiene un veredicto de nivel superior que indica el estado de conformidad del Pod. Se pueden mostrar los siguientes estados de conformidad:

  • CONFORMANT: El recurso de Kubernetes cumple con la política de la plataforma.
  • NON_CONFORMANT: El recurso de Kubernetes no cumple con la política de la plataforma.
  • ERROR: La evaluación finalizó con un error.

La respuesta también contiene resultados anidados que contienen información detallada sobre el estado de conformidad de todas las verificaciones que se evaluaron para cada imagen contenida en el recurso de Kubernetes.

Cada bloque ImageResults contiene un campo explanation legible por humanos que describe por qué se permitirá o no la imagen.

Para facilitar la escritura de secuencias de comandos, el comando muestra un código de salida distinto de cero cuando la especificación del Pod no cumple con la política o la evaluación falla.

En los siguientes ejemplos de resultados, se muestran dos casos. En el primer caso, el recurso de Kubernetes cumple con la política. En el segundo caso, el recurso no cumple con la política.

Ve un resultado que cumple con las especificaciones

En esta sección, se describe el resultado de una verificación del servicio de evaluación de políticas en la que el Pod cumple con la política de la plataforma.

results:
- imageResults:
  - checkSetResult:
      checkResults:
        results:
        - displayName: My trusted directory check
          evaluationResult:
            verdict: CONFORMANT
          explanation: Image is in a trusted directory
          type: TrustedDirectoryCheck
      displayName: Default check set
      scope: {}
    imageUri: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
    verdict: CONFORMANT
  kubernetesNamespace: default
  kubernetesServiceAccount: default
  podName: my-pod
  verdict: CONFORMANT
verdict: CONFORMANT

En el resultado, se muestra un veredicto de CONFORMANT para los siguientes tipos de evaluación:

  • Check: La imagen cumple con las especificaciones de la verificación individual; en este caso, la verificación del directorio de confianza.
  • CheckSet: La imagen cumple con las especificaciones para cada una de las verificaciones del CheckSet.
  • Policy: La imagen cumple con la política.

Debido a que la imagen cumple con la política, el comando muestra un código de salida de cero.

Ver un resultado que no cumple con las políticas

En esta sección, se describe el resultado de una verificación del servicio de evaluación de políticas en la que el Pod no cumple con la política de la plataforma.

results:
- imageResults:
  - checkSetResult:
      checkResults:
        results:
        - displayName: My trusted directory check
          evaluationResult:
            verdict: NON_CONFORMANT
          explanation: Image isn't in a trusted directory
          type: TrustedDirectoryCheck
      displayName: Default check set
      scope: {}
    imageUri: us-docker.pkg.dev/untrusted-directory/containers/gke/hello-app:1.0
    verdict: NON_CONFORMANT
  kubernetesNamespace: default
  kubernetesServiceAccount: default
  podName: my-pod
  verdict: NON_CONFORMANT
verdict: NON_CONFORMANT

En el resultado, debido a que la imagen no cumple con la verificación individual, en este caso la verificación del directorio de confianza y, por lo tanto, el conjunto de todas las verificaciones, el veredicto de nivel superior es NON_CONFORMANT, y el comando muestra un código de salida distinto de cero.

Prueba el servicio de evaluación de políticas

En esta sección, se describe cómo puedes probar el servicio de evaluación de políticas. Crea una política de plataforma basada en verificaciones que contenga la verificación del directorio de confianza. En la primera prueba, puedes evaluar una especificación de Pod que cumpla con la política. En la segunda prueba, evalúas una especificación de Pod que no cumple con la política.

Para crear una política que contenga una verificación de directorio de confianza, ejecuta los siguientes comandos:

  1. Crea un archivo de política de plataforma:

    cat << EOF > my-policy.yaml
    gkePolicy:
      checkSets:
      - checks:
        - displayName: "My trusted directory check"
          trustedDirectoryCheck:
            trustedDirPatterns:
            - "us-docker.pkg.dev/google-samples/containers/gke/"
        displayName: "My default check set"
    EOF
    
  2. Crea la política:

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

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

    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
    

    gcloud beta container binauthz policy create POLICY_ID \
    --platform=gke \
    --policy-file=my-policy.yaml
    

Evalúa una imagen que cumpla con las especificaciones

En esta sección, evaluarás una especificación de Pod que cumple con la política que creaste antes en esta guía. La evaluación produce un veredicto que indica que la especificación del Pod es CONFORMANT, ya que la especificación del Pod hace referencia a una imagen que reside en el directorio especificado en trustedDirPatterns en la verificación del directorio de confianza.

  1. Crea la especificación del Pod:

    cat << EOF > my-conforming-pod.json
    {
      "apiVersion": "v1",
      "kind": "Pod",
      "metadata": {
        "name": ""
      },
      "spec": {
        "containers": [
          {
            "image": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
          }
          ]
      }
    }
    EOF
    
  2. Usa el servicio de evaluación de políticas mediante la ejecución del siguiente comando:

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

    • POLICY_ID: el ID de la política de la plataforma. Si la política se encuentra en otro proyecto, puedes usar el nombre completo del recurso: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
    • my-conforming-pod.json: es la ruta de acceso de la especificación del Pod.

    Ejecuta el siguiente comando:

    Linux, macOS o Cloud Shell

    gcloud beta container binauthz policy evaluate POLICY_ID \
        --image=my-conforming-pod.json

    Windows (PowerShell)

    gcloud beta container binauthz policy evaluate POLICY_ID `
        --image=my-conforming-pod.json

    Windows (cmd.exe)

    gcloud beta container binauthz policy evaluate POLICY_ID ^
        --image=my-conforming-pod.json

Evalúa una imagen que no cumple con las políticas

En esta sección, evaluarás una especificación de Pod que no cumple con la política que creaste antes en esta guía. La evaluación produce un veredicto que indica que la especificación del Pod es NON_CONFORMANT, porque la especificación del Pod hace referencia a una imagen que reside fuera del directorio que se especifica en trustedDirPatterns en el archivo de confianza la verificación del directorio.

Para evaluar una imagen que no cumple con las políticas, ejecuta los siguientes comandos:

  1. Crea la especificación del Pod:

    cat << EOF > my-non-conforming-pod.json
    {
      "apiVersion": "v1",
      "kind": "Pod",
      "metadata": {
        "name": ""
      },
      "spec": {
        "containers": [
          {
            "image": "us-docker.pkg.dev/untrusted-directory/containers/gke/hello-app:1.0"
          }
        ]
      }
    }
    EOF
    
  2. Usa el servicio de evaluación de políticas mediante la ejecución del siguiente comando:

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

    • POLICY_ID: el ID de la política de la plataforma. Si la política se encuentra en otro proyecto, puedes usar el nombre completo del recurso: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
    • my-non-conforming-pod.json: es la ruta de acceso de la especificación del Pod.

    Ejecuta el siguiente comando:

    Linux, macOS o Cloud Shell

    gcloud beta container binauthz policy evaluate POLICY_ID \
        --image=my-non-conforming-pod.json

    Windows (PowerShell)

    gcloud beta container binauthz policy evaluate POLICY_ID `
        --image=my-non-conforming-pod.json

    Windows (cmd.exe)

    gcloud beta container binauthz policy evaluate POLICY_ID ^
        --image=my-non-conforming-pod.json

¿Qué sigue?