Protege los repositorios y las pull requests

Servicios de Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022

Protege Azure Repos combinando el control de acceso, las directivas de pull request y las comprobaciones de estado en tus ramas más importantes. En este artículo se muestra cómo restringir los cambios directos, exigir los revisores adecuados, aplicar los requisitos de los elementos de trabajo y de compilación, y agregar comprobaciones de GitHub Advanced Security antes de que se completen las solicitudes de incorporación de cambios.

Amenazas y controles

Use los siguientes controles juntos para reducir los riesgos más comunes de las solicitudes de incorporación de cambios.

Amenaza Riesgo Control recomendado
Envíos directos a ramas protegidas Los cambios eluden la revisión y la validación Permisos de rama y políticas de rama
Aprobación por una sola persona La calidad de la revisión depende de una persona Requerir un número mínimo de revisores
Falta revisión de expertos en archivos confidenciales Los cambios críticos para la seguridad se integran sin los revisores adecuados Revisores incluidos automáticamente
Cambios de código sin seguimiento Menor auditabilidad y rastreabilidad de cambios Verificar elementos de trabajo vinculados
Código roto o no probado Las regresiones alcanzan ramas compartidas Validación de compilación
Comentarios de revisión sin resolver Problemas conocidos de fusión sin respuesta Comprobar resolución de comentarios
Nuevas vulnerabilidades críticas o altas Las regresiones de seguridad se combinan mediante solicitudes de incorporación de cambios Comprobaciones de estado de GitHub Advanced Security

Prerequisites

Categoría Requisitos
acceso al proyecto Miembro de un proyecto.
Permissions - Ver código en proyectos privados: al menos acceso básico.
- Clonar o contribuir al código en proyectos privados: ser miembro del grupo de seguridad Contribuidores o contar con los permisos correspondientes en el proyecto.
- Establecer permisos de rama o repositorio: administre permisos para la rama o el repositorio.
- Establezca directivas de rama, comprobaciones de estado o cambie la rama predeterminada: edite el permiso de directivas para el repositorio o rama o la pertenencia al grupo de seguridad administradores de Project.
- Importar un repositorio: miembro del grupo de seguridad Administradores de proyectos o permiso de Crear repositorio a nivel de proyecto de Git, establecido en Permitir. Para obtener más información, vea Establecimiento de permisos de repositorios Git.
Services Repositorios habilitados.
Tools Optional. Uso de az repos comandos: CLI de Azure DevOps.
Categoría Requisitos
acceso al proyecto Miembro de un proyecto.
Permissions - Ver código: al menos un acceso básico.
- Clonar o contribuir al código: miembro del grupo de seguridad Contributors o con los permisos correspondientes en el proyecto.
Services Repositorios habilitados.

Antes de configurar cualquier directiva de rama:

  • Asegúrese de que el repositorio de destino y la rama ya existen.
  • Decida qué grupos pueden administrar permisos, omitir directivas y aprobar solicitudes de incorporación de cambios.
  • Si planea exigir la validación de compilación o las comprobaciones de estado de GitHub Advanced Security, cree primero la canalización de compilación.

Línea de base de seguridad para la mayoría de los equipos

Para una rama de producción típica, como main, comience con esta línea base:

Área de control Línea base recomendada Por qué
Acceso al repositorio Limitar el acceso de escritura a los colaboradores que trabajan activamente en el repositorio Reduce el número de identidades que pueden cambiar la configuración del código fuente o del repositorio.
Permisos de la rama Restringir la omisión de directivas al completar las solicitudes de incorporación de cambios y la omisión de directivas al enviar cambios a un grupo reducido de administradores Impide que los usuarios omitan las revisiones necesarias, la validación y otras protecciones de rama.
Revisión de la directiva Requerir al menos dos revisores para main Mejora la calidad de la revisión y reduce el riesgo de una sola aprobación errónea o sesgada.
Archivos confidenciales Incluir automáticamente revisores para rutas sensibles para la seguridad, la infraestructura o el cumplimiento normativo Garantiza que los cambios en las áreas de alto riesgo obtengan una revisión de las personas o equipos adecuados.
Rastreabilidad Activar Comprobar si hay elementos de trabajo vinculados Conserva una pista de auditoría entre los cambios de código y el trabajo que los justifica.
Validation Agregar la validación de la compilación para la rama de la PR Detecta errores de compilación y prueba antes de que el código se combine en una rama protegida.
Revisión de la finalización Activar Comprobar la resolución de comentarios Ayuda a asegurarse de que los problemas de los revisores se abordan antes de la finalización.
Puertas de vulnerabilidad Agregue AdvancedSecurity/NewHighAndCritical después de configurar el análisis de Advanced Security Bloquea las solicitudes de incorporación de cambios que presentan nuevos resultados de seguridad elevados o críticos.

Paso 1: Restringir el acceso a repositorios y ramas

Comience con permisos. Las directivas son más eficaces cuando solo un pequeño conjunto de usuarios puede omitirlas.

Revisión de los permisos del repositorio

Use permisos de repositorio para controlar quién puede leer, contribuir, administrar la configuración o contribuir a las solicitudes de incorporación de cambios. Para obtener la referencia detallada de permisos, consulte Establecimiento de permisos de repositorio de Git.

Utilice el siguiente patrón:

  • Otorgue a Colaboradores los permisos que necesitan para trabajar en ramas de funcionalidades.
  • Reserva la administración de repositorios para un grupo de administración pequeño.
  • Evite conceder permisos generales para omitir directivas.

Limitar permisos de rama

En el caso de las ramas protegidas, revise y limite estos permisos cuidadosamente:

  • Omitir las políticas al completar solicitudes de extracción
  • Omitir las políticas al hacer push
  • Forzar push (reescribir el historial, eliminar ramas y etiquetas)
  • Editar directivas
  • Administración de permisos

Use Establecer permisos de la rama para configurar esta configuración.

Patrón recomendado para main:

Grupo Permisos de rama recomendados
Contributors Permitir contribuciones normales mediante pull requests, pero no conceder permisos de bypass
Administradores de proyectos Permitir directivas de edición y administrar permisos
Propietarios de versiones de emergencia Conceder permisos de omisión solo si el proceso de incidente los requiere

Importante

Limita Omitir directivas al completar las solicitudes de incorporación de cambios y Omitir directivas al enviar a un pequeño grupo de administradores de confianza. Estos permisos derrotan las protecciones creadas por los revisores, la validación y las comprobaciones de estado necesarias.

Paso 2: Exigir una revisión rigurosa de las pull requests

Requerir un número mínimo de revisores

Usa Requerir un número mínimo de revisores en ramas importantes, como main y las ramas de lanzamiento.

Configuración recomendada:

  • Revisores mínimos: 2 para ramas compartidas de alto valor
  • Requerir al menos una aprobación en la última iteración
  • Permitir que los solicitantes aprueben sus propios cambios: Off
  • Impedir que el insertador más reciente apruebe sus propios cambios: On cuando desea una separación más fuerte de las tareas

Configure la directiva de número mínimo de revisores

  1. Vaya a Configuración del proyecto>Repositorios.
  2. Seleccione el repositorio y, a continuación, seleccione la rama protegida.
  3. En Directivas, active Requerir un número mínimo de revisores.
  4. Establezca las opciones del revisor para la rama.

Compruebe el resultado:

  • La lista de directivas de rama muestra la directiva de revisor como habilitada.
  • Las solicitudes de incorporación de cambios en la rama no se pueden completar hasta que esté presente el número necesario de aprobaciones.

Para consultar los detalles de las directivas, consulte Directivas y configuración de rama.

Incluir automáticamente revisores para archivos confidenciales

Use Revisores incluidos automáticamente cuando determinados archivos o carpetas requieran aprobación de una persona o equipo específico.

Entre los candidatos adecuados destacan los siguientes:

  • código de implementación e infraestructura
  • autenticación y código de autorización
  • carpetas sensibles al cumplimiento normativo
  • plantillas de canalización compartidas

Configurar la política de revisores incluidos automáticamente

  1. Vaya a Configuración del proyecto>Repositorios.
  2. Abra la rama de destino en Directivas de rama.
  3. Agregue una directiva de revisores incluidos automáticamente .
  4. Agregue las personas o grupos necesarios.
  5. Elija si la directiva es Obligatoria o Opcional.
  6. Agregue filtros de ruta de acceso para los archivos o carpetas que requieren su revisión.
  7. No permitir que los solicitantes aprueben sus propios cambios.

Compruebe el resultado:

  • Una pull request que modifica archivos que coinciden agrega automáticamente los revisores configurados.
  • La solicitud de incorporación de cambios no se puede completar hasta que se cumpla la directiva de revisor necesaria.

Para obtener más información, consulte Incluir automáticamente revisores de código.

Paso 3: Aplicación de la rastreabilidad y validación

Verificar elementos de trabajo vinculados

Activa Buscar elementos de trabajo vinculados cuando tu equipo necesite trazabilidad de cambios entre las solicitudes de extracción y el seguimiento del trabajo.

