En este documento, se muestra cómo configurar la autorización binaria para clústeres de Anthos alojados en VMware (GKE On-Prem). Luego, se muestra cómo configurar una política de autorización binaria de muestra.
Antes de comenzar
Debes tener la versión 1.4 de clústeres de Anthos alojados en VMware o una posterior instalada y configurada, con un administrador y un clúster de usuario. Tu clúster de usuario debe estar registrado en Connect.
El servicio de autorización binaria usa una dirección IP pública, a la que se puede acceder a través de una conexión a Internet normal. Configura tus reglas de firewall de clústeres de Anthos alojados en VMware para HTTPS a fin de permitir que el clúster de usuario acceda al extremo
binaryauthorization.googleapis.com
.Si deseas usar los Registros de auditoría de Cloud centralizados para ver las entradas de registro de auditoría, incluidas las de la autorización binaria para clústeres de Anthos alojados en VMware, debes configurar Registros de auditoría de Cloud en la configuración del clúster de usuario antes de crearlo.
Debes habilitar la API de autorización binaria de la siguiente manera:
Ve a Google Cloud Console
En la lista desplegable del proyecto, selecciona tu proyecto de Connect. Puedes encontrar este proyecto de Google Cloud en la sección
gkeConnect
del archivo de configuración de tu clúster de usuario. Este es el proyecto de Cloud que conecta tu clúster de usuario a Google Cloud.
Configura la autorización binaria
En esta sección, configurarás la autorización binaria para clústeres de Anthos alojados en VMware en tu clúster de usuario.
Especifica las variables de entorno de instalación
Para especificar las variables de entorno, sigue estos pasos:
Especifica tu proyecto de Connect:
export PROJECT_ID=PROJECT_ID
Reemplaza PROJECT_ID por el proyecto de Cloud en la sección
gkeConnect
del archivo de configuración de tu 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:
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.policyEvaluator
a la cuenta de servicio de acceso a la API de autorización binaria en tu proyecto de Connect: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.yaml
, que usas para instalar el módulo de autorización binaria en tus clústeres de usuario de clústeres de Anthos alojados en VMware:gsutil cp gs://gke-on-prem-release/binauthz/manifest-0.2.2.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.2.yaml
Verifica si se creó la implementación:
kubectl get pod --namespace binauthz-system
Verás el Pod
binauthz-module-deployment-*
conStatus
deRunning
y 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 de Anthos alojados en VMware.
En cada ejemplo, debes configurar la política y, luego, probarla mediante la implementación de una imagen de contenedor en el clúster de usuario de clústeres de Anthos alojados en VMware.
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:
Consola
En Google Cloud Console, ve a la página Autorización binaria.
Asegúrate de seleccionar el ID de tu proyecto de Connect.
Haz clic en Editar política.
En Regla predeterminada del proyecto, selecciona Permitir todas las imágenes.
Haga clic en Save Policy.
gcloud
Establece el
PROJECT_ID
para tu proyecto de Connect. Puedes encontrar este ID de proyecto en el campogkeConnect
del archivo de configuración de tu clúster de usuario.export PROJECT_ID=PROJECT_ID
Configura el proyecto predeterminado de Google Cloud.
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:
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/<var>PROJECT_ID</var>/policy
Editar
policy.yaml
.Establece
evaluationMode
enALWAYS_ALLOW
.Si tienes un bloque
requireAttestationsBy
en el archivo, bórralo.Guarde el archivo.
Importa
policy.yaml
de la siguiente manera:gcloud container binauthz policy import policy.yaml
En tu estación de trabajo de administrador de clústeres de Anthos alojados en VMware, 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: gcr.io/google-samples/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 todas
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:
Consola
En Google Cloud Console, ve a la página Autorización binaria.
Asegúrate de que tu proyecto de Connect esté seleccionado.
Haz clic en Editar política.
En Regla predeterminada del proyecto, selecciona No permitir ninguna imagen.
Haz clic en Guardar política.
gcloud
Establece el
PROJECT_ID
para tu ID del proyecto de Connect.export PROJECT_ID=PROJECT_ID
Configura el proyecto de 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
evaluationMode
enALWAYS_DENY
.Si tienes un bloque
requireAttestationsBy
en el archivo, bórralo.Guarde el archivo.
Importa
policy.yaml
de la siguiente manera:gcloud container binauthz policy import policy.yaml
En tu estación de trabajo de administrador de clústeres de Anthos alojados en VMware, 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: gcr.io/google-samples/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 consola, ve a la página Clústeres de Anthos.
Selecciona el ID del proyecto de Connect para los clústeres de Anthos alojados en VMware. Puedes encontrar este ID de proyecto en la sección
gkeConnect
del archivo de configuración de tu clúster de usuario.En Clústeres administrados por Anthos, 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 los clústeres de Anthos alojados en la estación de trabajo de administrador de VMware.
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.id
del 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 esglobal.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 mediante la consola 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.2.yaml y establece failurePolicy en
fail
Vuelve a habilitar el webhook:
kubectl apply -f namespace.yaml
Verás un resultado similar al siguiente:
namespace/binauthz-system created
Fail open
Para actualizar la política de fallas a fail open, haz lo siguiente:
Edita el manifest-0.2.2.yaml y establece failurePolicy en
ignore
Vuelve a habilitar el webhook:
kubectl apply -f namespace.yaml
Verás un resultado similar al siguiente:
namespace/binauthz-system created
Para obtener más información, consulta la política de falla del webhook.
Limpia
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.2.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.2.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-build
para implementar solo imágenes compiladas por Cloud Build (Vista previa). - Para implementar una política de autorización binaria basada en un certificador, consulta lo siguiente:
- Configura una política mediante Google Cloud Console o la herramienta de línea de comandos. Configura la regla predeterminada o específica del clúster para exigir certificaciones.
- Crea un certificador mediante Google Cloud Console o la herramienta de línea de comandos.
- Crea una certificación.
- Si quieres ver los eventos de registro relacionados con la autorización binaria para clústeres de Anthos alojados en VMware, consulta Visualiza eventos de Registros de auditoría de Cloud.
- Supervisa las métricas.