Usa la anulación de emergencia (GKE)

En esta página, se proporcionan instrucciones sobre el uso de flujos de trabajo de emergencia con la autorización binaria.

Antes de comenzar

En esta guía se supone que configuraste la autorización binaria.

Descripción general

Usa la anulación de emergencia para implementar una imagen de contenedor que, por lo general, la autorización binaria bloquearía.

La anulación de emergencia proporcionan una vía de escape de emergencia que te permite anular la aplicación de la política de la autorización binaria y permite que se implemente una imagen de contenedor, incluidas aquellas que la política no permitiría.

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

Cuando usas la anulación de emergencia para implementar una imagen, un evento de emergencia se registra de forma automática en los registros de auditoría de Cloud. En los registros de auditoría de Cloud, puedes auditar de forma manual o activar de manera automática una alerta o algún otro evento posterior.

Para habilitar la anulación de emergencia, agrega una etiqueta al podspec con una marca de política break-glass.

Demuestra un evento de anulación de emergencia

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

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

Para actualizar la política a fin de inhabilitar la implementación de todas las imágenes, sigue estos pasos:

Cloud Console

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

    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, observa el modo de evaluación original y, luego, haz clic en Inhabilitar todas las imágenes.

  4. Haga clic en Save Policy.

gcloud

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

    gcloud container binauthz policy export > SAVE_POLICY_YAML
    

    Reemplaza 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
    

    Reemplaza TEST_POLICY_YAML con una ruta de acceso del archivo, por ejemplo, /tmp/policy.yaml.

  3. Importa la política:

    gcloud container binauthz policy import TEST_POLICY_YAML
    

    Reemplaza TEST_POLICY_YAML con una ruta de acceso del archivo, por ejemplo, /tmp/policy.yaml.

De forma predeterminada, todas las imágenes están ahora bloqueadas.

Intenta implementar una imagen de contenedor

Aunque los flujos de trabajo de emergencia son específicos de la autorización binaria, debes actualizar la etiqueta en un podspec para habilitarla. Para hacerlo, ejecute los siguientes comandos:

  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: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    EOM
    
  2. Crea el Pod mediante kubectl:

    kubectl create -f /tmp/create_pod.yaml
    

    Verás un error que indica que tu política bloqueó la imagen. 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 los flujos de trabajo de emergencia y vuelve a implementar

  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: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    EOM
    

    Para todas las versiones principales de Kubernetes anteriores, habilita los flujos de trabajo de emergencia mediante el agregado de alpha.image-policy.k8s.io/break-glass al nodo annotations de la siguiente manera:

    cat > /tmp/create_pod.yaml << EOM
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-name
      annotations:
         alpha.image-policy.k8s.io/break-glass: "true"
    spec:
      containers:
      - name: container-name
        image: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    EOM
    
  2. Crea el Pod mediante kubectl:

    kubectl create -f /tmp/create_pod.yaml
    

    Toma nota del resultado: pod/pod-name created

Busca la entrada de registro de la anulación de emergencia en los registros de auditoría de Cloud

Visualiza los eventos de anulación de emergencia en los registros de auditoría de Cloud.

Limpia

  1. Borra el Pod:

      kubectl delete -f /tmp/create_pod.yaml
      

    Verifica que hayas recibido resultados como el que se muestra a continuación: pod "pod-name" deleted

  2. Vuelve a importar la política original.

      gcloud container binauthz policy import /tmp/policy_save.yaml