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 especifiques 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.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI 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 usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI 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 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 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
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.
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.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.
CLUSTER_NAME
: es el nombre del clústerLOCATION
: es la ubicación del clústerCLUSTER_PROJECT_ID
: Es el ID del proyecto del clústerCLUSTER_NAME
: es el nombre del clústerLOCATION
: es la ubicación del clústerCLUSTER_PROJECT_ID
: Es el ID del proyecto del clústerPOLICY_ID
: el ID de la políticaPOLICY_PROJECT_ID
: el ID del proyecto de política- 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.
Crea una política de plataforma
Para configurar una política de la plataforma de la CV GKE, haz lo siguiente:
Crea o actualiza un clúster
Para habilitar la CV en un clúster, puedes crear un clúster nuevo o actualizar uno existente.
Implementa una imagen
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:
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.
Limpia
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 Google 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:
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:
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: