Habilita el modo de ejecución de prueba

Descripción general

En esta página, se explica cómo habilitar el modo de ejecución de prueba. Cuando el modo de ejecución de prueba está habilitado, la autorización binaria verifica el cumplimiento de la política durante la creación del Pod sin bloquear dicha creación. En cambio, los mensajes de estado del cumplimiento de políticas se registran en Cloud Logging. Con esta información, puedes determinar si la implementación de alguna imagen de contenedor se bloqueó de manera accidental y puedes corregir la política. Cuando la política aplica el cumplimiento de la forma prevista, puedes inhabilitar el modo de ejecución de prueba.

Antes de comenzar

En esta guía, se da por sentado que tienes configurada la autorización binaria. Si deseas realizar una configuración simple, consulta la guía de inicio rápido.

Para obtener un instructivo completo y basado en una certificación, consulta Comienza a usar la CLI o Comienza a usar Console.

Habilita la ejecución de prueba

Para habilitar la ejecución de prueba, sigue estos pasos:

gcloud

  1. Exporta la política de autorización binaria predeterminada:

    gcloud container binauthz policy export  > /tmp/policy.yaml
    
  2. En un editor de texto, establece enforcementMode en DRYRUN_AUDIT_LOG_ONLY.

    El archivo de políticas en formato YAML debe verse de la siguiente manera:

    admissionWhitelistPatterns:
    - namePattern: gcr.io/google_containers/*
    - namePattern: gcr.io/google-containers/*
    - namePattern: k8s.gcr.io/*
    - namePattern: gke.gcr.io/*
    - namePattern: gcr.io/stackdriver-agents/*
    defaultAdmissionRule:
      evaluationMode: ALWAYS_DENY
      enforcementMode: DRYRUN_AUDIT_LOG_ONLY
    name: projects/PROJECT_ID/policy
    
  3. Vuelve a importar el archivo de políticas en formato YAML a la autorización binaria:

    gcloud container binauthz policy import /tmp/policy.yaml
    
  4. Actualiza el archivo kubeconfig local:

    gcloud container clusters get-credentials \
    --zone us-central1-a \
    CLUSTER_NAME
    

    En el ejemplo anterior, CLUSTER_NAME es el nombre del clúster de GKE.

Console

  1. Ve a la página Autorización binaria en Google Cloud Console.

    Ir a la página Autorización binaria

  2. Haz clic en Configurar política o, si ya existe una, en Editar política.

  3. En la política, cambia evaluationMode de ALWAYS_ALLOW a ALWAYS_DENY y establece enforcementMode en DRYRUN_AUDIT_LOG_ONLY.

    El archivo de políticas en formato YAML podría aparecer de la siguiente manera:

    admissionWhitelistPatterns:
    - namePattern: gcr.io/google_containers/*
    - namePattern: gcr.io/google-containers/*
    - namePattern: k8s.gcr.io/*
    - namePattern: gke.gcr.io/*
    - namePattern: gcr.io/stackdriver-agents/*
    defaultAdmissionRule:
      evaluationMode: ALWAYS_DENY
      enforcementMode: DRYRUN_AUDIT_LOG_ONLY
    name: projects/PROJECT_ID/policy
    
  4. Haz clic en Guardar política.

Implementa un contenedor

  1. Implementa la imagen de contenedor

    1. Crea un archivo pod.yaml que se vea de la siguiente manera (opcional):

      apiVersion: v1
      kind: Pod
      metadata:
        name: test-pod
      spec:
        containers:
        - name: test-container
          image: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
      
    2. Implementa la imagen de contenedor:

      kubectl apply -f pod.yaml
      
  2. Confirma que el Pod esté en ejecución

    El Pod debe estar en ejecución. Para confirmar, ejecuta el siguiente comando:

    kubectl get pods
    

    Deberías ver que test-pod esté en ejecución.

  3. Verifica el registro de auditoría:

    Para ver las entradas del registro de auditoría de la ejecución de prueba en Cloud Logging, consulta Eventos de ejecución de prueba en Cloud Logging.

    Un ejemplo del registro de auditoría de la ejecución de prueba se ve de la siguiente manera:

    {
     insertId: "f87d1ef8-fa7b-4079-be90-d0638e7983ba"
     labels: {
      authorization.k8s.io/decision: "allow"
      authorization.k8s.io/reason: ""
      imagepolicywebhook.image-policy.k8s.io/dry-run: "true"
      imagepolicywebhook.image-policy.k8s.io/overridden-verification-result: "'gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4': Denied by an ALWAYS_DENY admission rule
    "
     }
     logName: "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
     operation: {…}
     protoPayload: {…}
     receiveTimestamp: "2020-06-10T15:59:23.857650559Z"
     resource: {…}
     timestamp: "2020-06-10T15:59:00.185878Z"
    }
    

    En el ejemplo anterior, PROJECT_ID es el ID de tu proyecto.

Realiza una limpieza

Borra el Pod

kubectl delete -f /tmp/pod.yaml

Inhabilita el modo de ejecución de prueba

Asegúrate de inhabilitar el modo de ejecución de prueba mediante la modificación del enforcementMode en la defaultAdmissionRule de tu política de autorización binaria. Por ejemplo:

   enforcementMode: ALWAYS_ALLOW