Usar On-Demand Scanning como parte de tu canalización de Cloud Build te permite bloquear compilaciones si la imagen de contenedor tiene vulnerabilidades con un nivel de gravedad que coincide con un nivel predefinido.
En este instructivo, se muestra cómo usar Cloud Build para compilar tu imagen de contenedor a partir del código fuente, analizarla en busca de vulnerabilidades, verificar los niveles de gravedad de las vulnerabilidades y enviar la imagen a Artifact Registry si no hay vulnerabilidades de un nivel de gravedad específico.
Te recomendamos que crees un proyecto Google Cloud nuevo para este instructivo y que completes los pasos en un entorno aislado.
Prepara tu archivo fuente
En este instructivo, compilarás una imagen a partir de un Dockerfile. Un Dockerfile es un archivo fuente que contiene instrucciones para que Docker compile una imagen.
Abre una terminal, crea un directorio nuevo llamado
ods-tutorial
y navega hasta él:mkdir ods-tutorial && cd ods-tutorial
Crea un archivo llamado
Dockerfile
con el siguiente contenido:# Debian10 image FROM gcr.io/google-appengine/debian10:latest # Ensures that the built image is always unique RUN apt-get update && apt-get -y install uuid-runtime && uuidgen > /IAMUNIQUE
Crea un repositorio de Artifact Registry
Establece el ID del proyecto en el mismo proyecto en el que habilitaste las APIs:
gcloud config set project PROJECT_ID
Crea un repositorio de Docker llamado
ods-build-repo
en la ubicaciónus-central1
:gcloud artifacts repositories create ods-build-repo --repository-format=docker \ --location=us-central1 --description="Repository for scan and build"
Verifica que se haya creado el repositorio correctamente:
gcloud artifacts repositories list
Compilación y análisis
En esta sección, ejecutarás tu canalización de compilación con un archivo de configuración de compilación. Un archivo de configuración de compilación indica a Cloud Build cómo realizar varias tareas según tus especificaciones.
En la carpeta
ods-tutorial/
, crea el archivocloudbuild.yaml
con el siguiente contenido:steps: - id: build name: gcr.io/cloud-builders/docker entrypoint: /bin/bash args: - -c - | docker build -t us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest -f ./Dockerfile . && docker image inspect us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest --format \ '{{index .RepoTags 0}}@{{.Id}}' > /workspace/image-digest.txt && cat image-digest.txt - id: scan name: gcr.io/google.com/cloudsdktool/cloud-sdk entrypoint: /bin/bash args: - -c - | gcloud artifacts docker images scan us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest \ --format='value(response.scan)' > /workspace/scan_id.txt - id: severity check name: gcr.io/google.com/cloudsdktool/cloud-sdk entrypoint: /bin/bash args: - -c - | gcloud artifacts docker images list-vulnerabilities $(cat /workspace/scan_id.txt) \ --format='value(vulnerability.effectiveSeverity)' | if grep -Exq $_SEVERITY; \ then echo 'Failed vulnerability check' && exit 1; else exit 0; fi - id: push name: gcr.io/cloud-builders/docker entrypoint: /bin/bash args: - -c - | docker push us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest images: ['us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest']
Este archivo incluye la ubicación y el repositorio creados anteriormente en Artifact Registry. Si decides usar valores diferentes, modifica el archivo
cloudbuild.yaml
según corresponda. Los valores dePROJECT_ID
ySEVERITY
se pasan a la secuencia de comandos en el comando de compilación.Especifica los niveles de
SEVERITY
de vulnerabilidad que deseas bloquear y comienza la compilación.Puedes usar los siguientes valores para
SEVERITY
:CRITICAL
HIGH
MEDIUM
LOW
Puedes especificar varios niveles de gravedad con una expresión regular.
En el siguiente ejemplo, se especifican los valores de gravedad
CRITICAL
yHIGH
. Esto indica a Cloud Build que verifique si hay vulnerabilidades clasificadas en el nivel de gravedadHIGH
o superior.gcloud builds submit --substitutions=_PROJECT_ID=PROJECT_ID,_SEVERITY='"CRITICAL|HIGH"' \ --config cloudbuild.yaml
Dónde
- PROJECT_ID es el ID del proyecto.
- SEVERITY te permite establecer los niveles de gravedad que deseas bloquear. Si el análisis a pedido encuentra vulnerabilidades que coinciden con alguno de los niveles de gravedad especificados, la compilación fallará.
Cómo comprender los resultados
Cuando estableces el valor de SEVERITY
en CRITICAL|HIGH
, después de que el análisis a pedido busque vulnerabilidades, verificará si hay alguna en el nivel HIGH
y en el nivel CRITICAL
más grave. Si no se encuentran vulnerabilidades coincidentes en tu imagen, la compilación se realizará correctamente y Cloud Build enviará la imagen a Artifact Registry.
El resultado es similar a este:
DONE
--------------------------------------------------------------------------------------------------------------------------------------------
ID CREATE_TIME DURATION SOURCE IMAGES STATUS
abb3ce73-6ae8-41d1-9080-7d74a7ecd7bc 2021-03-15T06:50:32+00:00 1M48S gs://ods-tests_cloudbuild/source/1615791031.906807-a648d10faf4a46d695c163186a6208d5.tgz us-central1-docker.pkg.dev/ods-tests/ods-build-repo/ods-test (+1 more) SUCCESS
Si el análisis a pedido encuentra vulnerabilidades de HIGH
o CRITICAL
en tu imagen, el paso de compilación scan
fallará, no se iniciarán los pasos de compilación posteriores y Cloud Build no enviará una imagen a Artifact Registry.
El resultado es similar a este:
Step #2 - "severity check": Failed vulnerability check
Finished Step #2 - "severity check"
ERROR
ERROR: build step 2 "gcr.io/cloud-builders/gcloud" failed: step exited with non-zero status: 1
En este instructivo, es posible que los resultados varíen, ya que el código fuente de muestra es una distribución de Linux disponible de forma pública, debian10:latest
. Las distribuciones de Linux y los datos de vulnerabilidades relacionados reciben actualizaciones de forma continua.
Para obtener información sobre herramientas Google Cloud adicionales y prácticas recomendadas que te ayudarán a proteger tu cadena de suministro de software, consulta Seguridad de la cadena de suministro de software.
Si deseas obtener más información sobre las prácticas recomendadas para la administración de vulnerabilidades de Linux, puedes usar la capacitación en línea gratuita que proporciona Linux Foundation. Consulta Developing Secure Software (Desarrollo de software seguro).