Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
En Azure Pipelines, puede permitir a los usuarios personalizar la ejecución de la canalización mediante la recopilación de sus entradas con variables y parámetros. Sin embargo, aceptar la entrada del usuario también puede introducir riesgos de seguridad si no se controlan correctamente. En este artículo, aprenderá a usar variables y parámetros de manera segura en el pipeline.
Este artículo forma parte de una serie que le ayuda a implementar medidas de seguridad para Azure Pipelines. Para más información, consulte Secure Azure Pipelines.
Prerrequisitos
| Categoría | Requisitos |
|---|---|
| Azure DevOps | - Implementa las recomendaciones en Haz que Azure DevOps sea seguro y Haz que Azure Pipelines sea seguro. - Conocimientos básicos de YAML y Azure Pipelines. Para obtener más información, consulte Creación de su primera canalización. |
| Permisos | - Para modificar los permisos de canalizaciones: miembro del grupo Administradores de proyectos. - Para modificar los permisos de la organización: miembro del grupo Administradores de la colección de proyectos. |
variables
Las variables son una manera cómoda de recopilar la entrada del usuario con antelación y facilitar la transferencia de datos entre los pasos de la canalización. Sin embargo, las variables definidas en las tareas o scripts de YAML son de lectura y escritura de forma predeterminada. Los valores establecidos en los pasos ascendentes pueden modificar los valores descendentes inesperadamente.
Por ejemplo, el siguiente fragmento de script llama a una variable denominada MyConfig.
msbuild.exe myproj.proj -property:Configuration=$(MyConfig)
Si un paso anterior estableció el valor de la variable MyConfig a Debug & deltree /y c:, al ejecutar este script, se eliminará el contenido del agente de compilación y podrían surgir consecuencias no deseadas. En este ejemplo se resalta el peligro potencial de esta configuración.
Las variables del sistema, como Build.SourcesDirectory y las variables de salida de tareas, siempre son de solo lectura. También puede designar una variable creada en un script o tarea YAML como de solo lectura pasando el indicador isReadonly=true en su comando de registro.
En una definición de variable YAML, puede especificar una variable de solo lectura mediante la clave específica readonly :
variables:
- name: myReadOnlyVar
value: myValue
readonly: true
Tenga especial precaución con las variables secretas. Los métodos recomendados para establecer variables secretas incluyen el uso de la interfaz de usuario, la creación de un grupo de variables o el uso de un grupo de variables de origen de Azure Key Vault. Para obtener más información, consulte Establecimiento de variables secretas.
Variables de tiempo en espera
Al definir una variable en la interfaz de usuario de Azure Pipelines, puede seleccionar si quiere permitir que los usuarios invaliden el valor durante la ejecución de la canalización. Las variables que permiten a los usuarios establecer su valor en tiempo de cola se denominan variables en tiempo de cola y solo se pueden definir en la interfaz de usuario de variables de Azure Pipelines.
En el editor de canalizaciones clásicas, definirá la variable en tiempo de cola activando la casilla Establecer en tiempo de cola. En las canalizaciones YAML, puede designarlas seleccionando Permitir que los usuarios invaliden este valor al ejecutar esta canalización.
Nota:
En una canalización de versión, seleccione Establecer en tiempo de lanzamiento. Para obtener más información, consulte ¿Cómo puedo editar variables en tiempo de lanzamiento?
Cuando un usuario ejecuta manualmente la canalización, puede seleccionar variables de tiempo de cola y cambiar los valores.
Los usuarios deben tener el permiso Editar configuración de compilación de cola en una canalización para poder definir variables establecidas en tiempo de cola.
Limitar las variables que pueden establecerse en el momento de la puesta en cola.
La interfaz de usuario de Azure Pipelines y la API REST que ejecuta una canalización proporcionan formas de que los usuarios agreguen nuevas variables en tiempo de cola. Esta capacidad permite a los usuarios crear variables que el autor de la canalización no definió, invalidar las variables del sistema y establecer valores para las variables existentes en tiempo de cola.
Para evitar problemas causados por estas capacidades, puede limitar las variables que se pueden establecer en tiempo de cola. Puede activar la configuración Limitar las variables que se pueden establecer en tiempo de cola para que los usuarios solo puedan definir variables marcadas explícitamente como configurables en tiempo de cola, o que permitan a los usuarios sobrescribir este valor al ejecutar esta canalización en tiempo de cola.
Esta configuración se puede aplicar en los niveles de organización y proyecto.
Los administradores de colecciones de proyectos pueden aplicar esta configuración en el nivel de organización en Configuración de la organización>Configuración>. Cuando la configuración es Activado, solo las variables que se marcan explícitamente como configurables en tiempo de cola se pueden establecer en tiempo de cola en todas las canalizaciones de todos los proyectos de la organización.
Los administradores de proyecto pueden aplicar esta configuración a nivel de proyecto en Configuración del proyecto>Canalizaciones>Configuración. Cuando la configuración es Activado, solo las variables que se marcan explícitamente como Settable en tiempo de cola se pueden establecer en tiempo de cola para todas las canalizaciones de este proyecto. Si la configuración no está habilitada en el nivel de organización, se puede habilitar o deshabilitar para proyectos individuales.
Si la configuración de nivel de organización está habilitada, se aplica a todos los proyectos de la organización y no se puede desactivar en el nivel de proyecto.
En el ejemplo siguiente se muestran las variables de una canalización clásica, con algunas de ellas marcadas como configurables en tiempo de cola. La BuildPlatform variable se puede establecer en tiempo de cola, pero BuildConfiguration no puede.
Al ejecutar esta canalización, solo las variables marcadas como Configurables al tiempo de cola son visibles en la pantalla Variables para ser seleccionadas.
Si limitar las variables que se pueden establecer durante el tiempo de cola está activada en el nivel de proyecto o organización, no aparece el botón Agregar variable.
El uso de las API de Compilaciones - Cola o Ejecuciones - Ejecutar Pipeline para poner en cola una ejecución de canalización e intentar establecer el valor de una variable no marcada como configurable en tiempo de cola produce un error similar al siguiente:
{
"$id": "1",
"innerException": null,
"message": "You can't set the following variables (BuildConfiguration). If you want to be able to set these variables, then edit the pipeline and select Settable at queue time on the variables tab of the pipeline editor.",
"typeName": "Microsoft.Azure.Pipelines.WebApi.PipelineValidationException, Microsoft.Azure.Pipelines.WebApi",
"typeKey": "PipelineValidationException",
"errorCode": 0,
"eventId": 3000
}
Parámetros
Una canalización en ejecución no puede modificar parámetros de canalización, a diferencia de las variables. Los parámetros tienen tipos de datos como number y string, y se pueden restringir a subconjuntos de valores específicos. Esta restricción es valiosa cuando un aspecto configurable por el usuario de la canalización solo debe aceptar valores de una lista predefinida, lo que garantiza que la canalización no acepta datos arbitrarios.
Habilitación de la validación de argumentos de tareas de shell
Las canalizaciones pueden hacer referencia a las tareas ejecutadas dentro de la canalización. Algunas tareas incluyen un arguments parámetro que permite a los usuarios especificar más opciones para la tarea.
Al aplicar la opción habilitar la validación de argumentos de tareas de shell , se validan argument los parámetros de las tareas de shell integradas para comprobar si hay entradas que pueden insertar comandos en scripts. La comprobación garantiza que el shell ejecuta correctamente caracteres como punto y coma, comillas y paréntesis en las siguientes tareas de canalización:
- PowerShell
- BatchScript (Secuencia de comandos por lotes)
- Juerga
- Ssh
- AzureFileCopy
- WindowsMachineFileCopy
Puede aplicar
Cuando esta configuración está habilitada, cualquier problema de validación relacionado con un arguments parámetro desencadena el siguiente mensaje de error:
Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).
Para resolver el problema, ajuste el argumento mediante el escape de caracteres especiales como se indica en el mensaje de error.