Guía de inicio rápido

En esta guía de inicio rápido, se muestra cómo configurar y probar una política sencilla en la autorización binaria.

En esta guía de inicio rápido, verás y probarás la política predeterminada y, luego, la configurarás para denegar la implementación de todas las imágenes de contenedor desde Container Registry a un clúster de Google Kubernetes Engine (GKE). Esta no es una política real. Por lo general, en una política real, se requieren certificaciones de certificadores en tu entorno para poder implementar una imagen de contenedor.

Consulta Comienza a usar la CLI o Comienza a usar Console para obtener un instructivo más extenso en el que se describa cómo configurar una política con las certificaciones necesarias.

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir a la página del selector de proyectos

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. Instala e inicializa el SDK de Cloud.
  5. Instala kubectl.

Habilita las API necesarias

Habilita las API para GKE, Container Analysis y la autorización binaria:

gcloud

  1. Configura el proyecto de Google Cloud predeterminado que usan los comandos de gcloud:

    PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    

    En el ejemplo anterior, PROJECT_ID es el nombre del proyecto.

  2. Habilita las API necesarias:

    gcloud services enable \
        container.googleapis.com \
        containeranalysis.googleapis.com \
        binaryauthorization.googleapis.com
    

Console

Habilita las API necesarias:

Habilitar las API

Esta operación puede tardar unos minutos en completarse.

Crea un clúster con la autorización binaria habilitada

Ahora, crea un clúster de GKE con la autorización binaria habilitada. Este es el clúster en el que se recomienda que se ejecuten las imágenes de contenedor que implementaste:

gcloud

Ejecuta gcloud container clusters create con la marca --enable-binauthz habilitada.

gcloud container clusters create \
    --enable-binauthz \
    --zone us-central1-a \
    test-cluster

Console

  1. Ve a la página Clústeres de GKE en Cloud Console.

    Ir a la página de GKE

    Console muestra una lista de clústeres de GKE en tu proyecto de Google Cloud.

  2. Haz clic en Crear clúster.

  3. Ingresa test-cluster en el campo Nombre (Name).

    Campo Nombre en la plantilla del clúster estándar

  4. Selecciona Zonal en las opciones de Tipo de ubicación (Location type).

  5. Selecciona us-central1-a en la lista desplegable Zona (Zone).

  6. Haz clic en Availability, Networking, Security, and Additional Features.

  7. En la sección Seguridad (Security), selecciona Enable Binary Authorization.

    Opción Habilitar autorización binaria

  8. Haz clic en Crear.

Política predeterminada

De forma predeterminada, la política de autorización binaria está configurada para permitir que se implementen todas las imágenes de contenedor.

gcloud

Para ver la política predeterminada, exporta el archivo de política en formato YAML:

gcloud container binauthz policy export

De forma predeterminada, el archivo tiene el siguiente contenido:

