En esta página se explica cómo usar la comprobación SLSA de la validación continua (VC) de la autorización binaria, que comprueba la procedencia compatible con SLSA de las imágenes de contenedor asociadas a los pods que se ejecutan en clústeres de GKE en los que la VC está habilitada.
Para usar esta comprobación, debes compilar imágenes con Cloud Build, que genera procedencia compatible con SLSA.
En el ejemplo de esta guía se usa Cloud Source Repositories para el repositorio de código fuente, Artifact Registry para el registro de imágenes y Cloud Build para compilar la imagen y generar la procedencia.
El único compilador de confianza que admite la comprobación de SLSA es Cloud Build.
Costes
En esta guía se utilizan los siguientes servicios de Google Cloud :
- Artifact Registry
- Autorización binaria, pero CV está disponible de forma gratuita durante la fase de vista previa
- Cloud Build
- Cloud Source Repositories
- GKE
Para generar una estimación de costes basada en el uso previsto, utiliza la calculadora de precios.
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 Artifact Registry, Binary Authorization, Cloud Build, GKE, Cloud Source Repositories 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 artifactregistry.googleapis.com
binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com sourcerepo.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 Artifact Registry, Binary Authorization, Cloud Build, GKE, Cloud Source Repositories 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 artifactregistry.googleapis.com
binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com sourcerepo.googleapis.com - Asegúrate de que la CLI de gcloud esté actualizada a la última versión.
- 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.
-
Lector de Artifact Registry (
roles/artifactregistry.reader
) en la cuenta de servicio de Compute Engine del proyecto del clúster -
Si el proyecto del clúster es diferente del proyecto de la política, haz lo siguiente:
Evaluador de políticas de autorización binaria (
roles/binaryauthorization.policyEvaluator
) en el agente de servicio de autorización binaria del proyecto del clúster para que pueda acceder al proyecto de la política. -
Si tu proyecto de atestación es diferente de tu proyecto de política:
Lector de repeticiones de Container Analysis (
roles/containeranalysis.occurrences.viewer
) en el agente de servicio de autorización binaria del proyecto de política para que pueda acceder al proyecto de atestación. Si el proyecto en el que ejecutas el clúster es diferente del proyecto en el que reside la política, debes conceder permiso al agente de servicio de Autorización Binaria del proyecto del clúster para acceder a la política en el proyecto de la política.
Obtén el agente de servicio de autorización binaria del proyecto del clúster:
PROJECT_NUMBER=$(gcloud projects list \ --filter="projectId:CLUSTER_PROJECT_ID" \ --format="value(PROJECT_NUMBER)") CLUSTER_SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
Sustituye
CLUSTER_PROJECT_ID
por el ID del proyecto del clúster.Permite que CV evalúe la política en el clúster:
gcloud projects add-iam-policy-binding POLICY_PROJECT_ID \ --member="serviceAccount:$CLUSTER_SERVICE_ACCOUNT" \ --role='roles/binaryauthorization.policyEvaluator'
Sustituye
POLICY_PROJECT_ID
por el ID del proyecto que contiene tu política.
Permite que el agente de servicio del proyecto de la política acceda a las certificaciones:
Obtén el agente de servicio de autorización binaria asociado al proyecto de la política:
PROJECT_NUMBER=$(gcloud projects list \ --filter="projectId:POLICY_PROJECT_ID" \ --format="value(PROJECT_NUMBER)") POLICY_PROJECT_SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
Sustituye
POLICY_PROJECT_ID
por el ID del proyecto que contiene tu política.Concede el rol:
gcloud projects add-iam-policy-binding ATTESTATION_PROJECT_ID \ --member="serviceAccount:$POLICY_PROJECT_SERVICE_ACCOUNT" \ --role='roles/containeranalysis.occurrences.viewer'
Sustituye
ATTESTATION_PROJECT_ID
por el ID del proyecto que contiene tus certificaciones.
Permite que la cuenta de servicio predeterminada de Compute Engine extraiga la imagen del repositorio:
Obtén la cuenta de servicio de Compute Engine asociada al proyecto del clúster:
PROJECT_NUMBER=$(gcloud projects list \ --filter="projectId:CLUSTER_PROJECT_ID" \ --format="value(PROJECT_NUMBER)") COMPUTE_ENGINE_SERVICE_ACCOUNT="$PROJECT_NUMBER-compute@developer.gserviceaccount.com"
Sustituye
CLUSTER_PROJECT_ID
por el ID del proyecto del clúster que contiene tu política.Concede el rol:
gcloud projects add-iam-policy-binding ARTIFACT_PROJECT_ID \ --member="serviceAccount:$COMPUTE_ENGINE_SERVICE_ACCOUNT" \ --role='roles/artifactregistry.reader'
Sustituye
ARTIFACT_PROJECT_ID
por el ID del proyecto de Artifact Registry que almacena las imágenes que se van a implementar.
Crea el repositorio y clónalo de forma local:
gcloud source repos create SOURCE_REPO_NAME \ --project=SOURCE_REPO_PROJECT_ID && \ gcloud source repos clone SOURCE_REPO_NAME \ --project=SOURCE_REPO_PROJECT_ID && \ cd SOURCE_REPO_NAME
Haz los cambios siguientes:
SOURCE_REPO_NAME
: el nombre de tu repositorio de código fuente. Por ejemplo:slsa-check-test-repo
SOURCE_REPO_PROJECT_ID
: el ID del proyecto del repositorio
Para crear los archivos de origen, configuración y compilación, haz lo siguiente:
Crea la fuente de la imagen:
cat > quickstart.sh <<EOF #!/bin/sh echo "Hello, world! The time is $(date)." sleep infinity EOF
Haz que el archivo sea ejecutable:
chmod +x quickstart.sh
Crea el archivo de configuración de Dockerfile:
cat > Dockerfile <<EOF FROM alpine COPY quickstart.sh / CMD ["/quickstart.sh"] EOF
Crea el archivo
cloudbuild.yaml
de Cloud Build, que envía la imagen a Artifact Registry:cat > cloudbuild.yaml <<EOF steps: - name: 'gcr.io/cloud-builders/docker' args: [ 'build', '-t', 'LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/DIRECTORY/IMAGE', '.' ] options: requestedVerifyOption: VERIFIED images: - 'LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/DIRECTORY/IMAGE' EOF
Haz los cambios siguientes:
LOCATION
: la ubicación de Artifact Registry. Por ejemplo:us-west2
,europe-central2
oasia-east1
.ARTIFACT_PROJECT_ID
: el ID del proyecto que almacena los artefactos de Artifact RegistryARTIFACT_REPO_NAME
: el nombre del repositorio de Artifact Registry, por ejemplo,slsa-check-test-repo
DIRECTORY
: el directorio. Por ejemplo:slsa-check
IMAGE
: la ruta a la imagen. Por ejemplo:slsa-check-image
Confirma los archivos en Cloud Source Repositories:
git add . git commit -a
Crea el repositorio de Artifact Registry:
gcloud artifacts repositories create ARTIFACT_REPO_NAME \ --project=ARTIFACT_PROJECT_ID \ --repository-format=docker \ --location=LOCATION \ --description="Docker repository"
Haz los cambios siguientes:
ARTIFACT_REPO_NAME
: el nombre de tu repositorioARTIFACT_PROJECT_ID
: el ID del proyecto del artefactoLOCATION
: la ubicación de Artifact Registry. Por ejemplo:us-west2
,europe-central2
oasia-east1
.
Crea el activador de compilación de Cloud Build:
gcloud beta builds triggers create cloud-source-repositories \ --project=SOURCE_REPO_PROJECT_ID \ --repo=SOURCE_REPO_NAME \ --region=LOCATION \ --branch-pattern=.* \ --build-config=cloudbuild.yaml
Haz los cambios siguientes:
SOURCE_REPO_NAME
: el nombre del repositorio de código fuenteSOURCE_REPO_PROJECT_ID
: el ID de proyecto de Cloud BuildLOCATION
: la ubicación
Activa una compilación subiendo los archivos que has creado anteriormente en esta guía.
git push
Cuando la imagen se compila correctamente, Cloud Build genera la procedencia y sube la imagen a tu repositorio de Artifact Registry.
Para comprobar la imagen más reciente y obtener su resumen, haz lo siguiente:
Comprueba que Cloud Build haya compilado tu imagen:
gcloud artifacts docker images list LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/REPO_NAME/DIRECTORY \ --project=ARTIFACT_PROJECT_ID \ --sort-by=create_time
Haz los cambios siguientes:
LOCATION
: la ubicación de Artifact RegistryARTIFACT_PROJECT_ID
: el ID del proyecto de los artefactosARTIFACT_REPO_NAME
: el nombre del repositorioDIRECTORY
: el directorio
Copia el resumen de la imagen más reciente. El resumen tiene un aspecto similar al siguiente:
sha256:9432f747bd058b33de33bb5314d6eec1ac357d664e04c76824bb7072a9218d59
Opcional: Consulta la procedencia de tu imagen:
gcloud artifacts docker images describe \ LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/DIRECTORY/IMAGE@DIGEST \ --project=ARTIFACT_PROJECT_ID \ --show-provenance
Haz los cambios siguientes:
ARTIFACT_PROJECT_ID
: el ID del proyecto de los artefactosLOCATION
: la ubicación de Artifact RegistryARTIFACT_REPO_NAME
: el nombre del repositorio de artefactos.DIRECTORY
: el directorioIMAGE
: la ruta de la imagenDIGEST
: el resumen asociado a la imagen
La salida del comando es similar a la siguiente:
image_summary: digest: sha256:9432f747bd058b33de33bb5314d6eec1ac357d664e04c76824bb7072a9218d59 fully_qualified_digest: us-west2-docker.pkg.dev/my-project/slsa-check-repo/slsa-check-image@sha256:9432f747bd058b33de33bb5314d6eec1ac357d664e04c76824bb7072a9218d59 registry: us-west2-docker.pkg.dev repository: slsa-check-repo slsa_build_level: 3 provenance_summary: provenance: - build: intotoStatement: _type: https://in-toto.io/Statement/v0.1 predicateType: https://slsa.dev/provenance/v0.1 slsaProvenance: builder: id: https://cloudbuild.googleapis.com/GoogleHostedWorker materials: - digest: sha1: de4e4227fff1d00d6f7785a827608627e4a369ea uri: git+https://source.cloud.google.com/my-project/slsa-check-source-repo metadata: ... envelope: payload: eyJfdHlwZSI6I ... taW1hZ2U6dGFnMSJ9XX0= payloadType: application/vnd.in-toto+json signatures: - keyid: projects/verified-builder/locations/global/keyRings/attestor/cryptoKeys/provenanceSigner/cryptoKeyVersions/1 sig: MEQCIBCCkho_re4EfAT-NBSSmAXOZlv4lU_vWzEru97tU8KmAiAKcAa99umWngzNQADmPixqYjbKjLOKQEUvrI5chSrf7g== - keyid: projects/verified-builder/locations/global/keyRings/attestor/cryptoKeys/builtByGCB/cryptoKeyVersions/1 sig: MEUCIFOEq_7RpiZAB4vUlit3hkZ2yI0n37-5Y87l0JbU-EZSAiEA9TNZZcv_MnzKffTnswHWZR2DSLmYiklr5twWfIec-zo=
El resultado debe contener el bloque
provenance_summary
para que funcione la comprobación de SLSA. Si el resultado no contiene el bloque, comprueba que Cloud Build se haya invocado mediante un activador de compilación. Cloud Build no genera información de procedencia cuando se activa manualmente.Crea el archivo YAML de la política de la plataforma:
cat > POLICY_PATH <<EOF gkePolicy: checkSets: - checks: - displayName: My SLSA check imageAllowlist: # This policy exempts images that are in the following artifact registry allowPattern: - ARTIFACT_LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/EXEMPT_IMAGE_PATH/** slsaCheck: rules: - attestationSource: containerAnalysisAttestationProjects: - projects/ATTESTATION_PROJECT_ID configBasedBuildRequired: true trustedBuilder: GOOGLE_CLOUD_BUILD trustedSourceRepoPatterns: - source.cloud.google.com/SOURCE_REPO_PROJECT_ID/SOURCE_REPO_NAME customConstraints: CEL_EXPRESSION displayName: My check set EOF
Haz los cambios siguientes:
POLICY_PATH
: ruta del archivo de la política.ARTIFACT_LOCATION
: la ubicación de tu repositorio en Artifact Registry.ARTIFACT_PROJECT_ID
: el ID del proyecto que contiene tus artefactos.ARTIFACT_REPO_NAME
: el repositorio que contiene la imagen.EXEMPT_IMAGE_PATH
: ruta opcional a una o varias imágenes exentas. Por ejemplo:not-built-by-cloud-build
. El bloque deimageAllowlist
se incluye en esta política de la plataforma para que puedas eximir las imágenes que no tengan procedencia y, de esta forma, no infrinjan la política de la plataforma. Si quieres registrar las infracciones de estas imágenes, omite este bloque.ATTESTATION_PROJECT_ID
: el ID del proyecto que almacena las certificaciones creadas por Cloud Build.SOURCE_REPO_PROJECT_ID
: el ID del proyecto que contiene tu código fuente.SOURCE_REPO_NAME
: el repositorio que contiene la imagen. Para ilustrarlo, si quieres forzar una infracción de esta comprobación, asignaSOURCE_REPO_NAME
a un repositorio de código fuente que no sea el que contiene tu imagen.POLICY_PROJECT_ID
: ID del proyecto que contiene la política de CV.POLICY_ID
: el ID de esta política.CEL_EXPRESSION
: una expresión CEL que proporciona restricciones adicionales en la política de SLSA. Por ejemplo, para añadir una restricción personalizada que requiera que las imágenes procedan de una ruta de directorio específica, sustituyeCEL_EXPRESSION
por la siguiente expresión:payload.predicate.externalParameters.buildConfigSource.path != "" && payload.predicate.externalParameters.buildConfigSource.repository.contains("github.com/my-repo/my-production-repo")
Crea la política de la plataforma:
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
- 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:
CLUSTER_NAME
: nombre del clúster.LOCATION
: la ubicación (por ejemplo,us-central1
oasia-south1
).POLICY_PROJECT_ID
: el ID del proyecto en el que se almacena la política.POLICY_ID
: el ID de la política.CLUSTER_PROJECT_ID
: el ID del proyecto del clúster.CLUSTER_NAME
: nombre del clúster.LOCATION
: la ubicación (por ejemplo,us-central1
oasia-south1
).POLICY_PROJECT_ID
: el ID del proyecto en el que se almacena la política.POLICY_ID
: el ID de la política.CLUSTER_PROJECT_ID
: el ID del proyecto del clúster.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ústerCLUSTER_NAME
: nombre de un 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ústerConfigura
kubectl
:gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATION \ --project=CLUSTER_PROJECT_ID
Haz los cambios siguientes:
CLUSTER_NAME
: el nombre de tu clústerLOCATION
: la ubicación del clústerCLUSTER_PROJECT_ID
: el ID del proyecto del clúster
Despliega el pod:
kubectl run hello-app \ --image='LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/DIRECTORY/IMAGE@DIGEST'
El pod se ha desplegado. Como la imagen se ha creado con procedencia y a partir de un repositorio de código fuente de confianza, no infringirá la comprobación SLSA de CV y no se generarán entradas de registro.
Para forzar una infracción de la comprobación de SLSA, puedes asignar
SOURCE_REPO_NAME
a un repositorio de código fuente que no sea el que contiene tu imagen. También puedes activar la compilación manualmente, lo que omite la generación de procedencia. A continuación, busca entradas de registro.ImageFreshnessCheck
SigstoreSignatureCheck
SimpleSigningAttestationCheck
SlsaCheck
TrustedDirectoryCheck
VulnerabilityCheck
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
- Ver registros de conversión
Roles obligatorios
En esta sección se explica cómo definir roles para esta comprobación.
Información general
Si ejecutas todos los productos que se mencionan en esta guía en el mismo proyecto, no tienes que definir ningún permiso. Autorización binaria configura los roles correctamente cuando la habilitas. Si ejecuta los productos en proyectos diferentes, debe asignar roles tal como se describe en esta sección.
Para asegurarte de que el agente de servicio de Autorización Binaria de cada proyecto tiene los permisos necesarios para evaluar la comprobación de CV SLSA, pide a tu administrador que asigne los siguientes roles de gestión de identidades y accesos al agente de servicio de Autorización Binaria de cada proyecto:
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
Es posible que tu administrador también pueda conceder los permisos necesarios al agente de servicio de Autorización Binaria en cada proyecto mediante roles personalizados u otros roles predefinidos.
Otorgar roles con la CLI de gcloud
Para asegurarte de que las cuentas de servicio de cada proyecto tengan los permisos necesarios para evaluar esta comprobación, otorga a las cuentas de servicio de cada proyecto los siguientes roles de gestión de identidades y accesos:
Opcional: Crea y sube una imagen de muestra
Esta sección se incluye con fines ilustrativos para mostrarte cómo crear una imagen de ejemplo con procedencia conforme a SLSA. La procedencia se usa más adelante en la guía para mostrar la comprobación. Más información sobre la procedencia de Cloud Build
Crear el repositorio de muestra
Para crear un repositorio en Cloud Source Repositories, sigue estos pasos:
Compilar y subir la imagen de muestra
Para simplificar el uso de esta guía, te recomendamos que uses el mismo proyecto para SOURCE_REPO_PROJECT_ID y ARTIFACT_PROJECT_ID. Si usas proyectos diferentes, puede que tengas que configurar permisos de gestión de identidades y accesos adicionales. Consulta más información sobre el control de acceso de Artifact Registry. Para obtener más información sobre Cloud Build, consulta la descripción general de Cloud Build.
Para crear el repositorio, sigue estos pasos:
Crear una política de la plataforma
Para generar la procedencia, debes usar un activador de Cloud Build para compilar tu imagen, tal como se describe en Compilar y subir la imagen de muestra.
Para crear una política de plataforma con una comprobación de SLSA, siga estos pasos:
Habilitar CV
Puedes crear un clúster o actualizar uno que ya tengas para usar la monitorización de CV con políticas de plataforma basadas en comprobaciones.
Crear un clúster que use la monitorización de CV
En esta sección, crearás un clúster que solo use la monitorización de CV con políticas de plataforma basadas en comprobaciones.
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
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_ID
Windows (PowerShell)
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_ID
Windows (cmd.exe)
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_ID
Crear un clúster que use la monitorización de cumplimiento y de CV
En esta sección, crearás un clúster que utilice tanto la aplicación de la política project-singleton como la monitorización de CV con políticas de plataforma basadas en comprobaciones:
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud beta container clusters create CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
Windows (PowerShell)
gcloud beta container clusters create CLUSTER_NAME ` --location=LOCATION ` --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ` --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ` --project=CLUSTER_PROJECT_ID
Windows (cmd.exe)
gcloud beta container clusters create CLUSTER_NAME ^ --location=LOCATION ^ --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ^ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^ --project=CLUSTER_PROJECT_ID
Actualizar un clúster para usar la monitorización de CV
En esta sección, actualizarás un clúster para que use la monitorización de CV solo con políticas de plataforma basadas en comprobaciones. Si el clúster ya tiene habilitada la aplicación de la política de proyecto único, al ejecutar este comando se inhabilitará. En su lugar, actualiza el clúster con la monitorización de CV y la aplicación habilitadas.
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
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
Windows (PowerShell)
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
Windows (cmd.exe)
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
Actualizar un clúster para usar la monitorización de cumplimiento y de CV
En esta sección, actualizarás un clúster para que use tanto la aplicación de la política de un solo proyecto como la monitorización de versiones con políticas de plataforma basadas en comprobaciones.
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud beta container clusters update CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
Windows (PowerShell)
gcloud beta container clusters update CLUSTER_NAME ` --location=LOCATION ` --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ` --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ` --project=CLUSTER_PROJECT_ID
Windows (cmd.exe)
gcloud beta container clusters update CLUSTER_NAME ^ --location=LOCATION ^ --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ^ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^ --project=CLUSTER_PROJECT_ID
Desplegar la imagen
Ver registros de entradas de CV
Puedes buscar entradas de Cloud Logging para encontrar errores de configuración de CV y infracciones de validación de la política de la plataforma de CV.
CV registra los errores y las infracciones en Cloud Logging en un plazo de 24 horas. Normalmente, las entradas se muestran al cabo de unas horas.
Ver los registros de errores de configuración de la verificación
Para ver los registros de errores de configuración de CV, ejecuta el siguiente comando:
gcloud logging read \
--order="desc" \
--freshness=7d \
--project=CLUSTER_PROJECT_ID \
'logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "configErrorEvent"'
En el siguiente resultado se muestra un error de configuración en el que no se encuentra una política de plataforma de CV:
{
"insertId": "141d4f10-72ea-4a43-b3ec-a03da623de42",
"jsonPayload": {
"@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent",
"configErrorEvent": {
"description": "Cannot monitor cluster 'us-central1-c.my-cluster': Resource projects/123456789/platforms/gke/policies/my-policy does not exist."
}
},
"resource": {
"type": "k8s_cluster",
"labels": {
"cluster_name": "my-cluster",
"location": "us-central1-c",
"project_id": "my-project"
}
},
"timestamp": "2024-05-28T15:31:03.999566Z",
"severity": "WARNING",
"logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
"receiveTimestamp": "2024-05-28T16:30:56.304108670Z"
}
Ver las infracciones de validación de las políticas de la plataforma de CV
Si ninguna imagen infringe las políticas de la plataforma que has habilitado, no aparecerá ninguna entrada en los registros.
Para ver las entradas de registro de CV de los últimos siete días, ejecuta el siguiente comando:
gcloud logging read \
--order="desc" \
--freshness=7d \
--project=CLUSTER_PROJECT_ID \
'logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "policyName"'
Sustituye CLUSTER_PROJECT_ID
por el ID del proyecto del clúster.
Tipos de comprobación
Los registros de CV comprueban la información de las infracciones en checkResults
. En la entrada, el valor checkType
indica la comprobación. Los valores de cada comprobación son los siguientes:
Registro de ejemplo
La siguiente entrada de registro de CV describe una imagen no conforme que infringe una comprobación de directorio de confianza:
{
"insertId": "637c2de7-0000-2b64-b671-24058876bb74",
"jsonPayload": {
"podEvent": {
"endTime": "2022-11-22T01:14:30.430151Z",
"policyName": "projects/123456789/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": "My check set",
"checkSetIndex": "0",
"checkName": "My trusted directory check",
"verdict": "NON_CONFORMANT",
"checkType": "TrustedDirectoryCheck",
"checkIndex": "0"
}
],
"image": "gcr.io/my-project/hello-app:latest"
}
],
"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-test-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"
}
Limpieza
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: