Seguridad de la cadena de suministro para imágenes Docker de C++
Requisitos previos
- Tienes un cliente git. Los ejemplos de esta sección usan git por línea de comandos, pero puedes usar cualquier cliente.
- Tienes Docker Desktop instalado, con containerd activado para hacer pull y almacenar imágenes (es una casilla en Settings > General). Si usas Docker Engine:
Tienes el plugin CLI de Docker Scout instalado. Para instalarlo en Docker Engine, usa el siguiente comando:
$ curl -sSfL https://raw.githubusercontent.com/docker/scout-cli/main/install.sh | sh -s --Tienes containerd activado para Docker Engine.
Descripción general
Esta sección te guía para extraer Software Bill of Materials (SBOM) de una imagen Docker de C++ con Docker Scout. Los SBOM ofrecen una lista detallada de todos los componentes de un paquete de software, incluidas sus versiones y licencias. Puedes usar los SBOM para hacer seguimiento de la procedencia del software y garantizar que cumple las políticas de seguridad y licencias de tu organización.
Generar un SBOM
Aquí usaremos la imagen Docker que compilamos en la guía
Crear una compilación multi-etapa para tu aplicación C++. Si aún no has compilado la imagen, sigue los pasos de esa guía para compilarla.
La imagen se llama hello. Para generar un SBOM de la imagen hello, ejecuta el siguiente comando:
$ docker scout sbom --format list helloEl comando dirá "No packages discovered". Esto se debe a que la imagen final es una imagen scratch y no tiene paquetes.
Generar una attestation SBOM
El SBOM puede generarse durante el proceso de compilación y «adjuntarse» a la imagen. Esto se llama attestation SBOM.
Para generar una attestation SBOM de la imagen hello, primero cambia el Dockerfile:
ARG BUILDKIT_SBOM_SCAN_STAGE=true
FROM ubuntu:latest AS build
RUN apt-get update && apt-get install -y build-essential
WORKDIR /app
COPY hello.cpp .
RUN g++ -o hello hello.cpp -static
# --------------------
FROM scratch
COPY --from=build /app/hello /hello
CMD ["/hello"]La primera línea ARG BUILDKIT_SBOM_SCAN_STAGE=true activa el escaneo SBOM en la etapa de compilación.
Ahora compila la imagen con el siguiente comando:
$ docker buildx build --sbom=true -t hello:sbom .Este comando compilará la imagen y generará una attestation SBOM. Puedes comprobar que el SBOM está adjunto a la imagen ejecutando el siguiente comando:
$ docker scout sbom --format list hello:sbomDocker Scout lee la attestation SBOM cuando está disponible, así que este comando informa paquetes de los metadatos de la etapa de compilación en lugar de indexar solo el sistema de archivos de la imagen scratch final.
Resumen
En esta sección aprendiste a generar attestation SBOM para una imagen Docker de C++ durante el proceso de compilación. Los escáneres de imágenes que solo inspeccionan el sistema de archivos final pueden no identificar paquetes en imágenes scratch. Usa attestations SBOM para conservar los metadatos de paquetes de la compilación.