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

Consulta cómo empezar a usar la validación continua (VC) de la autorización binaria con políticas basadas en comprobaciones. En esta guía de inicio rápido, utilizarás las siguientes comprobaciones de CV para validar continuamente los pods en ejecución en las siguientes condiciones:

  • Directorio de confianza: comprueba que las imágenes asociadas al pod residan en uno o varios directorios de confianza que especifiques en la política.
  • Actualidad de la imagen: comprueba que las imágenes del pod se hayan subido en un plazo de días que especifiques en la política.

Antes de empezar

  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. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  4. Para inicializar gcloud CLI, ejecuta el siguiente comando:

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • 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.

  6. Verify that billing is enabled for your Google Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable container.googleapis.com binaryauthorization.googleapis.com
  8. Install the Google Cloud CLI.

  9. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  10. Para inicializar gcloud CLI, ejecuta el siguiente comando:

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • 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.

  12. Verify that billing is enabled for your Google Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable container.googleapis.com binaryauthorization.googleapis.com
  14. Instala la herramienta de línea de comandos kubectl.
  15. Si tus políticas de autorización binaria y tus clústeres de GKE están en proyectos diferentes, asegúrate de que la autorización binaria esté habilitada en ambos proyectos.
  16. Crear una política de la plataforma

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

    1. Crea el archivo YAML de la política de la 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 comprueba 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 en los últimos 30 días.

    2. Crea la política de la plataforma:

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

      Haz los cambios siguientes:

      • POLICY_ID: un ID de tu elección
      • POLICY_PROJECT_ID: el ID del proyecto de la política

    Crear o actualizar un clúster

    Para habilitar la verificación de versiones en un clúster, puedes crear un clúster o actualizar uno que ya tengas.

    • Para crear un clúster con la política de plataforma basada en comprobaciones habilitada, 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
      

      Haz los cambios siguientes:

      • CLUSTER_NAME: el nombre del clúster
      • LOCATION: la ubicación. Por ejemplo: us-central1 o asia-south1
      • POLICY_PROJECT_ID: 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 en el que se hayan habilitado las políticas basadas en comprobaciones, 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
      

      Haz los cambios siguientes:

      • CLUSTER_NAME: el nombre del clúster
      • LOCATION: la ubicación. Por ejemplo: us-central1 o asia-south1
      • POLICY_PROJECT_ID: 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.

    Desplegar una imagen

    1. Obtén la credencial de kubectl:

      gcloud container clusters get-credentials CLUSTER_NAME
      
    2. Desplegar 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 el requisito de actualización porque se subió al repositorio en los últimos 30 días. Sin embargo, la imagen no supera la comprobación del directorio de confianza porque no está en us-central1-docker.pkg.dev/my-project/my-directory. Como resultado, CV genera TrustedDirectoryCheck entradas de registro en Cloud Logging.

    Ver los registros

    La entrada de registro aparece en Cloud Logging en un plazo de 24 horas después de que se implemente el pod, pero puede aparecer en tan solo un par de horas.

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

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

    El registro del pod hello-app es similar al que se muestra a continuación. Algunos campos pueden ser diferentes en función del ID de tu proyecto, el nombre del clúster, etc.

    {
      "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"
    }
    

    La entrada del registro muestra información sobre la infracción de las políticas, incluidos los siguientes campos:

    • policyName: una política de la plataforma que usaba CV cuando identificó la infracción
    • checkResults: bloque de resultados que incluye los siguientes campos:

      • explanation: un mensaje de error
      • checkSetName: el valor de displayName del conjunto de comprobaciones
      • checkSetIndex: el índice del conjunto de comprobaciones de la política
      • checkName: el nombre de la comprobación
      • checkIndex: el índice de la marca en el conjunto de marcas
      • verdict: el veredicto que ha dado lugar a la entrada del registro. En este caso, NOT_CONFORMANT porque no se ha cumplido la comprobación.

    Algunas comprobaciones pueden incluir información adicional que te ayude a entender por qué no se ha cumplido la comprobación.

    Como la imagen ha superado la comprobación de actualización, esta no aparece en el registro.

    Limpieza

    Para evitar que se apliquen cargos en tu Google Cloud cuenta por los recursos utilizados en esta página, elimina el Google Cloud proyecto con los recursos.

    En esta sección se describe cómo limpiar la monitorización de CV que has configurado anteriormente en esta guía.

    Puedes inhabilitar la monitorización de CV o tanto Binary Authorization como CV en tu clúster.

    Inhabilitar la 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
    

    Haz los cambios siguientes:

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

    Inhabilitar la monitorización de políticas basada en comprobaciones en un clúster

    Para inhabilitar la verificación de versiones con políticas basadas en comprobaciones en el clúster y volver a habilitar la aplicación mediante 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"
    

    Haz los cambios siguientes:

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

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

    Eliminar la política

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

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

    Haz los cambios siguientes:

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

    Siguientes pasos