Guía de inicio rápido: Supervisa la seguridad de los Pods con validación continua

Obtén información sobre cómo comenzar a usar la validación continua de Autorización Binaria (CV) con políticas basadas en verificaciones. En esta guía de inicio rápido, se usan las siguientes verificaciones de CV para validar de forma continua los Pods en ejecución en función de las siguientes condiciones:

  • Directorio de confianza: Comprueba que las imágenes asociadas con el Pod residan en uno o más directorios de confianza que especificas en la política.
  • Actualización de imágenes: verifica que las imágenes del Pod se hayan subido dentro de una cantidad de días que especifiques en la política.

Antes de comenzar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Binary Authorization and Google Kubernetes Engine APIs:

    gcloud services enable container.googleapis.com binaryauthorization.googleapis.com
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  10. Make sure that billing is enabled for your Google Cloud project.

  11. Enable the Binary Authorization and Google Kubernetes Engine APIs:

    gcloud services enable container.googleapis.com binaryauthorization.googleapis.com
  12. Instala la herramienta de línea de comandos de kubectl.
  13. 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.

Crea una política de plataforma

Para configurar una política de la plataforma de la CV GKE, haz lo siguiente:

  1. Crea el archivo YAML de la política de plataforma:

    cat << EOF > /tmp/my-policy.yaml
    gkePolicy:
      checkSets:
      - checks:
        - trustedDirectoryCheck:
            trustedDirPatterns:
            - us-central1-docker.pkg.dev/my-project/my-directory
          displayName: My trusted directory check
        - imageFreshnessCheck:
            maxUploadAgeDays: 30
          displayName: My image freshness check
        displayName: My trusted directory and image freshness check set
    EOF
    

    Esta política verifica las siguientes condiciones:

    • Las imágenes de los Pods se almacenan en el repositorio de Artifact Registry llamado us-central1-docker.pkg.dev/my-project/my-directory.

    • Las imágenes de los Pods se subieron a los repositorios de Artifact Registry o Container Registry dentro de los últimos 30 días.

  2. Crea la política de plataforma:

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

    Reemplaza lo siguiente:

    • POLICY_ID: un ID que elijas
    • POLICY_PROJECT_ID: el ID del proyecto de política

Crea o actualiza un clúster

Para habilitar la CV en un clúster, puedes crear un clúster nuevo o actualizar uno existente.

  • Para crear un clúster que tenga habilitada la política de plataforma basada en verificaciones, ejecuta el siguiente comando:

    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
    

    Reemplaza lo siguiente:

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

    Espera a que se cree el clúster.

  • Para actualizar un clúster existente con políticas basadas en verificaciones habilitadas, ejecuta el siguiente comando.

    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
    

    Reemplaza lo siguiente:

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

    Espera a que se actualice el clúster.

Implementa una imagen

  1. Obtén la credencial para kubectl:

    gcloud container clusters get-credentials CLUSTER_NAME
    
  2. Implementa una imagen:

    kubectl run hello-app \
        --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
    

    La imagen us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 cumple con la verificación de actualización porque se subió al repositorio en los últimos 30 días. Sin embargo, la imagen no satisface la verificación del directorio de confianza porque no está en us-central1-docker.pkg.dev/my-project/my-directory. Como resultado, la CV produce entradas de registro TrustedDirectoryCheck en Cloud Logging.

Consulta los registros

La entrada de registro aparecerá en Cloud Logging dentro de las 24 horas posteriores a la implementación del Pod, pero puede aparecer en un par de horas.

Para ver el registro en Cloud Logging, usa el siguiente filtro:

logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation"
"policyName"

El registro para el Pod hello-app es similar al que se muestra a continuación. Algunos campos pueden ser diferentes según el ID del proyecto, el nombre del clúster, etcétera.

{
  "insertId": "637c2de7-0000-2b64-b671-24058876bb74",
  "jsonPayload": {
    "podEvent": {
      "endTime": "2022-11-22T01:14:30.430151Z",
      "policyName": "projects/1234567890/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": "Default check set",
              "checkSetIndex": "0",
              "checkName": "My trusted directory check",
              "verdict": "NON_CONFORMANT",
              "checkType": "TrustedDirectoryCheck",
              "checkIndex": "0"
            }
          ],
          "image": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
        }
      ],
      "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-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"
}

En la entrada de registro, se muestra información sobre el incumplimiento de política, incluidos los siguientes campos:

  • policyName: una política de la plataforma que usaba la CV cuando identificó el incumplimiento
  • checkResults: Es un bloque de resultados que incluye los siguientes campos:

    • explanation: un mensaje de error
    • checkSetName: el valor displayName para el conjunto de verificación
    • checkSetIndex: el índice de la verificación establecida en la política
    • checkName: el nombre de la verificación
    • checkIndex: el índice de la verificación en el conjunto de verificaciones
    • verdict: el veredicto que generó la entrada de registro, en este caso NOT_CONFORMANT, porque no se cumplió la verificación.

Algunas verificaciones pueden incluir información adicional que puede ayudarte a comprender por qué no se cumplió la verificación.

Como la imagen cumplió con la verificación de actualización, esta no aparece en el registro.

Libera espacio

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que se usaron en esta página, borra el proyecto de Cloud que tiene los recursos.

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

Puedes inhabilitar la supervisión de la CV o Autorización Binaria y la CV en tu clúster.

Inhabilita Autorización Binaria en un clúster

Para inhabilitar la aplicación de CV y de Autorización Binaria en tu 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 la CV con políticas basadas en verificaciones en el clúster y volver a habilitar la aplicación mediante la política de aplicación de 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 plataforma basada en verificaciones para inhabilitar la auditoría de políticas 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: el ID del proyecto de política

¿Qué sigue?