Seguridad del código no está disponible para el sitio .
Información general
Para configurar Datadog SCA en la aplicación, navega a Security > Code Security (Seguridad > Seguridad del código).
Selecciona dónde deseas ejecutar los escaneos de Static Code Analysis
Análisis con escaneos alojados por Datadog
Para repositorios de GitHub, puedes ejecutar escaneos de Datadog Static Code Analysis directamente en la infraestructura de Datadog. Para comenzar, navega a la página Code Security (Seguridad del código).
Escaneo en pipelines de CI
Datadog Static Code Analysis se ejecuta en tus pipelines mediante la CLI de datadog-ci.
Primero, configura tu API de Datadog y claves de aplicación. Añade DD_APP_KEY y DD_API_KEY como secretos. Asegúrate que tu clave de aplicación de Datadog tiene el alcance code_analysis_read.
A continuación, ejecuta Static Code Analysis siguiendo las instrucciones para tu proveedor de CI elegido a continuación.
Consulta las instrucciones según tu proveedor de CI:
Al instalar una aplicación de GitHub, se requieren los siguientes permisos para habilitar ciertas características:
Content: Read, te permite ver fragmentos de código que se muestran en Datadog
Pull Request: Read & Write, permite que Datadog añada comentarios sobre las violaciones directamente en tus solicitudes pull mediante comentarios en solicitudes pull, además de solicitudes pull abiertas para corregir vulnerabilidades
Otros proveedores de gestión de código fuente
Si estás utilizando otro proveedor de gestión de código fuente, configura Static Code Analysis para ejecutarse en tus pipelines de CI mediante la herramienta de la CLI de datadog-ci y carga los resultados en Datadog.
Debes ejecutar un análisis de tu repositorio en la rama predeterminada antes de que los resultados puedan aparecer en la página Code Security (Seguridad del código).
Personaliza tu configuración
Por defecto, Datadog Static Code Analysis analiza tus repositorios con los conjuntos de reglas de Datadog para tus lenguajes de programación. Para personalizar qué conjuntos de reglas deseas aplicar y dónde, añade un archivo static-analysis.datadog.yml al directorio raíz de tu repositorio.
Puedes incluir las siguientes opciones globales en el archivo static-analysis.datadog.yml:
Una lista de prefijos de ruta y patrones glob a ignorar. Los archivos coincidentes no se analizarán.
false
only
Una lista de prefijos de ruta y patrones glob a analizar. Solo los archivos coindentes se analizarán.
false
ignore-gitignore
No utilices rutas mencionadas en el archivo .gitignore para omitir el análisis en ciertos archivos.
false
false
max-file-size-kb
Ignora archivos más grandes que el tamaño especificado (en unidades kB).
false
200
Puedes incluir las siguientes opciones del conjunto de reglas en el archivo static-analysis.datadog.yml:
Nombre
Descripción
Obligatorio
rules
Una lista de configuraciones de regla para las reglas que pertenecen al conjunto de reglas.
false
ignore
Una lista de prefijos de ruta y patrones glob a ignorar en este conjunto de reglas específico. Los archivos coincidentes no se analizarán
false
only
Una lista de prefijos de ruta y patrones glob a analizar en este conjunto de reglas específico. Solo los archivos coincidentes se analizarán.
false
Puedes incluir las siguientes opciones del conjunto de reglas en el archivo static-analysis.datadog.yml:
Nombre
Descripción
Obligatorio
ignore
Una lista de prefijos de ruta y patrones glob a ignorar para esta regla específica. Los archivos coincidentes no se analizarán.
false
only
Una lista de prefijos de ruta y patrones glob a analizar para esta regla específica. Solo se analizarán los archivos coincidentes.
false
arguments
Un mapa de los valores para las reglas que admiten argumentos personalizables.
false
El mapa en el campo arguments utiliza un nombre de argumento como su clave, y los valores son cadenas o mapas:
Para establecer un valor para todo el repositorio, puedes especificarlo como una cadena.
Para establecer diferentes valores para diferentes subárboles en el repositorio, puedes especificarlos como un para desde un prefijo de subárbol hasta el valor que tendrá el argumento dentro de ese subárbol.
La estructura completa del archivo static-analysis.datadog.yml es la siguiente:
rulesets:- ruleset-name- ruleset-name:# Only apply this ruleset to the following paths/filesonly:- "path/example"- "**/*.file"# Do not apply this ruleset in the following paths/filesignore:- "path/example"- "**/*.file"- ruleset-name:rules:rule-name:# Only apply this rule to the following paths/filesonly:- "path/example"- "**/*.file"# Do not apply this rule to the following paths/filesignore:- "path/example"- "**/*.file"arguments:# Set the rule's argument to value.argument-name:valuerule-name:arguments:# Set different argument values in different subtreesargument-name:# Set the rule's argument to value_1 by default (root path of the repo)/:value_1# Set the rule's argument to value_2 for specific pathspath/example:value_2# Only analyze any ruleset in the following paths/filesonly:- "path/example"- "**/*.file"# Do not analyze any ruleset in the following paths/filesignore:- "path/example"- "**/*.file"
Ejemplo de archivo de configuración:
rulesets:- python-best-practices- python-security- python-code-style:rules:max-function-lines:# Do not apply the rule max-function-lines to the following filesignore:- "src/main/util/process.py"- "src/main/util/datetime.py"arguments:# Set the max-function-lines rule's threshold to 150 linesmax-lines:150max-class-lines:arguments:# Set different thresholds for the max-class-lines rule in different subtreesmax-lines:# Set the rule's threshold to 200 lines by default (root path of the repo)/:200# Set the rule's threshold to 100 lines in src/main/backendsrc/main/backend:100- python-inclusive- python-django:# Only apply the python-django ruleset to the following pathsonly:- "src/main/backend"- "src/main/django"# Do not apply the python-django ruleset in files matching the following patternignore:- "src/main/backend/util/*.py"# Only analyze source filesonly:- "src/main"- "src/tests"- "**/*.py"# Do not analyze third-party or generated filesignore:- "lib/third_party"- "**/*.generated.py"- "**/*.pb.py"
Ignorar violaciones
Ignorar un repositorio
Añade una regla ignore (ignorar) en tu archivo static-analysis.datadog.yml. El ejemplo a continuación ignora la regla javascript-express/reduce-server-fingerprinting de todos los directorios.
Añade una regla ignore (ignorar) en tu archivo static-analysis.datadog.yml. El ejemplo a continuación ignora la regla javascript-express/reduce-server-fingerprinting para este archivo. Para obtener más información sobre cómo ignorar por ruta, consulta la sección Personalizar tu configuración.
Para ignorar una instancia de violación específica, comenta no-dd-sa sobre la línea de código a ignorar. Esto impide que la línea genere una violación. Por ejemplo, en el fragmento de código de Python, la línea foo = 1 será ignorada por los análisis de Static Code Analysis.
#no-dd-safoo=1bar=2
También puedes usar no-dd-sa para ignorar solo una regla específica en lugar de ignorar todas las reglas. Para hacerlo, especifica el nombre de la regla que deseas ignorar en el lugar de <rule-name> usando esta plantilla:
no-dd-sa:<rule-name>
Por ejemplo, en el siguiente fragmento de código de JavaScript, la línea my_foo = 1 es analizada por todas las reglas excepto por la regla javascript-code-style/assignment-name, que indica al desarrollador usar camelCase en lugar de snake_case.
Si un método es exitoso, no se realizan otros intentos de asignación. Cada método de asignación se detalla a continuación.
Identificación de la localización del código en el Catálogo de software
El esquema versión v3 y posteriores del Catálogo de software te permite añadir la asignación de tu localización de código para tu servicio. La sección codeLocations especifica la localización del repositorio que contiene el código y sus rutas asociadas.
El atributo paths es una lista de globs que deben unir rutas en el repositorio.
Datadog detecta el uso de archivos en productos adicionales como Error Tracking y archivos asociados
con el servicio de tiempo de ejecución. Por ejemplo, si un servicio llamado foo tiene
una entrada de log o un stack trace que contiene un archivo con una ruta /modules/foo/bar.py,
asocia los archivos /modules/foo/bar.py al servicio foo.
Detección de nombres de servicio en rutas y nombres de repositorio
Datadog detecta nombres de servicio en rutas y nombres de repositorio y asocia el archivo con el servicio si se obtiene una coincidencia.
Para una coincidencia de repositorio, si hay un servicio llamado myservice y
la URL del repositorio es https://github.com/myorganization/myservice.git, entonces,
asocia myservice a todos los archivos en el repositorio.
Si no hay una coincidencia de repositorio, Datadog intenta encontrar una coincidencia en la
path del archivo. Si hay un servicio llamado myservice y la ruta es /path/to/myservice/foo.py, el archivo está asociado con myservice porque el nombre de servicio es parte de la ruta. Si hay dos servicios presentes
en la ruta, se selecciona el nombre de servicio más cercano al nombre de archivo.
Vincular resultados a equipos
Datadog asocia automáticamente el equipo adjunto a un servicio cuando se detecta una violación o una vulnerabilidad. Por ejemplo, si el archivo domains/ecommerce/apps/myservice/foo.py
está asociado con myservice, entonces el equipo myservice se asociará a cualquier violación
detectada en este archivo.
Si no se encuentran otros servicios o equipos, Datadog utiliza el archivo CODEOWNERS en tu repositorio. El archivo CODEOWNERS determina qué equipo posee un archivo en tu proveedor de Git.
Nota: Debes asignar correctamente tus equipos de proveedor de Git a tus equipos de Datadog para que esta característica funcione de forma adecuada.
Escaneo consciente de las diferencias
El escaneo consciente de las diferencias permite que el analizador estático de Datadog solo escanee los archivos modificados por una confirmación en una rama de características. Acelera ampliamente el tiempo de escaneo porque no ejecuta el análisis en cada archivo del repositorio en cada escaneo. Para habilitar el escaneo consciente de las diferencias en tu pipeline de CI, sigue estos pasos:
Asegúrate de que las variables DD_APP_KEY, DD_SITE y DD_API_KEY estén configuradas en tu pipeline de CI.
Añade una llamada a datadog-ci git-metadata upload antes de invocar al analizador estático. Este comando asegura que los metadatos de Git estén disponibles para el backend de Datadog. Los metadatos de Git son necesarios para calcular el número de archivos a analizar.
Asegúrate de que se invoque a datadog-static-analyzer con el indicador --diff-aware.
Ejemplo de una secuencia de comandos (estos comandos deben invocarse en tu repositorio de Git):
Nota: Cuando un escaneo consciente de las diferencias no puede completarse, se escanea el directorio completo.
Carga los resultados de análisis estático de terceros en Datadog
La importación de SARIF ha sido probada para Snyk, CodeQL, Semgrep, Checkov, Gitleaks y Sysdig. Contacta con el servicio de asistencia de Datadog si tienes algún problema con otras herramientas compatibles con SARIF.
Puedes enviar resultados de herramientas de análisis estático de terceros a Datadog, siempre que estén en el formato interoperable Static Analysis Results Interchange Format (SARIF). Se requiere Node.js versión 14 o posterior.