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
- Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.
-
Comprueba que la facturación esté habilitada en tu proyecto.
- Instala e inicializa el SDK de Cloud.
- Instala
kubectl
.
Habilita las API necesarias
Habilita las API para GKE, Container Analysis y la autorización binaria:
gcloud
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.
Habilita las API necesarias:
gcloud services enable \ container.googleapis.com \ containeranalysis.googleapis.com \ binaryauthorization.googleapis.com
Console
Habilita las API necesarias:
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
Ve a la página Clústeres de GKE en Cloud Console.
Console muestra una lista de clústeres de GKE en tu proyecto de Google Cloud.
Haz clic en Crear clúster.
Ingresa
test-cluster
en el campo Nombre (Name).Selecciona Zonal en las opciones de Tipo de ubicación (Location type).
Selecciona
us-central1-a
en la lista desplegable Zona (Zone).Haz clic en Availability, Networking, Security, and Additional Features.
En la sección Seguridad (Security), selecciona Enable Binary Authorization.
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:
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.
Haz clic en Configurar política o, si ya existe una, Editar política (Edit Policy).
En Regla predeterminada del proyecto (Project Default Rule), está seleccionada la opción Permitir todas las imágenes (Allow All Images).
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:
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.
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:
Ve a la página Clústeres de GKE en Cloud Console.
Haz clic en Implementar.
La consola te solicitará que ingreses los detalles de la implementación.
Selecciona Imagen de contenedor existente (Existing Container Image).
Ingresa
gcr.io/google-samples/hello-app:1.0
como la ruta de la imagen de contenedor.Haz clic en Continuar.
Ingresa
hello-server
en el campo Nombre de la aplicación (Application Name).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.
Aparece una carga de trabajo para la implementación con un ícono verde que indica que la imagen se implementó de forma correcta.
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:
Regresa a la página Cargas de trabajo de GKE en Google Cloud Console.
Selecciona la carga de trabajo
test-server
.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:
Exporta el archivo de políticas en formato YAML:
gcloud container binauthz policy export > /tmp/policy.yaml
En un editor de texto, cambia el
evaluationMode
deALWAYS_ALLOW
aALWAYS_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
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:
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 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:
Regresa a la página Autorización binaria en Google Cloud Console.
Haz clic en Editar política.
Selecciona Inhabilitar todas las imágenes (Disallow all images).
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:
Ve a la página Clústeres de GKE en Cloud Console.
Haz clic en Implementar.
La consola te solicitará que ingreses los detalles de la implementación.
Selecciona Imagen de contenedor existente (Existing Container Image).
Ingresa
gcr.io/google-samples/hello-app:1.0
como la ruta de la imagen de contenedor.Haz clic en Continuar (Continue).
Ingresa
hello-server
en el campo Nombre de la aplicación (Application Name).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.
Aparecerá una carga de trabajo para la imagen de contenedor con un ícono rojo que indica que la imagen no se pudo implementar.
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:
Ve a la página Clústeres de GKE en Cloud Console.
Selecciona el clúster
test-cluster
y haz clic en Borrar.
Próximos pasos
- Obtén información sobre cómo configurar y aplicar una política con las certificaciones necesarias. Consulta los siguientes artículos: