Usar el acceso de emergencia (GKE, Distributed Cloud)

En esta página se explica cómo usar el acceso de emergencia con la autorización binaria.

Antes de empezar

En esta guía se da por hecho que has configurado la autorización binaria.

Información general

Usas breakglass para desplegar una imagen de contenedor que la autorización binaria bloquea.

Acceso de emergencia proporciona una vía de escape de emergencia que te permite anular la aplicación de la política de autorización binaria para permitir que se desplieguen imágenes, incluso aquellas que la política no permitiría.

Esta función se implementa de acuerdo con las recomendaciones de la especificación del controlador de admisión de Kubernetes.

Cuando usas el acceso de emergencia para desplegar una imagen, se registra automáticamente un evento de acceso de emergencia en los registros de auditoría de Cloud, independientemente de si el despliegue cumple o infringe la política. En Registros de auditoría de Cloud, puedes auditar manualmente o activar automáticamente una alerta u otro evento posterior.

Para habilitar BreakGlass, añade un campo label a la especificación del pod con una marca de política break-glass.

Demostrar un evento de acceso de emergencia

En esta sección se muestra cómo usar Breakglass para desplegar imágenes, incluidas las que infringen la política de autorización binaria.

Actualiza la política de autorización binaria para rechazar todas las solicitudes de implementación

Para actualizar la política de forma que no se puedan desplegar imágenes, sigue estos pasos:

Google Cloud consola

  1. Ve a la página Autorización binaria de la Google Cloud consola.

    Ir a Autorización binaria

  2. Haz clic en Editar política.

  3. En la página Editar política, en Regla predeterminada del proyecto, anota el modo de evaluación original y, a continuación, haz clic en No permitir todas las imágenes.

  4. Haz clic en Guardar política.

gcloud

  1. Para guardar la política actual en el proyecto, ejecuta el siguiente comando:

    gcloud container binauthz policy export > SAVE_POLICY_YAML
    

    Sustituye SAVE_POLICY_YAML por la ruta del archivo de exportación. Por ejemplo, /tmp/save_policy.yaml.

  2. Crea un archivo de política:

    cat > TEST_POLICY_YAML << EOM
    admissionWhitelistPatterns:
    defaultAdmissionRule:
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
      evaluationMode: ALWAYS_DENY
    globalPolicyEvaluationMode: DISABLE
    EOM
    

    Sustituye TEST_POLICY_YAML por una ruta de archivo. Por ejemplo, /tmp/policy.yaml.

  3. Importa la política:

    gcloud container binauthz policy import TEST_POLICY_YAML
    

    Sustituye TEST_POLICY_YAML por una ruta de archivo. Por ejemplo, /tmp/policy.yaml.

De forma predeterminada, ahora se bloquea la implementación de todas las imágenes.

Intenta implementar una imagen

En esta sección, intentará implementar una imagen. La regla predeterminada de la política está configurada para no permitir que se desplieguen imágenes, por lo que la solicitud de despliegue falla.

  1. Crea un archivo de configuración en formato YAML. Este archivo contiene la información básica necesaria para crear el pod:

    cat > /tmp/create_pod.yaml << EOM
    apiVersion: v1
    kind: Pod
    metadata:
      name: breakglass-pod
    spec:
      containers:
      - name: container-name
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    EOM
    
  2. Crea el Pod con kubectl:

    kubectl create -f /tmp/create_pod.yaml
    

    Aparece un error que indica que la imagen se ha bloqueado por tu política. El error es similar al siguiente:

    Error from server (Forbidden): error when creating "/tmp/create_pod.yaml": pods "breakglass-pod" is forbidden: image policy webhook backend denied one or more images: Image gcr.io/google-samples/hello-app denied by Binary Authorization default
    admission rule. Denied by always_deny admission rule`.

Habilita el acceso de emergencia y vuelve a implementar

En esta sección, habilitarás BreakGlass. Aunque Breakglass es específico de la autorización binaria, debes actualizar el campo label en la especificación de Pod para habilitarlo.

Para habilitar el acceso de emergencia, ejecuta los siguientes comandos:

  1. Crea un archivo de configuración en formato YAML.

    El siguiente comando crea el archivo que contiene la etiqueta break-glass y otra información necesaria para crear el pod:

    cat > /tmp/create_pod.yaml << EOM
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-name
      labels:
        image-policy.k8s.io/break-glass: "true"
    spec:
      containers:
      - name: container-name
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    EOM
    
  2. Crea el pod con kubectl:

    kubectl create -f /tmp/create_pod.yaml
    

    Fíjate en el resultado: pod/pod-name created

Buscar la entrada de registro de acceso de emergencia en Registros de auditoría de Cloud

Consulta los eventos de acceso de emergencia en Registros de auditoría de Cloud.

Los PodSpecs antiguos que especifican annotations: alpha.image-policy.k8s.io/break-glass también activan el acceso de emergencia y generan entradas de registro. Ya no se recomienda usar esa anotación, pero sigue siendo compatible para mantener la retrocompatibilidad.

Limpieza

Para eliminar el Pod y desactivar Break Glass, sigue estos pasos:

  1. Elimina el pod:

      kubectl delete -f /tmp/create_pod.yaml
      

    Comprueba que has recibido un resultado como pod <var>pod-name</var> deleted.

  2. Quita el bloque label de la especificación de tu pod.

  3. Restablece tu política:

    Google Cloud consola

    1. Ve a la página Autorización binaria de la Google Cloud consola.

      Ir a Autorización binaria

    2. Haz clic en Editar política.

    3. En la página Editar política, en Regla predeterminada del proyecto, restablece el modo de evaluación al ajuste anterior.

    4. Haz clic en Guardar política.

    gcloud

    1. Vuelve a importar tu política original.

        gcloud container binauthz policy import SAVE_POLICY_YAML
      

      Sustituye SAVE_POLICY_YAML por la ruta del archivo que has creado anteriormente en esta guía.

    Se restablecerá tu política.

Siguientes pasos