Protege compilaciones

En este documento, se describen las prácticas recomendadas para proteger tus compilaciones. El código de compilación puede referirse a diferentes tipos de operaciones, como los siguientes:

  • Ofuscar o optimizar código: Por ejemplo, la herramienta de código abierto de Google Closure Compiler analiza JavaScript. quita el código muerto, y reescribe y minimiza lo que queda. También verifica el código para los errores comunes de JavaScript.
  • Compilar código en código intermedio (por ejemplo, puedes compilar código Java) en un archivo de clase Java (.class) o código C++ en un archivo de objeto (.obj).
  • Compilación de código y vinculación, creación de una biblioteca o un archivo ejecutable, por ejemplo, compilación de código C++ en una Biblioteca compartida (.so) o un ejecutable de Windows (.exe).
  • Empaquetar el código en un formato distribuible o implementable: Los ejemplos incluyen crear archivos WAR de Java (.war) a partir de archivos de clase Java, crear una imagen de Docker o creando una distribución compilada de Python (.whl).

Según el lenguaje de programación que uses y el entorno en el que realices la implementación, tu compilación puede contener diferentes combinaciones de estas operaciones. Para ejemplo, una compilación podría empaquetar el código de Python en una distribución compilada y, súbelo a un almacén de artefactos, como Artifact Registry PyPI para que puedas usarlo como dependencia en Cloud Functions. También puedes alojar el código de Python en contenedores y, luego, implementarlo la imagen de contenedor en Cloud Run o Google Kubernetes Engine.

Las prácticas de este documento se centran en la creación de código para el empaquetado o en entornos de ejecución en lugar de compilar código.

Usa compilaciones automáticas

Una compilación automatizada o una compilación con secuencia de comandos define todos los pasos de compilación en la secuencia de comandos de compilación. o configuración de compilación, incluidos los pasos para recuperar el código fuente y los pasos para compilar el código. El único comando manual, si lo hay, es el que ejecuta el compilar.

Por ejemplo, una secuencia de comandos de compilación puede ser de la siguiente manera:

  • Una cloudbuild.yaml de Cloud Build.
  • Un archivo Make que ejecutas con la herramienta make.
  • Un archivo de flujo de trabajo de GitHub Actions en formato YAML almacenado en tu .github/workflows/.

Las compilaciones automatizadas proporcionan coherencia en los pasos de compilación. Sin embargo, también es es importante ejecutar compilaciones en un entorno coherente y confiable.

Si bien las compilaciones locales pueden ser útiles para la depuración, lanzar software de compilaciones locales puede introducir muchos problemas de seguridad, incoherencias y las ineficiencias en el proceso de creación.

  • Permitir las compilaciones locales es una forma para que un atacante con intención maliciosa para modificar el proceso de compilación.
  • Las incoherencias en los entornos locales de los desarrolladores y las prácticas de los desarrolladores dificultar la reproducción de compilaciones y el diagnóstico de problemas de compilación.

Las compilaciones manuales hacen que el proceso sea ineficiente, ya que aprovechan más infraestructura recursos como el procesamiento, el almacenamiento y las redes. En la requisitos para el framework SLSA, las compilaciones automatizadas son requisito para el nivel de SLSA 1, y usar un servicio de compilación en lugar de un entornos de compilación es un requisito para el nivel 2 de SLSA.

Cloud Build es el servicio de compilación administrado en Google Cloud. Usa un archivo de configuración de compilación para proporcionar la pasos a Cloud Build. Puedes configurar compilaciones para recuperar dependencias, ejecutar pruebas de unidades, análisis estáticos y pruebas de integración, y crear artefactos herramientas de compilación como Docker, Gradle, Maven, Go y Python. Cloud Build está completamente integrado en otros servicios de CI/CD en Google Cloud, como Artifact Registry y Cloud Deploy, como y entornos de ejecución como GKE y Cloud Run También proporciona integración en el código fuente principal de software, como GitHub y Bitbucket.

Genera la procedencia de la compilación

La origen de compilación es una colección. de datos verificables acerca de una compilación.

Los metadatos de procedencia incluyen detalles como los resúmenes de las imágenes compiladas, las ubicaciones de las fuentes de entrada, la cadena de herramientas de compilación y la duración de la compilación.

Generar la procedencia de la compilación te ayuda a hacer lo siguiente:

  • Verifica que se haya creado un artefacto compilado a partir de una ubicación de origen de confianza. por un sistema de compilación confiable.
  • Identifica el código insertado desde una ubicación de fuente o un sistema de compilación que no sean de confianza.

Puedes usar mecanismos de alertas y políticas para usar de forma proactiva la procedencia de las compilaciones. de datos no estructurados. Por ejemplo, puedes crear políticas que solo permitan implementaciones de código compilada a partir de fuentes verificadas.

Para el nivel 1 de SLSA, la procedencia de la compilación debe estar disponible para los consumidores de la versión artefactos. Para el nivel 2 del SLSA, los datos de procedencia de la compilación también deben cumplir con los siguientes requisitos:

  • El servicio de compilación lo genera o puede leerse directamente desde el servicio de compilación.
  • El consumidor puede verificar su autenticidad y su integridad. Esto debería hacerse con una firma digital generada por el servicio que crea la compilación de los datos de procedencia.

Para el nivel 3 de SLSA, el contenido de origen también debe incluir lo siguiente:

  • El punto de entrada de la definición de compilación.
  • Todos los parámetros de compilación bajo el control de un usuario.

Cloud Build puede generar procedencia de las compilaciones para imágenes de contenedor que proporcionan garantía de compilación de SLSA de nivel 3. Para obtener más información, consulta Ver la procedencia de la compilación

Usa un entorno de compilación efímero

Los entornos efímeros son entornos temporales diseñados para durar un una sola invocación de compilación. Después de la compilación, se limpia o borra el entorno. Las compilaciones efímeras garantizan que el servicio y los pasos de compilación que se ejecutan en un entorno efímero, como un contenedor o una VM. En lugar de reutilizar un entorno de compilación existente, el servicio de compilación aprovisiona un entorno nuevo de cada compilación y la destruye una vez que se completa el proceso.

Los entornos efímeros garantizan compilaciones limpias, ya que no hay archivos residuales o configuración del entorno de compilaciones anteriores que puedan interferir con la compilación el proceso de administración de recursos. Un entorno no efímero brinda una oportunidad para que los atacantes inyectar archivos y contenido maliciosos. Un entorno efímero también reduce la sobrecarga de mantenimiento y reduce las inconsistencias en el entorno de compilación.

Cloud Build configura un nuevo entorno de máquina virtual para cada compilación y la destruye después de la compilación.

Restringe el acceso al servicio de compilación

Sigue el principio de seguridad de privilegio mínimo otorgando los permisos los permisos necesarios para el servicio y los recursos de compilación. Deberías también usan una identidad no humana para ejecutar compilaciones e interactuar con otros servicios en nombre de la compilación.

Si usas Cloud Build, ten en cuenta lo siguiente:

  • Otorga los permisos mínimos necesarios a los miembros de tu para que se adapten a las necesidades de tu organización.
  • Personalizar los permisos de la cuenta de servicio que actúa en nombre de Cloud Build para que solo tenga los permisos necesarios para tu uso. Editar los permisos del valor predeterminado cuenta de servicio de Cloud Build o considera usar cuenta de servicio personalizada.
  • Usa la herramienta Integraciones permitidas de Cloud Build política de la organización para controlar los servicios externos a los que se les invocar activadores de compilación.
  • Coloca Cloud Build en un perímetro de servicio con Controles del servicio de VPC. El perímetro permite una comunicación libre entre los servicios de Google Cloud dentro del perímetro, pero los límites y la comunicación en todo el perímetro según las reglas que especifiques. El perímetro también mitiga el riesgo de robo de datos.

    Cloud Build solo es compatible con los Controles del servicio de VPC para las compilaciones ejecutarse en un grupo privado.

Proteger credenciales

Las compilaciones suelen incluir conexiones a otros sistemas, como el control de versión, almacenes de artefactos y entornos de implementación. Proteger las credenciales que que usas en tus compilaciones ayuda a prevenir el acceso no autorizado a los sistemas de la cadena de suministro de software y el robo de datos.

Evita almacenar credenciales hard-coded directamente en el control de versión o en tu configuración de compilación. En su lugar, almacena las credenciales en un almacén de claves seguro.

En Google Cloud, usa Secret Manager almacena claves de API, contraseñas y otros datos sensibles. Puedes configurar Cloud Build para usar Secrets almacenados en Secret Manager.

Administra tus dependencias

La integridad de tus aplicaciones depende de la integridad del código que desarrolles y las dependencias que uses. También debes considerar dónde te permite publicar tus dependencias, quién tiene acceso de lectura y escritura a tus repositorios de artefactos y políticas para fuentes de confianza de artefactos de compilación que implementas en los entornos de ejecución.

Para obtener más información sobre la administración de dependencias, consulta Administra dependencias.

En Cloud Build, usas compiladores en la nube para ejecutar con comandos de SQL sencillos. Los compiladores son imágenes de contenedor con lenguajes y herramientas comunes. instaladas en ellos. Puedes usar imágenes de contenedores públicos de registros públicos como Docker Hub, los compiladores que proporciona Cloud Build, los compiladores que aporta la comunidad y los personalizados que creas. Puedes también puedes usar buildpacks como compiladores, que incluye lo siguiente: Paquetes de compilación de Google Cloud.

Revisa los compiladores que usas en tus compilaciones de Cloud Build. averigua quién los proporciona y decide si confías en él en tu software de la cadena de suministro. Para tener más control sobre el código en un compilador, puedes hacer lo siguiente: crear compiladores personalizados en lugar de usar compiladores de una fuente pública.

Reduce las oportunidades de alterar la compilación

Existen muchos otros factores que pueden influir en una compilación, incluidos los siguientes:

  • Compilaciones que se ejecutan simultáneamente y pueden influirse entre sí, o una que persiste y afecta a una compilación posterior.
  • Las compilaciones que aceptan parámetros de usuario distintos del punto de entrada de compilación y el ubicación de la fuente de nivel superior.
  • Las compilaciones que especifican dependencias con rangos o dependencias Es mutable (por ejemplo, usar una imagen con la etiqueta latest). Estos crean un riesgo para que las compilaciones usen versiones incorrectas o no deseadas dependencias.

Las siguientes prácticas ayudan a mitigar estos riesgos:

  • Ejecuta cada compilación en un entorno efímero.
  • Evita ejecutar compilaciones con parámetros adicionales para que los usuarios no puedan variables de influencia definidas en las secuencias de comandos de compilación.
  • Restringe el acceso al servicio y los recursos de compilación.
  • Haz referencia a versiones inmutables de dependencias en lugar de identificadores, como etiquetas que puedan dirigir a una versión diferente del artefacto en el futuro. Para obtener más información sobre las dependencias, consulta Administración de dependencias.

Software Delivery Shield

Software Delivery Shield es un solución de cadena de suministro de software de extremo a extremo completamente administrada. Proporciona un conjunto de capacidades y herramientas integral y modular Servicios de Google Cloud que pueden usar los desarrolladores, DevOps y equipos de seguridad para mejorar la postura de seguridad de la cadena de suministro de software. Integra muestra estadísticas de seguridad para aplicaciones compiladas en la IU de Cloud Build en la Consola de Google Cloud Incluye lo siguiente:

  • El nivel SLSA, que identifica el nivel de madurez del software la seguridad de la cadena de suministro.
  • Vulnerabilidades, lista de materiales de software (SBOM) y vulnerabilidades Declaraciones de Exploitability eXchange (VEX) para artefactos de compilación.
  • Procedencia de compilación, que es una colección de metadatos verificables sobre un compilar. Incluye detalles como resúmenes de las imágenes compiladas, la las ubicaciones de las fuentes de entrada, la cadena de herramientas de compilación, los pasos de compilación y la duración de la compilación.

Si necesitas instrucciones para ver las estadísticas de seguridad de las aplicaciones compiladas, consulta Compila una aplicación y visualiza estadísticas de seguridad.

¿Qué sigue?