Configuración de la directiva de elementos de trabajo vinculados

  1. Vaya a Configuración del proyecto>Repositorios.
  2. Abra la rama de destino en Directivas de rama.
  3. Activa Comprobar elementos de trabajo vinculados.
  4. Elija Requerido si las solicitudes de incorporación de cambios deben tener elementos de trabajo vinculados antes de la finalización.

Verifique el resultado: Las solicitudes de incorporación de cambios sin elementos de trabajo vinculados muestran la directiva como no satisfecha.

Para obtener más información, consulte Comprobar si hay elementos de trabajo vinculados.

Validación de compilación

Use La validación de compilación para requerir una ejecución de canalización correcta para las solicitudes de incorporación de cambios antes de la combinación.

Importante

Antes de configurar la validación de compilación, cree la canalización de compilación que vaya a validar la solicitud de incorporación de cambios.

Configuración recomendada para ramas protegidas:

  • Desencadenador: Automático
  • Requisito de directiva: Required
  • Expiración de compilación: elija un valor que coincida con la frecuencia con la que cambia la rama protegida.

Configuración de la directiva de validación de compilación

  1. Abra la rama de destino en Directivas de rama.
  2. Agregue una directiva de validación de compilación.
  3. Seleccione la canalización de compilación.
  4. Elija si la directiva es necesaria.
  5. Guarde la política.

Compruebe el resultado:

  • Abrir o actualizar una solicitud de incorporación de cambios pone en cola la compilación de validación configurada.
  • La solicitud de incorporación de cambios no puede completarse hasta que la compilación requerida se complete correctamente.

Para obtener más información, consulte Validación de la construcción.

Comprobación de la resolución de comentarios

Usa Comprobar que los comentarios se han resuelto para asegurarte de que los hilos de revisión se resuelvan antes de que se complete la solicitud de incorporación de cambios.

Configuración de la directiva de resolución de comentarios

  1. Abra la rama de destino en Directivas de rama.
  2. Activa Comprobar si los comentarios se han resuelto.
  3. Elija Requerido si los comentarios sin resolver deben bloquear la finalización.

Verifique el resultado: las solicitudes de extracción con comentarios pendientes de resolución permanecen bloqueadas hasta que los revisores o los autores resuelvan los hilos.

Para obtener más información, consulte Comprobación de la resolución de comentarios.

Limitar tipos de fusión

Use Limitar tipos de fusión como configuración de gobernanza del historial del repositorio. Esta directiva ayuda a estandarizar cómo aparecen las confirmaciones de solicitud de incorporación de cambios después de la combinación, pero no es un control de seguridad directo.

Elija una estrategia de combinación basada en la forma en que el equipo revisa, realiza seguimientos y audita el historial.

Ejemplo de usos:

  • Requerir combinaciones de squash para el trabajo de características de corta duración.
  • No permitir rebase o squash en ramas en las que el proceso de auditoría espera confirmaciones de mezcla.

Consideraciones de auditoría y rastreabilidad:

  • Squash crea un historial más limpio en la rama de destino, pero fusiona varias confirmaciones de cambios de origen en una sola confirmación en el momento de la fusión.
  • Si su modelo de auditoría depende de conservar la secuencia exacta de commits de una rama de funcionalidad, es preferible usar estrategias de merge commit en lugar de squash.
  • Mantenga la directiva coherente con el modo en que los desarrolladores inspeccionan y depuran el historial en las solicitudes de incorporación de cambios y en la rama de destino.

ejemplo de la CLI de Azure DevOps:

az repos policy merge-strategy create \
  --blocking true \
  --branch main \
  --enabled true \
  --repository-id <repository-id> \
  --allow-no-fast-forward true \
  --allow-rebase false \
  --allow-rebase-merge false \
  --allow-squash false

Para obtener más información, consulte Limitar tipos de combinación.

Paso 4: Agregar comprobaciones de estado de seguridad avanzada de GitHub

Las comprobaciones de estado de GitHub Advanced Security ayudan a evitar que las solicitudes de extracción se fusionen si se introducen nuevas vulnerabilidades críticas o de alta gravedad.

Importante

GitHub Advanced Security para Azure DevOps solo está disponible para Azure DevOps Services y solo para repositorios de código Git.

Antes de añadir la directiva de comprobación del estado:

  1. Habilite GitHub Advanced Security en el repositorio.
  2. Configure las tareas de canalización de Advanced Security necesarias.
  3. Agregue una política de validación de compilación para la rama de la solicitud de incorporación de cambios.
  4. Activa Wait for Processing: true para las tareas documentadas de Seguridad avanzada.
  5. Ejecute la canalización correctamente al menos una vez para que la comprobación de estado aparezca en la lista Estado para comprobar .

Comience con AdvancedSecurity/NewHighAndCritical si el repositorio ya tiene alertas sin resolver. Después de reducir el trabajo pendiente, considere la posibilidad de pasar a AdvancedSecurity/AllHighAndCritical.

Ruta de acceso del explorador:

  1. Abra la rama de destino en Directivas de rama.
  2. En Comprobaciones de estado, seleccione +.
  3. Establezca Estado para comprobar en AdvancedSecurity/NewHighAndCritical.
  4. Deje Opciones avanzadas en sus valores predeterminados.
  5. Guarde la política.

Las comprobaciones de estado de Advanced Security se configuran desde Comprobaciones de estado en el navegador después de habilitar el análisis de Advanced Security y la validación de compilación para el repositorio. Para obtener la configuración necesaria, consulte Configuración de las comprobaciones de estado de la solicitud de incorporación de cambios.

Compruebe el resultado:

  • Las solicitudes de incorporación de cambios con nuevos resultados altos o críticos muestran la comprobación de estado como errónea.
  • La directiva de rama bloquea la finalización hasta que se resuelvan los resultados o la directiva se haga opcional.

Para obtener más información sobre la configuración, consulte:

Planes de despliegue de ejemplo

Línea base del repositorio de menor sensibilidad

Si el repositorio tiene un menor nivel de confidencialidad y quieres un punto de partida manejable:

  1. Restringe los permisos para omitir las restricciones de la rama en main.
  2. Requerir al menos uno o dos revisores.
  3. Active los elementos de trabajo vinculados.
  4. Agregar validación de compilación.
  5. Active la resolución de comentarios.

Repositorio de alta confidencialidad

Si el repositorio contiene recursos críticos para la implementación, la identidad o el cumplimiento:

  1. Restrinja los permisos de omisión de políticas solo a los administradores.
  2. Exigir dos revisores en main.
  3. Agregue revisores incluidos automáticamente para rutas de acceso protegidas.
  4. Exigir elementos de trabajo vinculados.
  5. Agregar validación de compilación.
  6. Agregar las comprobaciones de estado de GitHub Advanced Security si usa Azure DevOps Services.

Opcional: Uso de la asistencia de IA para revisar la configuración de directivas de rama

La asistencia de IA es opcional. Sus permisos de rama, políticas y comprobaciones de estado aplican la protección del repositorio, tanto si usa IA como si no.

Puede usar estas indicaciones para revisar la configuración de directivas, identificar brechas y obtener recomendaciones de línea de base más rápido. Si configura Azure DevOps servidor MCP, el asistente puede usar el contexto de Azure DevOps para mejorar las respuestas. Para obtener instrucciones de configuración, consulte Habilitación de la asistencia de IA con Azure DevOps servidor MCP.

Use avisos como los siguientes para empezar:

Objetivo Mensaje de ejemplo
Revisión de las protecciones de rama Summarize the branch policies on main and explain which ones are required.
Identifique el riesgo de elusión Find users or groups that can bypass branch policies on the main branch.
Comprobación de la cobertura de revisión List the reviewer and comment-resolution policies configured for this repository.
Comprobación del seguimiento del trabajo Check whether pull requests into main require linked work items.
Inspección de las puertas de validación Show the build validation policy for main and explain what pipeline it uses.
Examinar las comprobaciones del estado de seguridad List the status checks configured for main and tell me whether GitHub Advanced Security is one of them.
Planear una línea base más segura Recommend a secure branch policy baseline for this repository based on its current settings.

Valide siempre los comandos y recomendaciones generados en los permisos del repositorio, la configuración de rama y la documentación actual del Azure DevOps antes de aplicarlos.

Sugerencias de solución de problemas

Problema Causa probable Acción recomendada
No aparece una opción de directiva de rama No tiene permiso Editar directivas o no se seleccionó la rama Confirma el acceso a la rama y los permisos de directiva
Las solicitudes de incorporación de cambios pueden combinarse sin directiva de reunión Un usuario tiene permisos de omisión Revisar las políticas de omisión al completar solicitudes de incorporación de cambios y las políticas de omisión al hacer push
No se agregan revisores necesarios El filtro de ruta de la directiva de revisores no coincide con los archivos modificados. Volver a comprobar los filtros de ruta de acceso y las identidades de revisor
La comprobación de estado de Advanced Security no está disponible. El repositorio no ha completado una ejecución satisfactoria del análisis con las tareas requeridas Verificar la validación de compilación, las tareas de canalización y la configuración de Wait for Processing
Una política de elemento de trabajo vinculado no bloquea La directiva es opcional en lugar de necesaria. Vuelva a abrir la política de rama y confirme el nivel del requisito.