En este instructivo, se muestra cómo usar OpenSSF Scorecard a fin de verificar las imágenes de contenedor para las prácticas recomendadas de seguridad de la cadena de suministro. El certificador del cuadro de evaluación se ejecuta como parte de la canalización de Cloud Build para generar una certificación que la autorización binaria pueda verificar antes de la implementación. Este paso de verificación evita que se implementen artefactos de contenedor vulnerados en producción, lo que puede evitar varias clases de vulnerabilidades en la cadena de suministro.
Descripción general
Open Source Security Foundation (OpenSSF) es una organización que proporciona herramientas, infraestructura y servicios para las iniciativas de seguridad de código abierto. Scorecard es una herramienta que mantiene OpenSSF y escanea los repositorios de administración de código fuente (SCM) para buscar prácticas recomendadas de seguridad relacionadas con la cadena de suministro.
El certificador de cuadro de evaluación es una herramienta integrada en el cuadro de evaluación que le permite crear certificaciones de autorización binaria en función de una política que usted configura. El certificador de evaluación ejecuta el cuadro de evaluación en el repositorio de SCM de una imagen de contenedor, genera los resultados, evalúa los resultados en función de la política y genera una certificación si se satisface la política.
En este instructivo, compilarás un repositorio de muestra y, luego, usarás el certificador de cuadro de evaluación. Cada canalización de muestra contiene los siguientes pasos de compilación:
build
: Compila una imagen de contenedor de muestra.push
: Envía la imagen a Container Registry.attest
: Marca y firma la imagen con el certificador de cuadro de evaluación para crear una certificación basada en la política.
En el paso attest
de cada canalización, el certificador de cuadro de evaluación hace lo siguiente:
- Recupera datos sobre el repositorio de SCM para la imagen de contenedor recién compilada.
- Ejecuta el cuadro de evaluación en los datos sin procesar y evalúa el repositorio de SCM en función de la política especificada por el usuario.
- Si se cumplen todas las políticas, el certificador de cuadro de evaluación crea la certificación.
- Si no se cumple alguna de las políticas, el certificador del cuadro de evaluación no crea la certificación.
En el momento de la implementación, la autorización binaria busca una certificación comprobable. Sin una, el ejecutor no permite la implementación de la imagen.
Costos
En este instructivo, se usan los siguientes productos de Google Cloud.
- Container Registry
- Análisis del contenedor
- Cloud Build
- Cloud Key Management Service
Usa la calculadora de precios para estimar los costos según el uso previsto.
Objetivos
En este instructivo, harás lo que se indica a continuación:
- Configura el certificador de cuadro de evaluación como un compilador personalizado de Cloud Build.
- Ver y configurar la política de certificadores de cuadro de evaluación
- Ejecuta el certificador de cuadro de evaluación en un repositorio de muestra para crear una certificación basada en una política.
- Ejecuta el certificador de cuadro de evaluación en un repositorio de muestra en modo de solo verificación sin crear una certificación. ## Antes de comenzar
En esta sección, realizarás una configuración única del sistema.
Configure su entorno
Almacena tu proyecto de Google Cloud en una variable de entorno.
export PROJECT_ID=PROJECT_ID
Reemplaza PROJECT_ID con el proyecto de Google Cloud.
Establece el ID del proyecto predeterminado en tu proyecto de Google Cloud:
gcloud config set project $PROJECT_ID
Almacena el número de proyecto en una variable de entorno para los pasos futuros:
export PROJECT_NUMBER=$(gcloud projects list --filter="${PROJECT_ID}" \ --format="value(PROJECT_NUMBER)")
Habilita las API:
A fin de asegurarte de que los servicios necesarios para esta guía estén habilitados, ejecuta el siguiente comando:
gcloud services enable \ cloudbuild.googleapis.com \ containerregistry.googleapis.com \ containerscanning.googleapis.com \ cloudkms.googleapis.com
Configura las funciones de IAM
Ejecuta los siguientes comandos para configurar la cuenta de servicio de Cloud Build con los siguientes roles:
containeranalysis.notes.editor
: Agrega el rol Editor de notas de Container Analysis para administrar el certificador.containeranalysis.notes.occurrences.viewer
: Agrega el rol Casos de Container Analysis para notas a fin de administrar los casos de vulnerabilidades y certificaciones.roles/containeranalysis.occurrences.editor
: Agrega el rol Editor de casos de Container Analysis para crear casos de certificación en Container Analysis.cloudkms.signer
: Agrega el rol Firmante de CryptoKey de Cloud KMS que permite que la cuenta de servicio acceda al servicio de firmas de Cloud KMS.gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role roles/containeranalysis.notes.editor gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role roles/containeranalysis.notes.occurrences.viewer gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role roles/containeranalysis.occurrences.editor gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role roles/cloudkms.signer
Crea una clave de firma de Cloud KMS
Las claves de Cloud Key Management Service se usan para crear la certificación.
Crea un nuevo llavero de claves de Cloud KMS con el nombre scorecard-attestor-key-ring:
gcloud kms keyrings create scorecard-attestor-key-ring \ --location global
Crea una clave de Cloud KMS nueva llamada scorecard-attestor-key dentro del llavero de claves:
gcloud kms keys create scorecard-attestor-key \ --keyring scorecard-attestor-key-ring \ --location global \ --purpose "asymmetric-signing" \ --default-algorithm "rsa-sign-pkcs1-2048-sha256"
Almacena el algoritmo de resumen y Cloud KMS en una variable de entorno para los pasos futuros:
export KMS_DIGEST_ALG=SHA256 export KMS_KEY_NAME=projects/$PROJECT_ID/locations/global/keyRings/scorecard-attestor-key-ring/cryptoKeys/scorecard-attestor-key/cryptoKeyVersions/1
Crea el certificador de autorización binaria. Luego, el certificador del cuadro de evaluación crea una nota asociada con este certificador.
gcloud container binauthz attestors create scorecard-attestor \ --attestation-authority-note=scorecard-attestation \ --attestation-authority-note-project=$PROJECT_ID \ --description="Attest that ossf/scorecard policy checks pass"
Asocia el certificador de autorización binaria con la clave de KMS:
gcloud container binauthz attestors public-keys add \ --attestor=scorecard-attestor \ --keyversion=1 \ --keyversion-key=scorecard-attestor-key \ --keyversion-keyring=scorecard-attestor-key-ring \ --keyversion-location=global \ --keyversion-project=$PROJECT_ID
Para explorar otros algoritmos de firma, consulta Crea claves asimétricas.
Crea certificaciones con el certificador de cuadro de evaluación en una canalización de Cloud Build
Envía la compilación de muestra de un caso de error
En esta sección, compilará una imagen de contenedor y verificará sus prácticas de seguridad de cadena de suministro con el cuadro de evaluación de OpenSSF. La imagen se compila correctamente, pero no crea una certificación. El repositorio base contiene algunas prácticas de seguridad de la cadena de suministro no recomendadas, como una dependencia no fijada en Debian 10 en el Dockerfile y un artefacto binario compilado registrado en el repositorio de origen. Estos son incumplimientos de la política de certificación en el repositorio.
Clone el repositorio de prueba: scorecard-binauthz-test-bad.
Consulta el archivo de la política de certificación del caso de error.
cat policy-binauthz.yaml
Consulta el archivo de configuración de compilación para el caso de falla (opcional).
cat samples/signer/cloudbuild.yaml
Envía la compilación:
gcloud builds submit \ --substitutions=_KMS_KEY_NAME=$KMS_KEY_NAME,_KMS_DIGEST_ALG=$KMS_DIGEST_ALG \ --config=cloudbuild.yaml
Deberías ver un resultado como el siguiente:
time="2022-12-20T22:30:14Z" level=info msg="image failed scorecard attestation policy check"
Guarda el ID de compilación de la última compilación:
export BUILD_ID=$(gcloud builds list --limit=1 --format="value('ID')")
Verifica el resultado:
gsutil cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep "failed scorecard attestation policy check"
Envía la compilación de caso de éxito de muestra
En esta sección, compilará una imagen de contenedor que cumpla con su política de certificación de cuadro de evaluación. En este caso, el certificador del cuadro de evaluación crea una certificación.
Para enviar la compilación de caso de éxito de muestra a Cloud Build, ejecuta el siguiente comando:
Clone el repositorio de prueba: scorecard-binauthz-test-good.
Consulta el archivo de la política de certificación del caso de error.
sh cat policy-binauthz.yaml
Consulta el archivo de configuración de compilación para el caso de falla (opcional).
cat samples/signer/cloudbuild.yaml
Envía la compilación:
gcloud builds submit \ --substitutions=_KMS_KEY_NAME=$KMS_KEY_NAME,_KMS_DIGEST_ALG=$KMS_DIGEST_ALG \ --config=cloudbuild.yaml
Verifica el resultado:
gsutil cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep "passed scorecard attestation policy check"
Obtenga la URL de la imagen de contenedor que se creó y verificó con los resultados
export IMAGE_URI=$(gsutil cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep -o "Attestation for image .* is successfully uploaded" txt | cut -d' ' -f4 | tr -d '"')
Confirma que se creó una certificación para la imagen de contenedor. El certificador de resultados de la evaluación usa el ID de nota
ossf-scorecard-attestation
y el nombre de la notaprojects/${PROJECT_ID}/notes/ossf-scorecard-attestation
.gcloud container binauthz attestations list \ --attestor="projects/${PROJECT_ID}/attestors/ossf-scorecard-attestor" \ --filter="resourceUri='https://${IMAGE_URI}'"
Realiza una limpieza
Para limpiar los recursos que se usan en este documento, puedes borrar el proyecto:
gcloud projects delete $PROJECT_ID
¿Qué sigue?
- Consulta la documentación del certificador de cuadro de evaluación
- Más información sobre el cuadro de evaluación
- Más información sobre la autorización binaria
- Crea certificadores a través de la consola de Google Cloud o la herramienta de línea de comandos.