En este documento, se muestra cómo configurar Autorización Binaria para clústeres locales creados como parte de Google Distributed Cloud. Luego, se muestra cómo configurar una política de autorización binaria de muestra.
Antes de comenzar
- Asegúrate de que tus clústeres tengan una versión compatible de Google Distributed Cloud. Autorización Binaria es compatible con los siguientes entornos. - Bare metal- Google Distributed Cloud 1.14 o 1.15. Para la versión 1.16 o posterior, Autorización Binaria se puede configurar durante la creación o actualización del clúster. - VMware- Distributed Cloud for VMware (Google Distributed Cloud) 1.4 o posterior. 
- El servicio de Autorización Binaria usa una dirección IP externa, a la que se puede acceder a través de una conexión a Internet normal. Configura las reglas de firewall para HTTPS a fin de permitir que el clúster de usuario acceda al extremo - binaryauthorization.googleapis.com.- Bare metal- Configura las reglas de firewall de Google Distributed Cloud. - VMware- Configura las reglas de firewall de Google Distributed Cloud. 
- Si deseas usar los Registros de auditoría de Cloud centralizados para ver las entradas de registro de auditoría, incluidas las de Autorización Binaria para clústeres fuera de Google Cloud, debes configurar los Registros de auditoría de Cloud en la configuración del clúster. - Bare metal- Configura Registros de auditoría de Cloud en Google Distributed Cloud. - VMware- Configura Registros de auditoría de Cloud en Google Distributed Cloud. 
- Debes habilitar la API de autorización binaria de la siguiente manera: - Ve a la consola de Google Cloud . 
- En la lista desplegable del proyecto, selecciona el proyecto host de la flota. Puedes encontrar esta información en la sección - gkeConnectdel archivo de configuración de tu clúster de usuario. Este es el proyecto Google Cloud que conecta tu clúster de usuario a Google Cloud.
 
Configura Autorización Binaria
En esta sección, configurarás Autorización Binaria en tu clúster local.
Especifica las variables de entorno de instalación
Para especificar las variables de entorno, sigue estos pasos:
Usa Workload Identity
- Especifica el proyecto host de tu flota: - export PROJECT_ID=PROJECT_ID
- Establece el ID de membresía de la flota en el ID de tu clúster: - El ID de membresía se muestra en la columna - NAMEcuando ejecutas el comando- gcloud container fleet memberships list.- export MEMBERSHIP_ID=CLUSTER_NAME
Usa la clave de cuenta de servicio
- Especifica el proyecto host de tu flota: - export PROJECT_ID=PROJECT_ID- Reemplaza PROJECT_ID por el proyecto Google Cloud en lasección - gkeConnectde tu archivo de configuración del clúster de usuario.
- Especifica la ruta de acceso del archivo kubeconfig del clúster de usuario: - export KUBECONFIG=PATH- Reemplaza PATH con la ruta de tu archivo kubeconfig del clúster de usuario. 
- Elige un nombre para la cuenta de servicio de acceso a la API de autorización binaria: - export SA_NAME=SERVICE_ACCOUNT_NAME- Reemplaza SERVICE_ACCOUNT_NAME por el nombre de cuenta de servicio que elijas. El módulo de autorización binaria usa esta cuenta de servicio para acceder a la API de autorización binaria. 
- Especifica la ruta de acceso al archivo de claves de la cuenta de servicio que descargarás más adelante en esta guía: - export SA_JSON_PATH=SA_KEY_FILE_PATH- Reemplaza SA_KEY_FILE_PATH por la ruta de acceso del archivo de claves JSON para la cuenta de servicio. 
Instala el módulo de autorización binaria en tu clúster de usuario
Para instalar el módulo de autorización binaria, haz lo siguiente:
Usa Workload Identity
Workload Identity de la flota permite que las cargas de trabajo de tu clúster se autentiquen en Google sin que tengas que descargar, rotar de forma manual y, en general, administrar Google Cloud las claves de cuentas de servicio. Puedes obtener más información sobre cómo funciona Workload Identity de flota y las ventajas de usarlo en Usa Workload Identity de flota.
- Otorga el rol - binaryauthorization.policyEvaluatora la cuenta de servicio de Kubernetes en tu proyecto host de flota:- gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${PROJECT_ID}.svc.id.goog[binauthz-system/binauthz-admin]" \ --role="roles/binaryauthorization.policyEvaluator"
- Cree un directorio de trabajo: - Crea un directorio llamado - binauthz.
- Cambia al directorio. 
 
- Descarga el archivo - manifest-wi-0.2.6.yaml.tmpl, que usas para instalar el módulo de Autorización Binaria en tu clúster de usuario:- Bare metal- gcloud storage cp gs://anthos-baremetal-release/binauthz/manifest-wi-0.2.6.yaml.tmpl .- VMware- gcloud storage cp gs://gke-on-prem-release/binauthz/manifest-wi-0.2.6.yaml.tmpl .
- Sustituye las variables de entorno en la plantilla: - envsubst < manifest-wi-0.2.6.yaml.tmpl > manifest-0.2.6.yaml
- Instala el módulo de autorización binaria en tu clúster de usuario: - kubectl apply -f manifest-0.2.6.yaml
- Verifica si se creó la implementación: - kubectl get pod --namespace binauthz-system- Verás el Pod - binauthz-module-deployment-*con- Statusde- Runningy 1/1 Pods listos, similar a este resultado:- NAME READY STATUS RESTARTS AGE binauthz-module-deployment-5fddf9594f-qjprz 1/1 Running 0 11s
Usa la clave de cuenta de servicio
- Configura el proyecto predeterminado para Google Cloud CLI: - gcloud config set project ${PROJECT_ID}
- Crea una cuenta de servicio de acceso a la API de autorización binaria: - gcloud iam service-accounts create ${SA_NAME}
- Otorga el rol - binaryauthorization.policyEvaluatora la cuenta de servicio de acceso a la API de Autorización Binaria en tu proyecto host de la flota:- gcloud projects add-iam-policy-binding ${PROJECT_ID}\ --member="serviceAccount:${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/binaryauthorization.policyEvaluator"
- Cree un directorio de trabajo: - Crea un directorio llamado - binauthz.
- Cambia al directorio. 
 
- Descarga el archivo - manifest-0.2.6.yaml, que usas para instalar el módulo de Autorización Binaria en tu clúster de usuario:- Bare metal- gcloud storage cp gs://anthos-baremetal-release/binauthz/manifest-0.2.6.yaml .- VMware- gcloud storage cp gs://gke-on-prem-release/binauthz/manifest-0.2.6.yaml .
- Crea un archivo YAML para el espacio de nombres - binauthz-system.- Guarda lo siguiente en un archivo llamado - namespace.yaml:- apiVersion: v1 kind: Namespace metadata: labels: control-plane: binauthz-controller name: binauthz-system
- Crea el espacio de nombres en el clúster de usuario: - kubectl apply -f namespace.yaml- Verás un resultado similar al siguiente: - namespace/binauthz-system created
- Descarga un archivo de claves JSON para tu cuenta de servicio: - gcloud iam service-accounts keys create ${SA_JSON_PATH} --iam-account ${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
- Guarda la clave de la cuenta de servicio como un Secret de Kubernetes en tu clúster de usuario: - kubectl --namespace binauthz-system create secret generic binauthz-sa --from-file=key.json=${SA_JSON_PATH}
- Instala el módulo de autorización binaria en tu clúster de usuario: - kubectl apply -f manifest-0.2.6.yaml
- Verifica si se creó la implementación: - kubectl get pod --namespace binauthz-system- Verás el Pod - binauthz-module-deployment-*con- Statusde- Runningy 1/1 Pods listos, similar a este resultado:- NAME READY STATUS RESTARTS AGE binauthz-module-deployment-5fddf9594f-qjprz 1/1 Running 0 11s
Configura y usa políticas de autorización binaria
En esta sección, se muestra cómo configurar y usar las políticas de Autorización Binaria para los clústeres locales.
En cada ejemplo, debes configurar la política y, luego, probarla mediante la implementación de una imagen de contenedor en tu clúster.
Permitir todo
En esta sección, se muestra un caso de éxito. Debes configurar la política de autorización binaria para que una imagen de contenedor cumpla con ella y se implemente.
En Google Cloud, haz lo siguiente:
Console
- En la consola de Google Cloud , ve a la página Autorización binaria. 
- Asegúrate de seleccionar el ID de tu proyecto host de la flota. 
- Haz clic en Editar política. 
- En Regla predeterminada del proyecto, selecciona Permitir todas las imágenes. 
- Haga clic en Save Policy. 
gcloud
- Configura el - PROJECT_IDpara tu proyecto host de la flota. Puedes encontrar este ID de proyecto en el campo- gkeConnectdel archivo de configuración de tu clúster de usuario.- export PROJECT_ID=PROJECT_ID- Configura el proyecto Google Cloud predeterminado. - gcloud config set project ${PROJECT_ID}
- Exporta el archivo de políticas en formato YAML a tu sistema local: - gcloud container binauthz policy export > policy.yaml- Tu archivo YAML se ve de la siguiente manera: - defaultAdmissionRule: enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG evaluationMode: ALWAYS_ALLOW globalPolicyEvaluationMode: ENABLE name: projects/<var>PROJECT_ID</var>/policy
- Editar - policy.yaml.
- Establece - evaluationModeen- ALWAYS_ALLOW.
- Si tienes un bloque - requireAttestationsByen el archivo, bórralo.
- Guarde el archivo. 
- Importa - policy.yamlde la siguiente manera:- gcloud container binauthz policy import policy.yaml
Para agregar una imagen exenta a la lista de entidades permitidas, agrega lo siguiente al archivo de políticas:
admissionWhitelistPatterns: - namePattern: EXEMPT_IMAGE_PATH
  Reemplaza EXEMPT_IMAGE_PATH por la ruta de acceso a la imagen que se exime. Para eximir imágenes adicionales, agrega entradas - namePattern adicionales. Obtén más información sobre admissionWhitelistPatterns.
En tu estación de trabajo de administrador, haz lo siguiente:
- Crea un archivo de manifiesto para un Pod. - Guarda lo siguiente en un archivo llamado - pod.yaml:- apiVersion: v1 kind: Pod metadata: name: test-pod spec: containers: - name: test-container image: us-docker.pkg.dev/google-samples/containers/gke/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
- Crea el Pod: - kubectl apply -f pod.yaml- Verás que el Pod se implementó correctamente. 
- Borra el Pod: - kubectl delete -f pod.yaml
Inhabilitar todos
En esta sección, se muestra un caso de falla. En esta sección, debes configurar la política predeterminada para que no permita la implementación de la imagen de contenedor.
En Google Cloud , haz lo siguiente:
Console
- En la consola de Google Cloud , ve a la página Autorización binaria. 
- Asegúrate de que esté seleccionado el proyecto host de la flota. 
- Haz clic en Editar política. 
- En Regla predeterminada del proyecto, selecciona No permitir ninguna imagen. 
- Haz clic en Guardar política. 
gcloud
- Establece - PROJECT_IDcomo el ID del proyecto host de tu flota.- export PROJECT_ID=PROJECT_ID
- Configura el proyecto Google Cloud predeterminado. - gcloud config set project ${PROJECT_ID}
- Exporta el archivo de políticas en formato YAML: - gcloud container binauthz policy export > policy.yaml
- Editar - policy.yaml.
- Establece - evaluationModeen- ALWAYS_DENY.
- Si tienes un bloque - requireAttestationsByen el archivo, bórralo.
- Guarde el archivo. 
- Importa - policy.yamlde la siguiente manera:- gcloud container binauthz policy import policy.yaml
En tu estación de trabajo de administrador, haz lo siguiente:
- Crea un archivo de manifiesto para un Pod. - Guarda lo siguiente en un archivo llamado - pod.yaml:- apiVersion: v1 kind: Pod metadata: name: test-pod spec: containers: - name: test-container image: us-docker.pkg.dev/google-samples/containers/gke/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
- Crea el Pod: - kubectl apply -f pod.yaml- Verás que se bloqueó la implementación del Pod. El resultado será similar al siguiente: - Error from server (VIOLATES_POLICY): error when creating "pod.yaml": admission webhook "binaryauthorization.googleapis.com" denied the request: Denied by default admission rule. Overridden by evaluation mode
Obtén el ID de recurso del clúster de usuario
En esta sección, se muestra cómo redactar el ID de recurso de tu clúster de usuario. En tu política de autorización binaria, puedes crear reglas específicas del clúster. Debes asociar estas reglas con un ID de recurso específico del clúster, que se basa en tu ID de clúster.
Obtienes el ID de recurso de la siguiente manera:
Console
- En la Google Cloud consola, ve a la página Clústeres de GKE. 
- Selecciona el ID del proyecto host de la flota para tus clústeres. Puedes encontrar este ID de proyecto en la sección - gkeConnectdel archivo de configuración de tu clúster de usuario.
- En la lista de clústeres, busca el ID del clúster en la columna Nombre. 
- Para crear el ID de recurso, agrega el prefijo - global.al ID del clúster a fin de que el ID de recurso tenga el siguiente formato:- global.CLUSTER_ID.
gcloud
- Usa SSH para conectarte a tu estación de trabajo de administrador. 
- En la estación de trabajo de administrador, ejecuta el siguiente comando: - kubectl get membership -o yaml
- Obtén el ID del clúster del campo - spec.owner.iddel resultado. Este es un resultado de ejemplo:- apiVersion: v1 items: - apiVersion: hub.gke.io/v1 kind: Membership ... spec: owner: id: //gkehub.googleapis.com/projects/PROJECT_NUMBER/locations/global/memberships/my-cluster-id- En el resultado de ejemplo, el ID del clúster es - my-cluster-id.
- Para crear el ID de recurso, agrega el prefijo - global.al ID del clúster. En el ejemplo, el ID de recurso es- global.my-cluster-id.
Usas este ID de recurso cuando defines reglas específicas del clúster. Obtén información para configurar reglas específicas del clúster con la Google Cloud console o la CLI de gcloud.
Actualiza la política de fallas
El webhook del módulo de autorización binaria se puede configurar para fail open o fail close.
Fail close
Para actualizar la política de fallas a fail close, haz lo siguiente:
- Edita el manifest-0.2.6.yaml y establece failurePolicy en - Fail
- Vuelve a habilitar el webhook: - kubectl apply -f manifest-0.2.6.yaml- Verás un resultado similar al siguiente: - serviceaccount/binauthz-admin unchanged role.rbac.authorization.k8s.io/binauthz-role configured clusterrole.rbac.authorization.k8s.io/binauthz-role configured rolebinding.rbac.authorization.k8s.io/binauthz-rolebinding unchanged clusterrolebinding.rbac.authorization.k8s.io/binauthz-rolebinding unchanged secret/binauthz-tls unchanged service/binauthz unchanged deployment.apps/binauthz-module-deployment unchanged validatingwebhookconfiguration.admissionregistration.k8s.io/binauthz-validating-webhook-configuration configured
Fail open
Para actualizar la política de fallas a fail open, haz lo siguiente:
- Edita el manifest-0.2.6.yaml y establece failurePolicy en - Ignore
- Vuelve a habilitar el webhook: - kubectl apply -f manifest-0.2.6.yaml- Verás un resultado similar al siguiente: - serviceaccount/binauthz-admin unchanged role.rbac.authorization.k8s.io/binauthz-role configured clusterrole.rbac.authorization.k8s.io/binauthz-role configured rolebinding.rbac.authorization.k8s.io/binauthz-rolebinding unchanged clusterrolebinding.rbac.authorization.k8s.io/binauthz-rolebinding unchanged secret/binauthz-tls unchanged service/binauthz unchanged deployment.apps/binauthz-module-deployment unchanged validatingwebhookconfiguration.admissionregistration.k8s.io/binauthz-validating-webhook-configuration configured
Para obtener más información, consulta la política de falla del webhook.
Libera espacio
- En la siguiente muestra de código, se indica cómo inhabilitar el webhook: - kubectl delete ValidatingWebhookConfiguration/binauthz-validating-webhook-configuration
- En la siguiente muestra de código, se muestra cómo volver a habilitar el webhook: - kubectl apply -f manifest-0.2.6.yaml
- En la siguiente muestra de código, se indica cómo borrar todos los recursos relacionados con la autorización binaria: - kubectl delete -f manifest-0.2.6.yaml kubectl delete namespace binauthz-system
¿Qué sigue?
- Para verificar el cumplimiento de la política durante la creación del Pod sin bloquear realmente su creación, consulta Habilita la ejecución de prueba.
- Para forzar la creación de un Pod que el ejecutor de la autorización binaria bloquearía, consulta Usa la anulación de emergencia.
- Usa el certificador built-by-cloud-buildpara implementar solo imágenes compiladas por Cloud Build.
- Para implementar una política de autorización binaria basada en un certificador, consulta lo siguiente:- Configura una política con la consola deGoogle Cloud o la herramienta de línea de comandos. Configura la regla predeterminada o específica del clúster para exigir certificaciones.
- Crea un certificador con la consola deGoogle Cloud o la herramienta de línea de comandos.
- Crea una certificación.
 
- Si quieres ver los eventos de registro relacionados con Autorización Binaria para Distributed Cloud, consulta Visualiza eventos de Registros de auditoría de Cloud.
- Supervisa las métricas.