Configurar una política de autorización binaria con GKE
En esta guía de inicio rápido se muestra cómo configurar y probar una regla básica en una política de autorización binaria.
En esta guía de inicio rápido, verás y configurarás la regla predeterminada de la política. La regla predeterminada permite que se desplieguen todas las imágenes. Para probarlo, despliega una imagen de contenedor en un clúster de Google Kubernetes Engine (GKE). A continuación, define la regla predeterminada para que no se pueda desplegar ninguna imagen e intenta desplegar una imagen.
Antes de empezar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
- Instala
kubectl
. En la Google Cloud consola, ve a la página de clústeres de Kubernetes de GKE:
Haz clic en Crear.
En Crear un clúster de Autopilot, haz lo siguiente:
En el campo Name (Nombre), introduce
test-cluster
.En el menú Región, selecciona
us-central1
.Despliega la sección Configuración avanzada.
Haz clic en el enlace Seguridad para que aparezca el panel Seguridad.
En el panel Seguridad, selecciona la casilla Habilitar la autorización binaria.
Selecciona Solo aplicar.
Haz clic en Siguiente y, a continuación, en Siguiente:revisar y crear.
Para empezar a crear el clúster, haz clic en Crear.
Ve a la página Autorización binaria de la consola de Google Cloud .
La consola muestra detalles sobre la política.
Haz clic en Editar política.
En Regla predeterminada del proyecto, la opción Permitir todas las imágenes está seleccionada.
Ve a la página Clústeres de GKE en la consola deGoogle Cloud .
Haz clic en Desplegar.
La consola te pedirá que introduzcas los detalles del despliegue.
Selecciona Imagen de contenedor que ya existe.
Introduce
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
como ruta de la imagen del contenedor.Haz clic en Continuar.
Introduce
hello-server
en el campo Nombre de la aplicación.Haz clic en Desplegar.
Actualiza el archivo local
kubeconfig
:gcloud container clusters get-credentials \ --zone us-central1-a \ test-cluster
De esta forma, se proporcionan las credenciales y la información del endpoint necesarias para acceder al clúster en GKE.
Despliega la imagen:
kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
Vuelve a la página Cargas de trabajo de GKE en la consola deGoogle Cloud .
Selecciona la carga de trabajo
hello-server
.Haz clic en Eliminar.
Vuelve a la página Autorización binaria de la Google Cloud consola.
Haz clic en Editar política.
Selecciona No permitir todas las imágenes.
Haz clic en Save Policy.
Exporta el archivo YAML de la política:
gcloud container binauthz policy export > /tmp/policy.yaml
En un editor de texto, cambia
evaluationMode
deALWAYS_ALLOW
aALWAYS_DENY
.El archivo YAML de la política debería tener el siguiente aspecto:
globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_DENY enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/PROJECT_ID/policy
Importa el archivo YAML de la política en la autorización binaria:
gcloud container binauthz policy import /tmp/policy.yaml
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
Envía la política actualizada a la API 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"
Ve a la página Clústeres de GKE en la consola deGoogle Cloud .
Haz clic en Desplegar.
La consola te pedirá que introduzcas los detalles del despliegue.
Selecciona Imagen de contenedor que ya existe.
Introduce
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
como ruta de la imagen del contenedor.Haz clic en Continuar.
Introduce
hello-server
en el campo Nombre de la aplicación.Haz clic en Desplegar.
- POD_NAME: el nombre del pod.
- IMAGE_NAME: el nombre de la imagen.
- ATTESTOR_NAME: el nombre del encargado de la atestación.
Ve a la página Clústeres de GKE en la consola deGoogle Cloud .
Selecciona el clúster
test-cluster
y haz clic en Eliminar.- Utiliza el
built-by-cloud-build
attestor para desplegar solo imágenes creadas por Cloud Build (vista previa). - Para ver un tutorial completo sobre cómo requerir certificaciones, consulta lo siguiente:
- Consulta nuestros recursos sobre DevOps y descubre el programa de investigación DevOps Research and Assessment (DORA).
Crear un clúster con la implementación obligatoria de 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 quieres que se ejecuten tus imágenes de contenedor desplegadas.
La autorización binaria funciona con clústeres Autopilot o Standard.
Google Cloud consola
En los siguientes pasos se configura un clúster de Autopilot.
gcloud
Ejecuta gcloud container clusters create
con la marca --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE
habilitada.
gcloud container clusters create \ --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \ --zone us-central1-a \ test-cluster
Crear un clúster puede tardar varios minutos.
Política predeterminada
De forma predeterminada, tu política de autorización binaria está configurada para permitir que se desplieguen todas las imágenes de contenedor.
Google Cloud consola
Para ver la política predeterminada, haz lo siguiente:
gcloud
Para ver la política predeterminada, exporta el archivo YAML de la política de la siguiente manera:
gcloud container binauthz policy export
De forma predeterminada, el archivo tiene el siguiente contenido:
globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_ALLOW enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/PROJECT_ID/policy
API REST
Para ver la política predeterminada, recupérala en formato JSON de la siguiente manera:
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"
El comando genera el siguiente resultado:
{ "name": "projects/PROJECT_ID/policy", "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_ALLOW", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } }
Probar la política Medidas por incumplimiento de políticas
Para probar la política de cumplimiento, intenta desplegar una imagen de contenedor de ejemplo en el clúster.
En esta guía de inicio rápido, se usa la imagen de contenedor de ejemplo ubicada en la ruta us-docker.pkg.dev/google-samples/containers/gke/hello-app
de Artifact Registry. Se trata de una imagen de contenedor pública creada por Google que contiene una aplicación de ejemplo "Hello, World!".
Google Cloud consola
Para probar la política, haz lo siguiente:
kubectl
Para probar la política, haz lo siguiente:
Ahora, comprueba que la autorización binaria ha permitido el despliegue.
Google Cloud consola
Para verificar que la imagen se ha desplegado, ve a la página Cargas de trabajo de GKE en la consola de Google Cloud .
Aparecerá una carga de trabajo para la implementación con un icono verde que indica que la imagen se ha implementado correctamente.
kubectl
Para comprobar que la imagen se ha desplegado, haz lo siguiente:
kubectl get pods
El comando muestra un mensaje similar al siguiente, que indica que la implementación se ha realizado correctamente:
NAME READY STATUS RESTARTS AGE hello-server-579859fb5b-h2k8s 1/1 Running 0 1m
Elimina la implementación para poder continuar con el siguiente paso:
Google Cloud consola
Para eliminar la implementación, sigue estos pasos:
kubectl
Para eliminar la implementación, sigue estos pasos:
kubectl delete deployment hello-server
Configurar la política de cumplimiento para que no se permitan todas las imágenes
Ahora, modifique la política para bloquear en lugar de permitir que se desplieguen todas las imágenes.
Google Cloud consola
Para modificar la política, haz lo siguiente:
gcloud
Para modificar la política, haz lo siguiente:
API REST
Para modificar la política, haz lo siguiente:
Volver a probar la política
Vuelve a probar la política desplegando una imagen de contenedor de ejemplo en el clúster. Esta vez, Autorización binaria impide que se despliegue la imagen.
Google Cloud consola
Despliega la imagen:
kubectl
Despliega la imagen:
kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
Ahora puedes verificar que la política se ha bloqueado:
Google Cloud consola
Para verificar que la imagen no se ha desplegado, haz lo siguiente:
Vuelve a la página Cargas de trabajo de GKE en la consola deGoogle Cloud .
La carga de trabajo de la imagen de contenedor aparece con un icono rojo que indica que no se ha podido desplegar la imagen.
kubectl
Para verificar que la imagen no se ha implementado, ejecuta el siguiente comando:
kubectl get pods
El comando imprime el siguiente mensaje, que indica que la imagen no se ha desplegado:
No resources found.
Puedes obtener más información sobre la implementación:
kubectl get event --template \ '{{range.items}}{{"\033[0;36m"}}{{.reason}}:{{"\033[0m"}}{{.message}}{{"\n"}}{{end}}'
Verá una respuesta similar a la siguiente:
FailedCreate: Error creating: pods POD_NAME is forbidden: admission webhook "imagepolicywebhook.image-policy.k8s.io" denied the request: Image IMAGE_NAME denied by Binary Authorization default admission rule. Denied by always_deny admission rule
En este resultado:
Limpieza
Para evitar que se apliquen cargos en tu cuenta de Google Cloud por los recursos utilizados en esta página, sigue estos pasos.
Elimina el clúster que has creado en GKE:
Consola
Para eliminar el clúster, sigue estos pasos:
gcloud
Para eliminar el clúster, sigue estos pasos:
gcloud container clusters delete \ --zone=us-central1-a \ test-cluster