admissionWhitelistPatterns:
- namePattern: gcr.io/google_containers/*
- namePattern: gcr.io/google-containers/*
- namePattern: k8s.gcr.io/*
- namePattern: gke.gcr.io/*
- namePattern: gcr.io/stackdriver-agents/*
globalPolicyEvaluationMode: ENABLE
defaultAdmissionRule:
  evaluationMode: ALWAYS_ALLOW
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
name: projects/PROJECT_ID/policy

API de REST

Para ver la política predeterminada, recupérala en formato JSON:

curl \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "x-goog-user-project: ${PROJECT_ID}" \
    "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"

La API de REST muestra lo siguiente:

{
  "name": "projects/PROJECT_ID/policy",
  "admissionWhitelistPatterns": [
    {
      "namePattern": "gcr.io/google_containers/*"
    },
    {
      "namePattern": "gcr.io/google-containers/*"
    },
    {
      "namePattern": "k8s.gcr.io/*"
    },
    {
      "namePattern": "gke.gcr.io/*"
    },
    {
      "namePattern": "gcr.io/stackdriver-agents/*"
    }
  ],
  "globalPolicyEvaluationMode": "ENABLE",
  "defaultAdmissionRule": {
    "evaluationMode": "ALWAYS_ALLOW",
    "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
  }
}

Console

Para ver la política predeterminada, sigue estos pasos:

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

    Ir a la página Autorización binaria

    En la consola, se muestran detalles de la política.

    Captura de pantalla de la pestaña de la política que muestra la regla predeterminada

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

  3. En Regla predeterminada del proyecto (Project Default Rule), está seleccionada la opción Permitir todas las imágenes (Allow All Images).

    Captura de pantalla de la opción para elegir un tipo de regla predeterminado

Prueba la política

Para probar la política, intentas implementar una imagen de contenedor de muestra en el clúster.

En esta guía de inicio rápido, usarás la imagen de contenedor de muestra ubicada en la ruta gcr.io/google-samples/hello-app en Container Registry. Google creó esta imagen de contenedor pública que contiene una aplicación Hello World! de muestra.

kubectl

Para probar la política, sigue estos pasos:

  1. Actualiza el archivo kubeconfig local:

    gcloud container clusters get-credentials \
        --zone us-central1-a \
        test-cluster
    

    Esto proporciona las credenciales y la información del extremo necesarias para acceder al clúster en GKE.

  2. Implementa la imagen:

    kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
    

Console

Para probar la política, sigue estos pasos:

  1. Ve a la página Clústeres de GKE en Cloud Console.

    Ir a la página de GKE

  2. Haz clic en Implementar.

    La consola te solicitará que ingreses los detalles de la implementación.

  3. Selecciona Imagen de contenedor existente (Existing Container Image).

    Captura de pantalla de la página Crear implementación

  4. Ingresa gcr.io/google-samples/hello-app:1.0 como la ruta de la imagen de contenedor.

  5. Haz clic en Continuar.

    Captura de pantalla de la página Configurar implementación

  6. Ingresa hello-server en el campo Nombre de la aplicación (Application Name).

  7. Haz clic en Implementar.

Ahora, verifica que la autorización binaria haya permitido la implementación.

kubectl

Para verificar que se implementó la imagen, ejecuta el siguiente comando:

kubectl get pods

El comando imprime un mensaje similar al siguiente, que indica que la implementación se realizó de forma correcta:

NAME                            READY     STATUS    RESTARTS   AGE
hello-server-579859fb5b-h2k8s   1/1       Running   0          1m

Console

Para verificar que la imagen se implementó, ve a la página Cargas de trabajo de GKE en Google Cloud Console.

Ir a la página de GKE

Aparece una carga de trabajo para la implementación con un ícono verde que indica que la imagen se implementó de forma correcta.

Captura de pantalla de un mensaje de implementación correcto

Asegúrate de borrar la implementación para poder continuar con el siguiente paso:

kubectl

Para borrar la implementación, ejecuta el siguiente comando:

kubectl delete deployment hello-server

Console

Para borrar la implementación, sigue estos pasos:

  1. Regresa a la página Cargas de trabajo de GKE en Google Cloud Console.

    Ir a la página de GKE

  2. Selecciona la carga de trabajo test-server.

  3. Haz clic en Borrar.

Configura la política para inhabilitar todas las imágenes

Ahora, modifica la política para bloquear en lugar de permitir que se implementen todas las imágenes.

gcloud

Para modificar la política, ejecuta el siguiente comando:

  1. Exporta el archivo de políticas en formato YAML:

    gcloud container binauthz policy export  > /tmp/policy.yaml
    
  2. En un editor de texto, cambia el evaluationMode de ALWAYS_ALLOW a ALWAYS_DENY.

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

    globalPolicyEvaluationMode: ENABLE
    defaultAdmissionRule:
      evaluationMode: ALWAYS_DENY
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
    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
    

API de REST

Para modificar la política, sigue estos pasos:

  1. Crea un archivo de texto con la política actualizada en formato JSON:

    cat > /tmp/policy.json << EOM
    {
      "name": "projects/${PROJECT_ID}/policy",
      "globalPolicyEvaluationMode": "ENABLE",
      "defaultAdmissionRule": {
        "evaluationMode": "ALWAYS_DENY",
        "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
      }
    }
    EOM
    
  2. Envía la política actualizada a la API de REST:

    curl -X PUT \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
        -H "x-goog-user-project: ${PROJECT_ID}" \
        --data-binary @/tmp/policy.json  \
        "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"
    

Console

Para modificar la política, sigue estos pasos:

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

    Ir a la página Autorización binaria

  2. Haz clic en Editar política.

  3. Selecciona Inhabilitar todas las imágenes (Disallow all images).

    Captura de pantalla de la opción para elegir un tipo de regla predeterminado

  4. Haz clic en Guardar política.

Vuelve a probar la política

Prueba la política otra vez mediante la implementación de una imagen de contenedor de muestra en el clúster. Esta vez, la autorización binaria bloquea la implementación de la imagen.

kubectl

Implementa la imagen:

kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080

Console

Implementa la imagen:

  1. Ve a la página Clústeres de GKE en Cloud Console.

    Ir a la página de GKE

  2. Haz clic en Implementar.

    La consola te solicitará que ingreses los detalles de la implementación.

  3. Selecciona Imagen de contenedor existente (Existing Container Image).

    Captura de pantalla de la página Crear implementación

  4. Ingresa gcr.io/google-samples/hello-app:1.0 como la ruta de la imagen de contenedor.

  5. Haz clic en Continuar (Continue).

    Captura de pantalla de la página Configurar implementación

  6. Ingresa hello-server en el campo Nombre de la aplicación (Application Name).

  7. Haz clic en Implementar.

Ahora puede verificar que la política se haya bloqueado:

kubectl

Para verificar que la imagen no se implementó, ejecuta el siguiente comando:

kubectl get pods

El comando imprime el siguiente mensaje, que indica que la imagen no se implementó:

No resources found.

Puedes obtener más detalles sobre la implementación:

kubectl get event --template \
'{{range.items}}{{"\033[0;36m"}}{{.reason}}:{{"\033[0m"}}{{.message}}{{"\n"}}{{end}}'

En el código anterior, se muestra que la política no permitió la implementación:

FailedCreate:Error creating: pods "hello-server-579859fb5b-lvfgd" is forbidden:
image policy webhook backend denied one or more images: Denied by default admission
rule. Overridden by evaluation mode

Console

Para verificar que la imagen no se implementó, sigue estos pasos:

Regresa a la página Cargas de trabajo de GKE en Google Cloud Console.

Ir a la página de GKE

Aparecerá una carga de trabajo para la imagen de contenedor con un ícono rojo que indica que la imagen no se pudo implementar.

Captura de pantalla de un mensaje de error de implementación

Realiza una limpieza

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en esta guía de inicio rápido.

Borra el clúster que creaste en GKE:

gcloud

Para borrar el clúster, ejecuta el siguiente comando:

gcloud container clusters delete \
    --zone=us-central1-a \
    test-cluster

Console

Para borrar el clúster, sigue estos pasos:

  1. Ve a la página Clústeres de GKE en Cloud Console.

    Ir a la página de GKE

  2. Selecciona el clúster test-cluster y haz clic en Borrar.

Próximos pasos