En esta página, se muestra cómo usar el comando del servicio de evaluación de políticas de Google Cloud CLI para evaluar rápidamente si una imagen o un recurso de Kubernetes cumple con una política de plataforma basada en la verificación de validación continua.
Descripción general
El servicio de evaluación de políticas es una función de Autorización Binaria que puedes usar con las políticas de plataforma basadas en verificaciones de validación continua (CV). El servicio de evaluación de políticas evalúa a pedido si una imagen de contenedor que especificas se ajusta a una política de la plataforma de la CV. El servicio de evaluación de políticas está disponible como un comando de gcloud CLI y el método projects.platforms.gke.policies.evaluate.
La CV verifica que no haya incumplimientos de política al menos una vez cada 24 horas. Como resultado, los eventos de CV pueden tardar hasta 24 horas en aparecer en Logging después de que se habilita la CV o se implementa un recurso de Kubernetes. Además, la CV produce entradas de registro cuando detecta un incumplimiento de política. La CV no produce entradas de registro cuando los recursos de Kubernetes se ajustan a la política.
El servicio de evaluación de políticas genera un veredicto que indica si la imagen cumple con la política o si la infringe.
Mediante el servicio de evaluación de políticas, puedes determinar con rapidez si la imagen cumple con una política.
Cuando usas el servicio, especificas la URL de la imagen, ya sea directamente o dentro de un recurso de Kubernetes, y, también, especificas el nombre de la política basada en verificaciones de la CV de GKE.
De esta manera, el servicio de evaluación de políticas puede ayudarte a desarrollar políticas y depurar recursos de Kubernetes que no cumplen con las políticas antes de usar la CV.
Esta característica solo admite políticas basadas en verificaciones de la CV de GKE.
Las imágenes también deben especificar un resumen de imágenes con el formato IMAGE_URL@IMAGE_DIGEST
, excepto en los siguientes casos:
- Verificación del directorio de confianza: La verificación se aprueba si la imagen se encuentra en un directorio que especifiques.
- Listas de entidades permitidas de imágenes exentas: todas las demás verificaciones requieren un resumen de imágenes con el formato
IMAGE_URL@IMAGE_DIGEST
.
Antes de comenzar
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Roles obligatorios
A fin de obtener los permisos que necesitas para usar el servicio de evaluación de políticas, pídele a tu administrador que te otorgue el rol de IAM de Evaluador de políticas (roles/binaryauthorization.policyEvaluator
) en el proyecto de política.
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
Si tu política usa ciertas verificaciones, es posible que debas pedirle a tu administrador que otorgue los siguientes roles necesarios específicos de la verificación:
- Roles necesarios para la verificación de certificación de firma simple
- Roles necesarios para la verificación de vulnerabilidades
- Roles necesarios para la verificación de actualización
Evalúa las políticas de plataforma basadas en verificaciones
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.
Evalúa las políticas de plataforma basadas en verificaciones con un recurso de Kubernetes
Para evaluar una política con un recurso de Kubernetes mediante gcloud CLI, ejecuta el siguiente comando:
Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:
POLICY_ID
: el ID de la política de la plataforma. Si la política se encuentra en otro proyecto, puedes usar el nombre completo del recurso:projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
.POD_SPECIFICATION_PATH
: es la ruta de acceso de la especificación del 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 especifica la plataforma, que se debe configurar como gke
, ejecuta el siguiente comando:
Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:
POLICY_ID
: el ID de la política de la plataforma. Si la política se encuentra en otro proyecto, puedes usar el nombre completo del recurso:projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
.POD_SPECIFICATION_PATH
: es la ruta de acceso de la especificación del 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
Evalúa las políticas de plataforma basadas en verificaciones con una URL de imagen
Para evaluar una política mediante una URL de imagen, ejecuta el siguiente comando:
Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:
POLICY_ID
: el ID de la política de la plataforma. Si la política se encuentra en otro proyecto, puedes usar el nombre completo del recurso:projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
.IMAGE_URL
: es la ruta de acceso de la especificación del 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
Cuando usas la marca --image
, se supone que el espacio de nombres y la cuenta de servicio están vacíos. Si la política que evalúas usa conjuntos de verificación con alcance kubernetesNamespace
o kubernetesServiceAccount
, es posible que los resultados que se muestren no sean precisos.
Revisa el resultado del comando
El resultado del comando contiene un veredicto de nivel superior que indica el estado de conformidad del Pod. Se pueden mostrar los siguientes estados de conformidad:
CONFORMANT
: El recurso de Kubernetes cumple con la política de la plataforma.NON_CONFORMANT
: El recurso de Kubernetes no cumple con la política de la plataforma.ERROR
: La evaluación finalizó con un error.
La respuesta también contiene resultados anidados que contienen información detallada sobre el estado de conformidad de todas las verificaciones que se evaluaron para cada imagen contenida en el recurso de Kubernetes.
Cada bloque ImageResults
contiene un campo explanation
legible por humanos que describe por qué se permitirá o no la imagen.
Para facilitar la escritura de secuencias de comandos, el comando muestra un código de salida distinto de cero cuando la especificación del Pod no cumple con 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 con la política. En el segundo caso, el recurso no cumple con la política.
Ve un resultado que cumple con las especificaciones
En esta sección, se describe el resultado de una verificación del servicio de evaluación de políticas en la que el Pod cumple con 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 muestra un veredicto de CONFORMANT
para los siguientes tipos de evaluación:
- Check: La imagen cumple con las especificaciones de la verificación individual; en este caso, la verificación del directorio de confianza.
- CheckSet: La imagen cumple con las especificaciones para cada una de las verificaciones del CheckSet.
- Policy: La imagen cumple con la política.
Debido a que la imagen cumple con la política, el comando muestra un código de salida de cero.
Ver un resultado que no cumple con las políticas
En esta sección, se describe el resultado de una verificación del servicio de evaluación de políticas en la que el Pod no cumple con 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 el resultado, debido a que la imagen no cumple con la verificación individual, en este caso la verificación del directorio de confianza y, por lo tanto, el conjunto de todas las verificaciones, el veredicto de nivel superior es NON_CONFORMANT
, y el comando muestra un código de salida distinto de cero.
Prueba el servicio de evaluación de políticas
En esta sección, se describe cómo puedes probar el servicio de evaluación de políticas. Crea una política de plataforma basada en verificaciones que contenga la verificación del directorio de confianza. En la primera prueba, puedes evaluar una especificación de Pod que cumpla con la política. En la segunda prueba, evalúas una especificación de Pod que no cumple con la política.
Para crear una política que contenga una verificación de directorio 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 cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:
- POLICY_ID: un ID de la política de plataforma que elijas. Si la política se encuentra en otro proyecto, puedes usar el nombre completo del recurso:
projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
. - POLICY_PATH: una ruta de acceso al archivo de política.
- POLICY_PROJECT_ID: el ID del proyecto de políticas.
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: un ID de la política de plataforma que elijas. Si la política se encuentra en otro proyecto, puedes usar el nombre completo del recurso:
Evalúa una imagen que cumpla con las especificaciones
En esta sección, evaluarás una especificación de Pod que cumple con la política que creaste antes en esta guía. La evaluación produce un veredicto que indica que la especificación del Pod es CONFORMANT
, ya que la especificación del Pod hace referencia a una imagen que reside en el directorio especificado en trustedDirPatterns
en la verificación del directorio de confianza.
Crea la especificación del 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 mediante la ejecución del siguiente comando:
Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:
POLICY_ID
: el ID de la política de la plataforma. Si la política se encuentra en otro proyecto, puedes usar el nombre completo del recurso:projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
.my-conforming-pod.json
: es la ruta de acceso de la especificación del 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
Evalúa una imagen que no cumple con las políticas
En esta sección, evaluarás una especificación de Pod que no cumple con la política que creaste antes en esta guía. La evaluación produce un veredicto que indica que la especificación del Pod es NON_CONFORMANT
, porque la especificación del Pod hace referencia a una imagen que reside fuera del directorio que se especifica en trustedDirPatterns
en el archivo de confianza la verificación del directorio.
Para evaluar una imagen que no cumple con las políticas, ejecuta los siguientes comandos:
Crea la especificación del 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 mediante la ejecución del siguiente comando:
Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:
POLICY_ID
: el ID de la política de la plataforma. Si la política se encuentra en otro proyecto, puedes usar el nombre completo del recurso:projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
.my-non-conforming-pod.json
: es la ruta de acceso de la especificación del 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