
Before you begin
- Labs create a Google Cloud project and resources for a fixed time
- Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
- On the top left of your screen, click Start lab to begin
Create a Kubernetes Cluster with Binary Authorization
/ 20
Update Binary Authorization Policy to add Disallow all images rule at project level and allow at cluster level
/ 10
Update cluster specific policy to Disallow all images
/ 10
Create a Nginx pod to verify cluster admission rule is applied for disallow all images (denies to create)
/ 10
Update BA policy to denying images except from whitelisted container registries (your project container registry)
/ 10
Update BA policy to modify cluster specific rule to allow only images that have been approved by attestors
/ 20
Tear Down (delete cluster)
/ 20
Una de las principales preocupaciones de seguridad al ejecutar clústeres de Kubernetes es saber qué imágenes de contenedor se ejecutan en cada Pod y poder dar cuenta de su origen. Establecer la "procedencia del contenedor" significa tener la capacidad de realizar un seguimiento de la fuente de un contenedor hasta un punto de origen confiable y garantizar que tu organización siga los procesos deseados durante la creación del artefacto (contenedor).
Las siguientes son algunas de las inquietudes principales:
Desde el punto de vista de la seguridad, no aplicar controles en relación con el origen de las imágenes presenta varios riesgos:
Para ayudar a los operadores de sistemas a evitar estos problemas, Google Cloud ofrece una función llamada Autorización binaria. Es un servicio administrado por Google Cloud que trabaja estrechamente con GKE para aplicar controles de seguridad en el momento de la implementación a fin de garantizar que solo se implementen imágenes de contenedor confiables. Con la Autorización binaria, puedes incluir registros de contenedores en la lista de entidades permitidas, exigir que autoridades confiables firmen las imágenes y aplicar esas políticas de manera centralizada. Aplicar esta política permite ejercer un mayor control sobre tu entorno de contenedores, ya que te asegurarás de que solo se integren las imágenes aprobadas o verificadas al proceso de compilación y actualización.
En este lab, implementaremos un clúster de Kubernetes Engine con la función de Autorización binaria habilitada, demostraremos cómo incluir registros de contenedores aprobados en la lista de entidades permitidas y explicaremos el proceso de creación y ejecución de un contenedor con firma.
Los ingenieros de GKE Helmsman crearon este lab para ayudarte a comprender mejor la Autorización binaria de GKE. Te invitamos a hacer cualquier aporte que creas conveniente.
Las API de Binary Authorization y Container Analysis se basan en los proyectos de código abierto Grafeas y Kritis.
En una canalización de implementación de contenedores simplificada como esta:
El contenedor transita 4 pasos como mínimo:
En la canalización de compilación de contenedores, existe la posibilidad de insertar procesos adicionales para indicar o "certificar" que se completó cada paso correctamente. Estos son algunos ejemplos: ejecución de pruebas de unidades, verificaciones de análisis de control de origen, análisis de vulnerabilidad, entre otros. A cada paso se le podría otorgar la facultad o la "autoridad de certificación" para firmar una vez que se haya completado. Una "autoridad de certificación" es una persona o un sistema con la clave de PGP correcta y la capacidad de registrar la "certificación" con la API de Container Analysis.
Mediante el uso de claves de PGP por separado, diferentes personas, sistemas o pasos de compilación de la canalización podrían realizar cada paso de la certificación (1). Cada clave de PGP se asocia con una "nota de certificación" que se almacena en la API de Container Analysis. Cuando un paso de compilación "firma" una imagen, se firma un fragmento de metadatos JSON de esa imagen a través de PGP y se envía a la API como un "caso de nota".
Una vez que se haya creado la imagen de contenedor y se hayan almacenado las certificaciones necesarias de manera centralizada (2), pueden consultarse como parte de un proceso de decisiones de políticas. En este caso, cuando un controlador de admisión de Kubernetes recibe una solicitud a la API para crear (create
) o actualizar (update
) un Pod:
Lee estas instrucciones. Los labs son cronometrados y no se pueden pausar. El cronómetro, que comienza a funcionar cuando haces clic en Comenzar lab, indica por cuánto tiempo tendrás a tu disposición los recursos de Google Cloud.
Este lab práctico te permitirá realizar las actividades correspondientes en un entorno de nube real, no en uno de simulación o demostración. Para ello, se te proporcionan credenciales temporales nuevas que utilizarás para acceder a Google Cloud durante todo el lab.
Para completar este lab, necesitarás lo siguiente:
Haga clic en el botón Comenzar lab. Si debe pagar por el lab, se abrirá una ventana emergente para que seleccione su forma de pago. A la izquierda, se encuentra el panel Detalles del lab, que tiene estos elementos:
Haz clic en Abrir la consola de Google Cloud (o haz clic con el botón derecho y selecciona Abrir el vínculo en una ventana de incógnito si ejecutas el navegador Chrome).
El lab inicia recursos y abre otra pestaña en la que se muestra la página de acceso.
Sugerencia: Ordene las pestañas en ventanas separadas, una junto a la otra.
De ser necesario, copia el nombre de usuario a continuación y pégalo en el diálogo Acceder.
También puedes encontrar el nombre de usuario en el panel Detalles del lab.
Haz clic en Siguiente.
Copia la contraseña que aparece a continuación y pégala en el diálogo Te damos la bienvenida.
También puedes encontrar la contraseña en el panel Detalles del lab.
Haz clic en Siguiente.
Haga clic para avanzar por las páginas siguientes:
Después de un momento, se abrirá la consola de Google Cloud en esta pestaña.
Cloud Shell es una máquina virtual que cuenta con herramientas para desarrolladores. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud. Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.
Cuando te conectes, habrás completado la autenticación, y el proyecto estará configurado con tu PROJECT_ID. El resultado contiene una línea que declara el PROJECT_ID para esta sesión:
gcloud
es la herramienta de línea de comandos de Google Cloud. Viene preinstalada en Cloud Shell y es compatible con la función de autocompletado con tabulador.
Haz clic en Autorizar.
Ahora, el resultado debería verse de la siguiente manera:
Resultado:
Resultado:
Resultado de ejemplo:
gcloud
, consulta la guía con la descripción general de gcloud CLI en Google Cloud.
Algunos recursos de Compute Engine se encuentran en regiones y zonas. Una región es una ubicación geográfica específica donde puedes ejecutar tus recursos. Cada región tiene una o más zonas.
Ejecuta el siguiente comando para configurar una región y zona para tu lab (puedes usar la región/zona más adecuada para tu caso):
create.sh
a defaultClusterVersion
, como se indica a continuación:my-cluster-1
por el nombre del clúster que deseas crear.Se mostrará el siguiente mensaje cuando se complete la secuencia de comandos create
:
La secuencia de comandos hará lo siguiente:
container
, containerregistry
, containeranalysis
y binaryauthorization
.kubectl
.Puedes omitir las advertencias.
Si falla la secuencia de comandos, se mostrará el siguiente mensaje:
Y/o
Si pasa la secuencia de comandos, se mostrará el siguiente resultado:
Haz clic en Revisar mi progreso para verificar la tarea realizada. Si creaste de forma correcta un clúster de Kubernetes con autorización binaria, verás una puntuación de evaluación.
Para acceder a la IU de configuración de la política de Autorización binaria, sigue estos pasos:
gcloud
:
gcloud beta container binauthz policy export > policy.yaml
.policy.yaml
.gcloud beta container binauthz policy import policy.yaml
.La política que está editando corresponde a la “predeterminada” y se aplica a todos los clústeres de GKE del proyecto de Google Cloud, a menos que esté vigente una política específica del clúster.
Se recomienda crear políticas específicas para cada clúster y lograr una operación correcta (incluye registros en la lista de entidades permitidas según sea necesario) y, luego, usar la configuración “Inhabilitar todas las imágenes” para la política predeterminada a nivel de proyecto. Cualquier clúster nuevo en este proyecto necesitará su propia política específica del clúster.
La regla de la política predeterminada es Permitir todas las imágenes
. Esta regla se comporta como si no estuviera habilitada la autorización binaria en el clúster.
Si se cambia la regla predeterminada a Inhabilitar todas las imágenes
o Permitir solo las imágenes aprobadas por todos los certificadores que se indican a continuación
, se bloquearán las imágenes que no coincidan con las rutas de acceso de las imágenes de registro exentas o que no tengan las certificaciones requeridas, respectivamente.
A continuación, realizarás algunas modificaciones en la política:
Cambia la Regla predeterminada de tu proyecto a Inhabilitar todas las imágenes
.
Pulsa en Crear reglas específicas en la configuración adicional para implementaciones de GKE y Anthos.
Pulsa en Seleccionar clúster de GKE en el menú desplegable y haz clic en Cambiar.
En Reglas específicas del clúster de GKE, haz clic en Agregar regla específica.
En el campo Agrega una regla específica para el clúster de GKE, ingresa tu ubicación y el nombre del clúster con el formato ubicación.nombredelclúster
. Por ejemplo my-cluster-1
.
Selecciona la regla predeterminada Permitir todas las imágenes
para tu clúster.
Haz clic en AGREGAR.
Haz clic en Revisar mi progreso para verificar la tarea realizada. Si actualizaste correctamente la política de autorización binaria y agregaste la regla Inhabilitar todas las imágenes a nivel de proyecto y Permitir todas las imágenes a nivel de clúster, verás una puntuación de evaluación.
Para simular una configuración real, crea una imagen de contenedor de GCR privada en tu proyecto.
Extrae el contenedor de nginx
del proyecto nginx
y envíalo a tu repositorio de GCR sin modificaciones.
En Cloud Shell, extrae el contenedor latest
de nginx
:
Cuando se te pregunte, Do you want to continue (Y/n)?
Ingresa Y
.
Para comprobar que la política de inhabilitación de imágenes funcionará según lo previsto, primero verifica que se aplique la regla allow
específica del clúster y que permita que se ejecuten todos los contenedores.
nginx
:Deberías ver un mensaje que indique lo siguiente: pod/nginx created
.
Resultado:
Si esto falla, verifica la región y el nombre del clúster otra vez y vuelve a intentarlo.
En la página Autorización binaria, haz clic en Editar política.
Haz clic en los tres puntos verticales a la derecha de tu regla específica del clúster de GKE y luego haz clic eneditar.
A continuación, selecciona Inhabilitar todas las imágenes
y haz clic en Enviar.
Tu política debería ser similar a la siguiente:
Haz clic en Revisar mi progreso para verificar la tarea realizada. Si actualizaste correctamente la política de autorización binaria a la regla Inhabilitar todas las imágenes a nivel de clúster, verás una puntuación de evaluación.
nginx
estático:Sin embargo, esta vez, deberías recibir un mensaje del servidor de la API que indique que la política impidió que este Pod se ejecutara correctamente:
Para poder ver cuándo la política de Autorización binaria bloquea todas las imágenes, ve a los registros de auditoría de GKE en Stackdriver y filtra los mensajes de error relacionados con esta actividad.
nginx
.Haz clic en Revisar mi progreso para verificar la tarea realizada. Si verificaste correctamente la regla de admisión del clúster, verás una puntuación de evaluación.
Supongamos que, en realidad, deseas permitir que se ejecute solo ese contenedor de nginx. Para ello, lo más rápido es incluir en la lista de entidades permitidas el registro del que proviene.
Usarás el resultado del siguiente comando como la ruta de acceso de tu imagen:
Copia el resultado de la ruta de acceso de la imagen en tu búfer.
Ve al Menú de navegación > Seguridad > Autorización Binaria.
Edita la Política de Autorización Binaria, bajo Reglas de exención personalizadas, muestra las rutas de las imágenes, luego haz clic en Agregar un patrón de imagen.
Pega la ruta de acceso de la imagen que copiaste anteriormente y haz clic en Listo. En la siguiente imagen, se muestra un ejemplo de ruta de acceso.
Ahora deberías poder iniciar este Pod y comprobar que la inclusión de registros en la lista de entidades permitidas funciona correctamente.
Haz clic en Revisar mi progreso para verificar la tarea realizada. Si actualizaste correctamente la política de Autorización binaria para incluir el registro de contenedor en la lista de entidades permitidas, verás una puntuación de evaluación.
Incluir registros de imágenes de contenedor en la lista de entidades permitidas es un buen punto de partida para evitar que se ejecuten imágenes de contenedor no deseadas dentro de un clúster, pero puedes hacer aún más para asegurarte de que el contenedor se haya compilado de forma correcta.
Puedes verificar de manera criptográfica que se aprobó la implementación de una imagen de contenedor determinada. Esto se logra mediante una "autoridad de certificación", que declara o certifica que se completó un determinado paso. Para esto, la autoridad de certificación usa una clave de PGP para firmar un fragmento de metadatos que describe el hash SHA256 de una imagen de contenedor y lo envía a un repositorio central de metadatos: la API de Container Analysis.
Más tarde, cuando el controlador de admisión valide si se permite la ejecución de una imagen de contenedor mediante la consulta de una política de autorización binaria que requiera que una imagen tenga certificaciones, verificará si la API de Container Analysis contiene los fragmentos firmados de metadatos que indican qué pasos se completaron. Con esa información, el controlador de admisión sabrá si debe permitir o denegar la ejecución de ese Pod.
A continuación, realiza una certificación manual de una imagen de contenedor. Asumirás la función de una autoridad de certificación humana y realizarás todos los pasos para firmar una imagen de contenedor, crear una política que requiera que las imágenes que se ejecutan dentro de tu clúster tengan una certificación y, luego, ejecutar correctamente esa imagen en un Pod.
El primer paso consiste en registrar la autoridad de certificación como una nota de Container Analysis con la API de Container Analysis. Primero, crea una nota ATTESTATION
y envíala a la API.
ATTESTATION
:ATTESTATION
a la API de Container Analysis:Deberías ver que el resultado del comando anterior muestra la nota que se creó, pero el siguiente comando también mostrará esta nota:
Dado que tu autoridad de certificación usa una clave de PGP para realizar la firma criptográfica de los metadatos de la imagen, crea una clave de PGP nueva y exporta la clave pública.
(Presiona Intro para usar una frase de contraseña vacía y confirmar la recepción de las advertencias).
Extrae la clave de PGP pública:
El paso siguiente consiste en crear el "certificador" en la API de Autorización Binaria y agregarle la clave de PGP pública.
El resultado debería ser similar al siguiente:
Los pasos anteriores solo se deben realizar una vez. A partir de ahora, este es el único paso que debe repetirse para cada imagen de contenedor nueva.
Ya se compiló y se encuentra disponible la imagen de nginx
en nginx:latest
. Realiza las certificaciones manuales como si fuera tu propia imagen compilada por procesos propios y evita tener que compilarla.
El siguiente paso consiste en cambiar la política de Autorización Binaria para establecer que la certificación debe estar presente en todas las imágenes que no coincidan con los patrones incluidos en la lista de entidades permitidas.
edit
.Haz clic en los tres puntos que se encuentran junto al nombre de tu clúster y selecciona Editar para modificar las reglas específicas del clúster.
Solicitar certificaciones (permitir solo imágenes verificadas por los siguientes certificadores)
en lugar de No permitir ninguna imagen
en la ventana emergente.Agregar certificadores
seguido de Agregar por ID de recurso del certificador
. Ingresa el contenido de tu portapapeles en el formato de projects/${PROJECT_ID}/attestors/${ATTESTOR}
, luego haz clic en Agregar 1 certificador, después en Enviar y, finalmente, haz clic enGuardar política.La política predeterminada aún debería tener la regla Inhabilitar todas las imágenes
, pero la regla específica del clúster debería requerir certificación.
¡Felicitaciones! Ya certificaste manualmente una imagen de contenedor y aplicaste una política para esa imagen dentro de tu clúster de GKE.
Haz clic en Revisar mi progreso para verificar la tarea realizada. Si actualizaste correctamente la política de autorización binaria para modificar la regla específica del clúster y permitir solo imágenes aprobadas por certificadores, verás una puntuación de evaluación.
Desde la perspectiva de un usuario, la política de autorización binaria podría bloquear una imagen de forma incorrecta o podría producirse otro problema en el buen funcionamiento del webhook del controlador de admisión.
En este caso de "urgencia", existe una función de emergencia que aprovecha una anotación específica para indicarle al controlador de admisión que debe ejecutar el Pod y omitir la aplicación de la política.
Sin embargo, en este caso sus procedimientos de respuesta se pueden iniciar en cuestión de segundos después de que se produzca la actividad. Los registros están disponibles en Stackdriver:
nginx
sin firma con la anotación de emergencia, ejecuta el siguiente comando:En la consola de Google Cloud, ve al menú de navegación > Logging > página Explorador de registros.
Propaga el cuadro Compilador de consultas con la información de más abajo y haz clic en Ejecutar consulta.
Deberías ver eventos cuando el controlador de admisión permitió un Pod, ya que está presente la anotación. Desde este filtro, puedes crear un Receptor
que envíe registros que coincidan con este filtro a un destino externo.
Qwiklabs eliminará todos los recursos que creaste en este lab, pero es bueno saber cómo limpiar tu entorno.
Si, al comienzo del lab, creaste tu propio nombre de clúster, úsalo. En este ejemplo, se utilizó el nombre my-cluster-1
.
Las últimas líneas del resultado se verán así:
gcloud container clusters list
para realizar un seguimiento del progreso. Espera hasta que se elimine el clúster.
Haz clic en Revisar mi progreso para verificar la tarea realizada. Si eliminaste correctamente tu clúster, verás una puntuación de evaluación.
Con los siguientes comandos, se eliminarán los recursos restantes.
Si se te pregunta Do you want to continue (Y/n)?
, ingresa Y
.
Borra el certificador con el siguiente comando:
kubectl delete <nombredepod>
y vuelve a enviar el comando de creación de Pod.gcloud container clusters list
para verificar el estado del clúster.--enable-network-policy
, --accelerator
, --enable-tpu
o --enable-metadata-concealment
, es posible que debas agregar registros adicionales a la lista de entidades permitidas de tu política de Autorización binaria para que se puedan ejecutar estos Pods. Usa kubectl describe pod <nombredelpod>
para encontrar la ruta de registro de la especificación de la imagen y agregarla a la lista de entidades permitidas con el formato gcr.io/example-registry/*
y guardar la política.Este lab de autoaprendizaje forma parte de la Quest Google Kubernetes Engine Best Practices: Security de Qwiklabs. Una Quest es una serie de labs relacionados que forman una ruta de aprendizaje. Si completas esta Quest, obtendrás una insignia como reconocimiento por tu logro. Puedes hacer públicas tus insignias y agregar vínculos a ellas en tu currículum en línea o en tus cuentas de redes sociales.Inscríbete en esta Quest y obtén un crédito inmediato de finalización. Consulta el catálogo de Google Cloud Skills Boost para ver todas las Quests disponibles.
Continúa tu Quest con Cómo usar una política de red en Google Kubernetes Engine o consulta estas sugerencias:
Última actualización del manual: 11 de octubre de 2023
Prueba más reciente del lab: 11 de octubre de 2023
Copyright 2024 Google LLC. Este software se proporciona tal como está, sin garantías ni declaraciones para ningún uso o propósito. El uso que hagas de él está sujeto a tu acuerdo con Google.
Este contenido no está disponible en este momento
Te enviaremos una notificación por correo electrónico cuando esté disponible
¡Genial!
Nos comunicaremos contigo por correo electrónico si está disponible
One lab at a time
Confirm to end all existing labs and start this one