Guía de inicio rápido: monitorizar la seguridad de los pods con la validación continua
Consulta cómo empezar a usar la validación continua (VC) de la autorización binaria con políticas basadas en comprobaciones. En esta guía de inicio rápido, utilizarás las siguientes comprobaciones de CV para validar continuamente los pods en ejecución en las siguientes condiciones:
- Directorio de confianza: comprueba que las imágenes asociadas al pod residan en uno o varios directorios de confianza que especifiques en la política.
- Actualidad de la imagen: comprueba que las imágenes del pod se hayan subido en un plazo de días que especifiques en la política.
Antes de empezar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
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
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization and Google Kubernetes Engine APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.gcloud services enable container.googleapis.com
binaryauthorization.googleapis.com -
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
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization and Google Kubernetes Engine APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.gcloud services enable container.googleapis.com
binaryauthorization.googleapis.com - Instala la herramienta de línea de comandos
kubectl
. - Si tus políticas de autorización binaria y tus clústeres de GKE están en proyectos diferentes, asegúrate de que la autorización binaria esté habilitada en ambos proyectos.
Crea el archivo YAML de la política de la plataforma:
cat << EOF > /tmp/my-policy.yaml gkePolicy: checkSets: - checks: - trustedDirectoryCheck: trustedDirPatterns: - us-central1-docker.pkg.dev/my-project/my-directory displayName: My trusted directory check - imageFreshnessCheck: maxUploadAgeDays: 30 displayName: My image freshness check displayName: My trusted directory and image freshness check set EOF
Esta política comprueba las siguientes condiciones:
Las imágenes de los pods se almacenan en el repositorio de Artifact Registry llamado
us-central1-docker.pkg.dev/my-project/my-directory
.Las imágenes de los pods se subieron a los repositorios de Artifact Registry o Container Registry en los últimos 30 días.
Crea la política de la plataforma:
gcloud beta container binauthz policy create POLICY_ID \ --platform=gke \ --policy-file=/tmp/my-policy.yaml \ --project=POLICY_PROJECT_ID
Haz los cambios siguientes:
POLICY_ID
: un ID de tu elecciónPOLICY_PROJECT_ID
: el ID del proyecto de la política
Para crear un clúster con la política de plataforma basada en comprobaciones habilitada, ejecuta el siguiente comando:
gcloud beta container clusters create CLUSTER_NAME
\ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_IDHaz los cambios siguientes:
CLUSTER_NAME
: el nombre del clústerLOCATION
: la ubicación. Por ejemplo:us-central1
oasia-south1
POLICY_PROJECT_ID
: ID del proyecto en el que se almacena la políticaPOLICY_ID
: el ID de la políticaCLUSTER_PROJECT_ID
: el ID del proyecto del clúster
Espera a que se cree el clúster.
Para actualizar un clúster en el que se hayan habilitado las políticas basadas en comprobaciones, ejecuta el siguiente comando.
gcloud beta container clusters update CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
Haz los cambios siguientes:
CLUSTER_NAME
: el nombre del clústerLOCATION
: la ubicación. Por ejemplo:us-central1
oasia-south1
POLICY_PROJECT_ID
: ID del proyecto en el que se almacena la políticaPOLICY_ID
: el ID de la políticaCLUSTER_PROJECT_ID
: el ID del proyecto del clúster
Espera a que se actualice el clúster.
Obtén la credencial de
kubectl
:gcloud container clusters get-credentials CLUSTER_NAME
Desplegar una imagen:
kubectl run hello-app \ --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
La imagen
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
cumple el requisito de actualización porque se subió al repositorio en los últimos 30 días. Sin embargo, la imagen no supera la comprobación del directorio de confianza porque no está enus-central1-docker.pkg.dev/my-project/my-directory
. Como resultado, CV generaTrustedDirectoryCheck
entradas de registro en Cloud Logging.policyName
: una política de la plataforma que usaba CV cuando identificó la infraccióncheckResults
: bloque de resultados que incluye los siguientes campos:explanation
: un mensaje de errorcheckSetName
: el valor dedisplayName
del conjunto de comprobacionescheckSetIndex
: el índice del conjunto de comprobaciones de la políticacheckName
: el nombre de la comprobacióncheckIndex
: el índice de la marca en el conjunto de marcasverdict
: el veredicto que ha dado lugar a la entrada del registro. En este caso,NOT_CONFORMANT
porque no se ha cumplido la comprobación.
CLUSTER_NAME
: el nombre del clústerLOCATION
: la ubicación del clústerCLUSTER_PROJECT_ID
: el ID del proyecto del clústerCLUSTER_NAME
: el nombre del clústerLOCATION
: la ubicación del clústerCLUSTER_PROJECT_ID
: el ID del proyecto del clústerPOLICY_ID
: el ID de la políticaPOLICY_PROJECT_ID
: el ID del proyecto de la política- Usar la comprobación de la actualización de imágenes
- Usar la comprobación de atestación de firma sencilla
- Usar la comprobación de firmas de Sigstore
- Usar la comprobación de SLSA
- Usar la comprobación de directorios de confianza
- Usar la comprobación de vulnerabilidades
Consulta información sobre el CV y otras comprobaciones del CV.
Crear una política de la plataforma
Para configurar una política de plataforma de CV de GKE, haz lo siguiente:
Crear o actualizar un clúster
Para habilitar la verificación de versiones en un clúster, puedes crear un clúster o actualizar uno que ya tengas.
Desplegar una imagen
Ver los registros
La entrada de registro aparece en Cloud Logging en un plazo de 24 horas después de que se implemente el pod, pero puede aparecer en tan solo un par de horas.
Para ver el registro en Cloud Logging, usa el siguiente filtro:
logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "policyName"
El registro del pod hello-app
es similar al que se muestra a continuación. Algunos campos pueden ser diferentes en función del ID de tu proyecto, el nombre del clúster, etc.
{
"insertId": "637c2de7-0000-2b64-b671-24058876bb74",
"jsonPayload": {
"podEvent": {
"endTime": "2022-11-22T01:14:30.430151Z",
"policyName": "projects/1234567890/platforms/gke/policies/my-policy",
"images": [
{
"result": "DENY",
"checkResults": [
{
"explanation": "TrustedDirectoryCheck at index 0 with display name \"My trusted directory check\" has verdict NOT_CONFORMANT. Image is not in a trusted directory",
"checkSetName": "Default check set",
"checkSetIndex": "0",
"checkName": "My trusted directory check",
"verdict": "NON_CONFORMANT",
"checkType": "TrustedDirectoryCheck",
"checkIndex": "0"
}
],
"image": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
}
],
"verdict": "VIOLATES_POLICY",
"podNamespace": "default",
"deployTime": "2022-11-22T01:06:53Z",
"pod": "hello-app"
},
"@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent"
},
"resource": {
"type": "k8s_cluster",
"labels": {
"project_id": "my-project",
"location": "us-central1-a",
"cluster_name": "my-cluster"
}
},
"timestamp": "2022-11-22T01:44:28.729881832Z",
"severity": "WARNING",
"logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
"receiveTimestamp": "2022-11-22T03:35:47.171905337Z"
}
La entrada del registro muestra información sobre la infracción de las políticas, incluidos los siguientes campos:
Algunas comprobaciones pueden incluir información adicional que te ayude a entender por qué no se ha cumplido la comprobación.
Como la imagen ha superado la comprobación de actualización, esta no aparece en el registro.
Limpieza
Para evitar que se apliquen cargos en tu Google Cloud cuenta por los recursos utilizados en esta página, elimina el Google Cloud proyecto con los recursos.
En esta sección se describe cómo limpiar la monitorización de CV que has configurado anteriormente en esta guía.
Puedes inhabilitar la monitorización de CV o tanto Binary Authorization como CV en tu clúster.
Inhabilitar la autorización binaria en un clúster
Para inhabilitar la aplicación de CV y de autorización binaria en tu clúster, ejecuta el siguiente comando:
gcloud beta container clusters update CLUSTER_NAME \
--binauthz-evaluation-mode=DISABLED \
--location=LOCATION \
--project=CLUSTER_PROJECT_ID
Haz los cambios siguientes:
Inhabilitar la monitorización de políticas basada en comprobaciones en un clúster
Para inhabilitar la verificación de versiones con políticas basadas en comprobaciones en el clúster y volver a habilitar la aplicación mediante la política de aplicación de la autorización binaria, ejecuta el siguiente comando:
gcloud beta container clusters update CLUSTER_NAME \
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
--location=LOCATION \
--project="CLUSTER_PROJECT_ID"
Haz los cambios siguientes:
Ten en cuenta que --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE
es equivalente a la marca anterior --enable-binauthz
.
Eliminar la política
Para eliminar la política, ejecuta el siguiente comando. No es necesario eliminar la política de plataforma basada en comprobaciones para inhabilitar la auditoría de políticas basada en comprobaciones.
gcloud beta container binauthz policy delete POLICY_ID \
--platform=gke \
--project="POLICY_PROJECT_ID"
Haz los cambios siguientes: