Guía de inicio rápido: Supervisa la seguridad de los Pods con validación continua
Obtén información sobre cómo comenzar a usar la validación continua de Autorización Binaria (CV) con políticas basadas en verificaciones. En esta guía de inicio rápido, se usan las siguientes verificaciones de CV para validar de forma continua los Pods en ejecución en función de las siguientes condiciones:
- Directorio de confianza: Comprueba que las imágenes asociadas con el Pod residan en uno o más directorios de confianza que especificas en la política.
- Actualización de imágenes: verifica que las imágenes del Pod se hayan subido dentro de una cantidad de días que especifiques en la política.
Antes de comenzar
- 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.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization and Google Kubernetes Engine APIs:
gcloud services enable container.googleapis.com
binaryauthorization.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization and Google Kubernetes Engine APIs:
gcloud services enable container.googleapis.com
binaryauthorization.googleapis.com - Instala la herramienta de línea de comandos de
kubectl
. - Si tus políticas de autorización binaria y clústeres de GKE están en proyectos diferentes, asegúrate de que la autorización binaria esté habilitada en ambos proyectos.
Crea una política de plataforma
Para configurar una política de la plataforma de la CV GKE, haz lo siguiente:
Crea el archivo YAML de la política de 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 verifica 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 dentro de los últimos 30 días.
Crea la política de plataforma:
gcloud beta container binauthz policy create POLICY_ID \ --platform=gke \ --policy-file=/tmp/my-policy.yaml \ --project=POLICY_PROJECT_ID
Reemplaza lo siguiente:
POLICY_ID
: un ID que elijasPOLICY_PROJECT_ID
: el ID del proyecto de política
Crea o actualiza un clúster
Para habilitar la CV en un clúster, puedes crear un clúster nuevo o actualizar uno existente.
Para crear un clúster que tenga habilitada la política de plataforma basada en verificaciones, 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_IDReemplaza lo siguiente:
CLUSTER_NAME
: es el nombre del clústerLOCATION
: la ubicación, por ejemplo:us-central1
oasia-south1
POLICY_PROJECT_ID
: el 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 existente con políticas basadas en verificaciones habilitadas, 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
Reemplaza lo siguiente:
CLUSTER_NAME
: es el nombre del clústerLOCATION
: la ubicación, por ejemplo:us-central1
oasia-south1
POLICY_PROJECT_ID
: el 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.
Implementa una imagen
Obtén la credencial para
kubectl
:gcloud container clusters get-credentials CLUSTER_NAME
Implementa 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 con la verificación de actualización porque se subió al repositorio en los últimos 30 días. Sin embargo, la imagen no satisface la verificación del directorio de confianza porque no está enus-central1-docker.pkg.dev/my-project/my-directory
. Como resultado, la CV produce entradas de registroTrustedDirectoryCheck
en Cloud Logging.
Consulta los registros
La entrada de registro aparecerá en Cloud Logging dentro de las 24 horas posteriores a la implementación del Pod, pero puede aparecer en un par de horas.
Para ver el registro en Cloud Logging, usa el siguiente filtro:
logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "policyName"
El registro para el Pod hello-app
es similar al que se muestra a continuación. Algunos campos pueden ser diferentes según el ID del proyecto, el nombre del clúster, etcétera.
{
"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"
}
En la entrada de registro, se muestra información sobre el incumplimiento de política, incluidos los siguientes campos:
policyName
: una política de la plataforma que usaba la CV cuando identificó el incumplimientocheckResults
: Es un bloque de resultados que incluye los siguientes campos:explanation
: un mensaje de errorcheckSetName
: el valordisplayName
para el conjunto de verificacióncheckSetIndex
: el índice de la verificación establecida en la políticacheckName
: el nombre de la verificacióncheckIndex
: el índice de la verificación en el conjunto de verificacionesverdict
: el veredicto que generó la entrada de registro, en este casoNOT_CONFORMANT
, porque no se cumplió la verificación.
Algunas verificaciones pueden incluir información adicional que puede ayudarte a comprender por qué no se cumplió la verificación.
Como la imagen cumplió con la verificación de actualización, esta no aparece en el registro.
Libera espacio
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que se usaron en esta página, borra el proyecto de Cloud que tiene los recursos.
En esta sección, se describe cómo limpiar la supervisión de la CV que configuraste antes en esta guía.
Puedes inhabilitar la supervisión de la CV o Autorización Binaria y la CV en tu clúster.
Inhabilita 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
Reemplaza lo siguiente:
CLUSTER_NAME
: es el nombre del clústerLOCATION
: es la ubicación del clústerCLUSTER_PROJECT_ID
: Es el ID del proyecto del clúster
Inhabilita la supervisión de políticas basada en verificaciones en un clúster
Para inhabilitar la CV con políticas basadas en verificaciones en el clúster y volver a habilitar la aplicación mediante la política de aplicación de 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"
Reemplaza lo siguiente:
CLUSTER_NAME
: es el nombre del clústerLOCATION
: es la ubicación del clústerCLUSTER_PROJECT_ID
: Es el ID del proyecto del clúster
Ten en cuenta que --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE
es equivalente a la marca --enable-binauthz
anterior.
Borrar la política
Para borrar la política, ejecuta el siguiente comando. No es necesario borrar la política de plataforma basada en verificaciones para inhabilitar la auditoría de políticas basada en verificaciones.
gcloud beta container binauthz policy delete POLICY_ID \
--platform=gke \
--project="POLICY_PROJECT_ID"
Reemplaza lo siguiente:
POLICY_ID
: el ID de la políticaPOLICY_PROJECT_ID
: el ID del proyecto de política
¿Qué sigue?
- Usa la verificación de actualidad de la imagen
- Usa la verificación de certificación de firma simple
- Usa la verificación de firma de Sigstore
- Usa la verificación de SLSA
- Usa la verificación del directorio de confianza
- Usa la verificación de vulnerabilidades
Obtén información sobre la CV y otras verificaciones de la CV.