En esta página se explica cómo usar el comando de la CLI de Google Cloud del servicio de evaluación de políticas para evaluar rápidamente si una imagen o un recurso de Kubernetes cumple una política de plataforma basada en comprobaciones de validación continuas.
Información general
El servicio de evaluación de políticas es una función de la autorización binaria que puedes usar con políticas de plataforma basadas en comprobaciones de validación continua (VC). El servicio de evaluación de políticas evalúa bajo demanda si una imagen de contenedor que especifiques cumple una política de la plataforma de CV. El servicio de evaluación de políticas está disponible como comando de la CLI de gcloud y como método projects.platforms.gke.policies.evaluate.
La verificación de contenido comprueba si se infringen las políticas al menos una vez cada 24 horas. Por lo tanto, los eventos de CV pueden tardar hasta 24 horas en aparecer en el registro después de habilitar CV o de implementar un recurso de Kubernetes. Además, CV genera entradas de registro cuando detecta una infracción de las políticas. CV no genera entradas de registro cuando los recursos de Kubernetes cumplen la política.
El servicio de evaluación de políticas genera un veredicto que indica si la imagen cumple la política o si la infringe.
Al usar el servicio de evaluación de políticas, puedes determinar rápidamente si tu imagen cumple una política.
Cuando usas el servicio, especificas la URL de la imagen, ya sea directamente o en un recurso de Kubernetes, así como el nombre de la política basada en comprobaciones de CV de GKE.
De esta forma, el servicio de evaluación de políticas puede ayudarte a desarrollar políticas y depurar recursos de Kubernetes no conformes antes de usar CV.
Esta función solo admite políticas basadas en comprobaciones de versiones de GKE.
Las imágenes también deben especificar un digest de imagen con el formato IMAGE_URL@IMAGE_DIGEST
,
excepto en los siguientes casos:
- Comprobación de directorios de confianza: la comprobación se supera si la imagen se encuentra en un directorio que especifiques.
- Listas de permitidos de imágenes exentas: todas las demás comprobaciones requieren un digest de imagen con el formato
IMAGE_URL@IMAGE_DIGEST
.
Antes de empezar
-
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
Roles obligatorios
Para obtener los permisos que necesitas para usar el servicio de evaluación de políticas,
pide a tu administrador que te conceda el
rol de gestión de identidades y accesos Evaluador de políticas (roles/binaryauthorization.policyEvaluator
)
en el proyecto de la política.
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Si tu política usa determinadas comprobaciones, es posible que tengas que pedir a tu administrador que conceda los siguientes roles obligatorios específicos de la comprobación:
- Roles necesarios para la comprobación de la atestación de firma simple
- Roles necesarios para la comprobación de vulnerabilidades
- Roles necesarios para la comprobación de la actualización
Evaluar las políticas de la plataforma basadas en comprobaciones
El servicio de evaluación de políticas puede evaluar una sola URL de imagen o una imagen especificada en un recurso de Kubernetes con formato JSON o YAML.
Evaluar políticas de plataforma basadas en comprobaciones con un recurso de Kubernetes
Para evaluar una política con un recurso de Kubernetes mediante la CLI de gcloud, ejecuta el siguiente comando:
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
POLICY_ID
: ID de la política de la plataforma. Si la política está en otro proyecto, puedes usar el nombre de recurso completo:projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
.POD_SPECIFICATION_PATH
: la ruta de la especificación de tu pod.
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --resource=POD_SPECIFICATION_PATH
Windows (PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --resource=POD_SPECIFICATION_PATH
Windows (cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --resource=POD_SPECIFICATION_PATH
Para evaluar una política que especifique la plataforma, que debe ser gke
,
ejecuta el siguiente comando:
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
POLICY_ID
: ID de la política de la plataforma. Si la política está en otro proyecto, puedes usar el nombre de recurso completo:projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
.POD_SPECIFICATION_PATH
: la ruta de la especificación de tu pod.
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --platform=gke \ --resource=POD_SPECIFICATION_PATH
Windows (PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --platform=gke ` --resource=POD_SPECIFICATION_PATH
Windows (cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --platform=gke ^ --resource=POD_SPECIFICATION_PATH
Evaluar las políticas de la plataforma basadas en comprobaciones con una URL de imagen
Para evaluar una política con una URL de imagen, ejecuta el siguiente comando:
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
POLICY_ID
: ID de la política de la plataforma. Si la política está en otro proyecto, puedes usar el nombre de recurso completo:projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
.IMAGE_URL
: la ruta de la especificación de tu pod.
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --image=IMAGE_URL
Windows (PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --image=IMAGE_URL
Windows (cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --image=IMAGE_URL
Si usas la marca --image
, se da por hecho que el espacio de nombres y la cuenta de servicio están vacíos. Si la política que estás evaluando usa conjuntos de comprobaciones cuyo ámbito es kubernetesNamespace
o kubernetesServiceAccount
, es posible que los resultados devueltos no sean precisos.
Revisar el resultado del comando
La salida del comando contiene un veredicto de nivel superior que indica el estado de conformidad del pod. Se pueden devolver los siguientes estados de conformidad:
CONFORMANT
: el recurso de Kubernetes cumple la política de la plataforma.NON_CONFORMANT
: el recurso de Kubernetes no cumple la política de la plataforma.ERROR
: la evaluación ha finalizado con un error.
La respuesta también contiene resultados anidados con información detallada sobre el estado de conformidad de todas las comprobaciones que se han evaluado para cada imagen contenida en el recurso de Kubernetes.
Cada bloque ImageResults
contiene un campo explanation
que pueden leer los usuarios y que describe por qué se permitiría o no la imagen.
Para facilitar la creación de secuencias de comandos, el comando devuelve un código de salida distinto de cero cuando la especificación de Pod no se ajusta a la política o la evaluación falla.
En los siguientes ejemplos de resultados se muestran dos casos. En el primer caso, el recurso de Kubernetes cumple la política. En el segundo caso, el recurso no se ajusta a la política.
Ver un resultado conforme
En esta sección se describe el resultado de una comprobación del servicio de evaluación de políticas en la que el pod cumple la política de la plataforma.
results:
- imageResults:
- checkSetResult:
checkResults:
results:
- displayName: My trusted directory check
evaluationResult:
verdict: CONFORMANT
explanation: Image is in a trusted directory
type: TrustedDirectoryCheck
displayName: Default check set
scope: {}
imageUri: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
verdict: CONFORMANT
kubernetesNamespace: default
kubernetesServiceAccount: default
podName: my-pod
verdict: CONFORMANT
verdict: CONFORMANT
En el resultado, se devuelve un veredicto de CONFORMANT
para los siguientes tipos de evaluación:
- Comprobación: la imagen cumple los requisitos de la comprobación individual (en este caso, la comprobación del directorio de confianza).
- CheckSet: la imagen cumple todos los requisitos de CheckSet.
- Política: la imagen cumple la política.
Como la imagen cumple la política, el comando devuelve un código de salida cero.
Ver un resultado no conforme
En esta sección se describe la salida de una comprobación del servicio de evaluación de políticas en la que el pod no cumple la política de la plataforma.
results:
- imageResults:
- checkSetResult:
checkResults:
results:
- displayName: My trusted directory check
evaluationResult:
verdict: NON_CONFORMANT
explanation: Image isn't in a trusted directory
type: TrustedDirectoryCheck
displayName: Default check set
scope: {}
imageUri: us-docker.pkg.dev/untrusted-directory/containers/gke/hello-app:1.0
verdict: NON_CONFORMANT
kubernetesNamespace: default
kubernetesServiceAccount: default
podName: my-pod
verdict: NON_CONFORMANT
verdict: NON_CONFORMANT
En la salida, como la imagen no cumple la comprobación individual (en este caso, la comprobación del directorio de confianza) y, por lo tanto, el conjunto de todas las comprobaciones, el veredicto de nivel superior es NON_CONFORMANT
y el comando devuelve un código de salida distinto de cero.
Probar el servicio de evaluación de políticas
En esta sección se describe cómo puede probar el servicio de evaluación de políticas. Crea una política de plataforma basada en comprobaciones que contenga la comprobación del directorio de confianza. En la primera prueba, puedes evaluar una especificación de Pod que cumpla la política. En la segunda prueba, evalúa una especificación de pod que no se ajusta a la política.
Para crear una política que contenga una comprobación de directorios de confianza, ejecuta los siguientes comandos:
Crea un archivo de política de plataforma:
cat << EOF > my-policy.yaml gkePolicy: checkSets: - checks: - displayName: "My trusted directory check" trustedDirectoryCheck: trustedDirPatterns: - "us-docker.pkg.dev/google-samples/containers/gke/" displayName: "My default check set" EOF
Crea la política:
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
- POLICY_ID: ID de política de plataforma que elijas. Si la política está en otro proyecto, puedes usar el nombre de recurso completo:
projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
. - POLICY_PATH: ruta al archivo de la política.
- POLICY_PROJECT_ID: ID del proyecto de la política.
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud beta container binauthz policy create POLICY_ID \ --platform=gke \ --policy-file=POLICY_PATH \ --project=POLICY_PROJECT_ID
Windows (PowerShell)
gcloud beta container binauthz policy create POLICY_ID ` --platform=gke ` --policy-file=POLICY_PATH ` --project=POLICY_PROJECT_ID
Windows (cmd.exe)
gcloud beta container binauthz policy create POLICY_ID ^ --platform=gke ^ --policy-file=POLICY_PATH ^ --project=POLICY_PROJECT_ID
gcloud beta container binauthz policy create POLICY_ID \ --platform=gke \ --policy-file=my-policy.yaml
- POLICY_ID: ID de política de plataforma que elijas. Si la política está en otro proyecto, puedes usar el nombre de recurso completo:
Evaluar una imagen conforme
En esta sección, evaluarás una especificación de pod que cumpla la política que has creado anteriormente en esta guía. La evaluación genera un veredicto que indica que la especificación de Pod es CONFORMANT
, ya que la especificación de Pod hace referencia a una imagen que se encuentra en el directorio especificado en trustedDirPatterns
en la comprobación del directorio de confianza.
Crea la especificación de Pod:
cat << EOF > my-conforming-pod.json { "apiVersion": "v1", "kind": "Pod", "metadata": { "name": "" }, "spec": { "containers": [ { "image": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0" } ] } } EOF
Usa el servicio de evaluación de políticas ejecutando el siguiente comando:
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
POLICY_ID
: ID de la política de la plataforma. Si la política está en otro proyecto, puedes usar el nombre de recurso completo:projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
.my-conforming-pod.json
: la ruta de la especificación de tu pod.
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --image=my-conforming-pod.json
Windows (PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --image=my-conforming-pod.json
Windows (cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --image=my-conforming-pod.json
Evaluar una imagen no conforme
En esta sección, evaluarás una especificación de pod que no se ajusta a la política que has creado anteriormente en esta guía. La evaluación genera un veredicto que indica que la especificación de Pod es NON_CONFORMANT
, porque la especificación de Pod hace referencia a una imagen que se encuentra fuera del directorio especificado en trustedDirPatterns
en la comprobación del directorio de confianza.
Para evaluar una imagen no conforme, ejecuta los siguientes comandos:
Crea la especificación de Pod:
cat << EOF > my-non-conforming-pod.json { "apiVersion": "v1", "kind": "Pod", "metadata": { "name": "" }, "spec": { "containers": [ { "image": "us-docker.pkg.dev/untrusted-directory/containers/gke/hello-app:1.0" } ] } } EOF
Usa el servicio de evaluación de políticas ejecutando el siguiente comando:
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
POLICY_ID
: ID de la política de la plataforma. Si la política está en otro proyecto, puedes usar el nombre de recurso completo:projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
.my-non-conforming-pod.json
: la ruta de la especificación de tu pod.
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --image=my-non-conforming-pod.json
Windows (PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --image=my-non-conforming-pod.json
Windows (cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --image=my-non-conforming-pod.json