Establecimiento de variables secretas

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Las variables secretas son variables cifradas que se pueden usar en canalizaciones sin exponer su valor. Las variables secretas se pueden usar para información privada, como contraseñas, identificadores y otros datos de identificación que no desea exponer en una canalización. Las variables secretas se cifran en reposo con una clave RSA de 2048 bits y están disponibles en el agente para tareas y scripts que se van a usar.

Las formas recomendadas de establecer variables secretas están en la interfaz de usuario, en un grupo de variables y en un grupo de variables de Azure Key Vault. También puede establecer variables secretas en un script con un comando de registro, pero no se recomienda, ya que cualquiera que pueda acceder a la canalización también puede ver el secreto.

Las variables de secreto establecidas en la interfaz de usuario de configuración de una canalización se limitan a la canalización donde se establecen. Puede usar grupos de variables para compartir variables secretas entre canalizaciones.

Variables secretas en la interfaz de usuario

Puede establecer variables secretas en el editor de canalización al editar una canalización individual. Para cifrar y convertir en secreta una variable de canalización, seleccione el icono de bloqueo.

Las variables secretas se establecen de la misma manera para YAML y Clásico.

Para establecer secretos en la interfaz web, siga estos pasos:

  1. Vaya a la página Canalizaciones, seleccione la canalización adecuada y, después, seleccione Editar.
  2. Busque las Variables de esta canalización.
  3. Agregue la variable o actualícela.
  4. Seleccione la opción de Mantener el secreto de este valor para almacenar la variable de forma cifrada.
  5. Guarde la canalización.

Las variables de secreto se cifran en reposo con una clave RSA de 2048 bits. Los secretos están disponibles en el agente para que los usen las tareas y los scripts. Tenga cuidado con quién tiene acceso para modificar la canalización.

Importante

Hacemos un esfuerzo por enmascarar los secretos para que no aparezcan en la salida de Azure Pipelines, pero debe tomar precauciones. Nunca haga eco de secretos como salida. Algunos sistemas operativos registran los argumentos de la línea de comandos. Nunca pase secretos en la línea de comandos. En su lugar, se recomienda asignar los secretos a variables de entorno.

Nunca enmascaramos las subcadenas de los secretos. Si, por ejemplo, se establece "abc123" como secreto, "abc" no se enmascara en los registros. El objetivo de esto es no enmascarar los secretos de un modo demasiado pormenorizado, que haría los registros ilegibles. Por este motivo, los secretos no deben contener datos estructurados. Si, por ejemplo, se establece "{ "foo": "bar" }" como secreto, "bar" no se enmascara en los registros.

A diferencia de una variable normal, no se descifran automáticamente en variables de entorno para scripts. Debe asignar explícitamente variables secretas.

Uso de una variable secreta en la interfaz de usuario

Deberá asignar variables secretas como variables de entorno para hacer referencia a ellas en canalizaciones YAML. En este ejemplo, hay dos variables secretas definidas en la interfaz de usuario SecretOne y SecretTwo. El valor de SecretOne es foo y el valor de SecretTwo es bar.

steps:
- powershell: |
      Write-Host "My first secret variable is $env:FOO_ONE"
      $env:FOO_ONE -eq "foo"
  env:
    FOO_ONE: $(SecretOne)
- bash: |
    echo "My second secret variable: $FOO_TWO"
    if [ "$FOO_TWO" = "bar" ]; then
        echo "Strings are equal."
    else
        echo "Strings are not equal."
    fi
  env:
    FOO_TWO: $(SecretTwo) 

Las salidas de la canalización:

My first secret variable is ***
True
My second secret variable: ***
Strings are equal.

Nota:

Azure Pipelines realiza un esfuerzo para enmascarar secretos al emitir datos a registros de canalización, por lo que es posible que vea variables adicionales y datos enmascarados en los registros y de salida que no están establecidos como secretos.

Para obtener un ejemplo más detallado, consulte Definición de variables.

Establecimiento de una variable secreta en un grupo de variables

Puede agregar secretos a un grupo de variables o vincular secretos desde una instancia de Azure Key Vault existente.

Creación de nuevos grupos de variables

  1. Seleccione Biblioteca>de canalizaciones> + Grupo de variables.

    Captura de pantalla del botón Agregar grupo de variables resaltado con un cuadro rojo.

  2. Escriba un nombre y una descripción para el grupo.

  3. Opcional: mueva el botón de alternancia para vincular secretos desde un almacén de claves de Azure como variables. Para obtener más información, consulte Usar secretos de Azure Key Vault.

  4. Escriba el nombre y el valor de cada variable que se va a incluir en el grupo y elija + Agregar para cada una.

  5. Para proteger la variable, elija el icono de "bloqueo" al final de la fila.

  6. Cuando haya terminado de agregar variables, seleccione Guardar.

    Captura de pantalla de guardar un grupo de variables.

Los grupos de variables siguen el modelo de seguridad de la biblioteca.

Puede crear un grupo de variables que se enlace a un almacén de claves de Azure existente y asignar los secretos del almacén de claves seleccionados al grupo de variables. Solo los nombres de secreto se asignan al grupo de variables, no a los valores secretos. Las ejecuciones de canalización que se vinculan al grupo de variables obtienen los valores secretos más recientes del almacén.

Cualquier cambio realizado en los secretos existentes en el almacén de claves está disponible automáticamente para todas las canalizaciones en las que se usa el grupo de variables. Sin embargo, si se agregan o eliminan secretos del almacén, los grupos de variables asociados no se actualizan automáticamente. Debe actualizar explícitamente los secretos para incluirlos en el grupo de variables.

Aunque Key Vault admite el almacenamiento y administración de claves criptográficas y certificados en Azure, la integración de grupos de variables de Azure Pipelines solo admite la asignación de secretos del almacén de claves. No se admiten claves criptográficas ni certificados.

Nota:

No se admiten almacenes de claves que usan el control de acceso basado en roles de Azure (RBAC de Azure).

Requisitos previos

  • Un almacén de claves de Azure que contiene los secretos. Puede crear un almacén de claves mediante Azure Portal.
  • Una conexión de servicio de Azure para el proyecto.

Creación del grupo de variables

  1. En el proyecto de Azure DevOps, seleccione Canalizaciones>Biblioteca>+ Grupo de variables.
  2. En la página Grupos de variables, escriba un nombre y una descripción opcional para el grupo de variables.
  3. Habilite el conmutador Vincular secretos desde una instancia de Azure Key Vault como variables.
  4. Seleccione el punto de conexión de la suscripción de Azure y el nombre del almacén de claves.
  5. Habilite Azure DevOps para acceder al almacén de claves; para ello, seleccione Autorizar junto al nombre del almacén.
  6. En la pantalla Elegir secretos, seleccione secretos específicos del almacén para asignarlos a este grupo de variables y, a continuación, seleccione Aceptar.
  7. Seleccione Guardar para guardar el grupo de variables secretas.

Captura de pantalla del grupo de variables con la integración del almacén de claves de Azure.

Nota:

La conexión de servicio de Azure debe tener al menos permisos Get y List en el almacén de claves, que puede autorizar en los pasos anteriores. También puede proporcionar los permisos siguientes desde Azure Portal mediante estos pasos:

  1. Abra Configuración para el almacén de claves y, a continuación, elija Configuración de acceso>Ir a directivas de acceso.
  2. En la página Directivas de acceso, si el proyecto de Azure Pipelines no aparece en Aplicaciones con al menos permisos Get y List, seleccione Crear.
  3. En Permisos de secretos, seleccione Get y List y, a continuación, seleccione Siguiente.
  4. Seleccione la entidad de servicio y, después, Siguiente.
  5. Vuelva a seleccionar Siguiente, revise la configuración y seleccione Crear.

Uso de la tarea Azure Key Vault

Puede usar la tarea Azure Key Vault para incluir secretos en la canalización. Esta tarea permite que la canalización se conecte a Azure Key Vault y recupere secretos para usarlos como variables de canalización.

  1. En el editor de canalizaciones, seleccione Mostrar asistente para expandir el panel asistente.

  2. Busque vault y seleccione la tarea Azure Key Vault.

    Agregue la tarea Azure Key Vault.

La opción Hacer que los secretos estén disponibles para todo el trabajo no se admite actualmente en Azure DevOps Server 2019 y 2020.

Para más información sobre la tarea Azure Key Vault, consulte Uso de secretos de Azure Key Vault en Azure Pipelines.

Establecimiento de una variable secreta en un script con comandos de registro

Puede usar el comando de registro task.setvariable para establecer variables en scripts de PowerShell y Bash. Esta es la forma menos segura de trabajar con variables secretas, pero puede ser útil para la depuración. Las formas recomendadas de establecer variables secretas están en la interfaz de usuario, en un grupo de variables y en un grupo de variables de Azure Key Vault.

Para establecer una variable como script con un comando de registro, debe pasar la marca issecret.

Cuando issecret se establece en true, el valor de la variable se guardará como secreto y se enmascarará en los registros.

Nota:

Azure Pipelines realiza un esfuerzo para enmascarar secretos al emitir datos a registros de canalización, por lo que es posible que vea variables adicionales y datos enmascarados en los registros y de salida que no están establecidos como secretos.

Establezca la variable secreta mySecretVal.

- bash: |
    echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"

Obtenga la variable secreta mySecretVal.

- bash: |
    echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
- bash: |
    echo $(mySecretVal)

Salida de variable secreta en Bash.

Captura de pantalla de la salida de la variable de Bash.

Obtenga más información sobre cómo establecer y usar variables en scripts.