Compartir a través de


Disponibilidad general de la federación de identidades de carga de trabajo para las conexiones de servicio de Azure Resource Manager

Nos complace anunciar que la federación de identidades de carga de trabajo ya está disponible con carácter general en Azure Pipelines. Puede disfrutar de una experiencia simplificada sin necesidad de administrar secretos y certificados en las conexiones de servicio de Azure.

Con esta actualización, también estamos previsualizar una nueva característica como parte de nuestra integración mejorada de GitHub con Azure Boards. Ahora puede vincular directamente a las solicitudes de incorporación de cambios o confirmaciones de GitHub. No más cambiar entre ventanas o copiar o pegar. Simplemente seleccione el repositorio que desee, busque la solicitud de incorporación de cambios o confirme que necesita y vincúlela.

Consulte las notas de la versión para obtener más información sobre estas características.

General

GitHub Advanced Security para Azure DevOps

Azure Boards

Azure Pipelines

Azure Repos

Azure Artifacts

General

Aviso final de desuso de credenciales alternativas

Las credenciales alternativas estaban formalmente en desuso en marzo de 2020, pero algunos usuarios existentes estaban en el abuelo con el uso continuo de sus credenciales alternativas existentes. A partir de enero de 2024, hemos dejado de usar todas las credenciales alternativas. Para evitar posibles interrupciones, cambie a uno de los mecanismos de autenticación disponibles que proporcionamos, como tokens de acceso personal o identidades administradas.

Rotación de secretos de autoservicio de OAuth de Azure Devops

Cada cinco años, es esencial actualizar el secreto de cliente de la aplicación OAuth de Azure DevOps para garantizar la generación continua de tokens de acceso y actualización necesarios para usar las API de Azure DevOps. A medida que el secreto de cliente se aproxima a la expiración, ahora puede generar uno nuevo de forma independiente, lo que proporciona a su equipo la libertad de administrarlo sin depender del servicio de atención al cliente. Esta flexibilidad en la programación de la rotación de secretos minimiza el tiempo de interrupción potencial para los clientes que esperan un reemplazo debido a un secreto expirado.

Captura de pantalla de Seleccionar una geografía.

Busque esta nueva funcionalidad en cada una de las páginas de la aplicación de Azure DevOps a las que se puede acceder a través de su perfil aquí. Obtenga más información sobre este nuevo paso en nuestra guía de OAuth de Azure DevOps.

GitHub Advanced Security para Azure DevOps

Fragmentos de código disponibles ahora en la vista de detalles de alertas

La página de detalles de alertas para el análisis de código y las alertas de análisis de secretos ahora muestra fragmentos de código que marcan las líneas de código en las que se produjo la alerta. Para ir al archivo original en el repositorio de Azure DevOps, haga clic en el nombre de archivo situado encima del fragmento de código.

Captura de pantalla de la ruta de acceso de middleware que distingue mayúsculas de minúsculas.

Secretos truncados que se muestran en información general de alertas

Los seis últimos caracteres truncados de los secretos detectados ahora se muestran en la pantalla de información general de alertas de secretos. Esta característica es útil si tiene varias exposiciones secretas del mismo tipo de secreto, lo que le permite identificar rápidamente dónde residen determinados secretos.

Captura de pantalla de la lista de alertas secretas.

Se han agregado más gravedades de alerta para las alertas de examen de código.

Ahora existen nuevas gravedades de alerta para los resultados de las alertas de las consultas CodeQL quality como Errorgravedades , Warningy Note . Cada gravedad de alerta de calidad tiene su propio distintivo y color para indicar las gravedades de escalado. También puede filtrar por cada una de estas gravedades, similar a la low critical escala de gravedad para las alertas de seguridad.

Captura de pantalla de la lista de alertas de examen de código y el filtro de gravedad.

Suscripción de Azure vinculada necesaria para la habilitación de GitHub Advanced Security para Azure DevOps

Si previamente ha habilitado Advanced Security para repositorios en una organización de Azure DevOps sin una suscripción de Azure vinculada, puede observar que Advanced Security se deshabilitó automáticamente en esos repositorios. Para volver a habilitar Advanced Security, agregue una suscripción de Azure asociada a la organización. Para más información sobre cómo agregar o cambiar la suscripción, consulte Cambio de la suscripción de Azure.

Actualizaciones avanzadas de API para seguridad

Varias actualizaciones de advanced API para seguridad enviadas recientemente:

  • La API get Alerts ahora admite un nuevo parámetro, ModifiedSince, para devolver una lista incremental de alertas y devolver solo las alertas que se modificaron desde esta fecha. Para obtener más información, vea Alertas: lista.
  • Hay dos puntos de conexión nuevos para capturar o actualizar el estado de habilitación de Advanced Security de una organización o proyecto. Ambos puntos de conexión devuelven una lista de repositorios con Advanced Security habilitado. Para obtener más información, consulte Organización: habilitación o proyecto: habilitación.
  • Hay dos puntos de conexión nuevos para capturar una estimación del recuento de confirmadores activos de una organización o proyecto para reflejar el costo estimado del uso de medidores de seguridad avanzada. Para obtener más información, consulte Estimación de uso de medidores de organización o Estimación de uso de medidores de proyecto.

Ahora se muestran permanentemente los permisos de Seguridad avanzada

En el pasado, los tres bits de permisos de Advanced Security solo estarían presentes como permisos asignables por repositorio si advanced Security estaba habilitado. Ahora, estos permisos están disponibles de forma predeterminada en el panel Permisos de seguridad de repositorios > y se pueden asignar sin tener habilitada la seguridad avanzada.

Captura de pantalla de los permisos de Advanced Security.

Azure Boards

Tiene dos opciones para conectar el elemento de trabajo con una solicitud de incorporación de cambios o confirmación de GitHub. Puede usar la sintaxis AB# en la solicitud de incorporación de cambios o puede vincularla directamente desde el elemento de trabajo. En la actualidad, el proceso implica copiar la dirección URL de la solicitud de incorporación de cambios de GitHub y pegarla al agregar un vínculo. Esto requiere abrir varias ventanas y cambiar entre GitHub y Azure DevOps.

En este sprint, nos complace anunciar una experiencia mejorada habilitando la funcionalidad de búsqueda al vincular a una solicitud de incorporación de cambios o confirmación de GitHub. Busque y seleccione el repositorio deseado y explore en profundidad para buscar y vincular a la solicitud de incorporación de cambios específica o confirmación. Ya no es necesario realizar varios cambios de ventana y copiar o pegar (aunque todavía tiene esa opción).

Gif para agregar vínculo de demostración.

Nota:

Esta característica solo está disponible en la versión preliminar de New Boards Hub.

Si está interesado en obtener acceso a esta característica, envíenos un correo electrónico directamente junto con el nombre de su organización (dev.azure.com/{nombre de la organización}).

Nuevas mejoras en el centro de paneles

Con esta versión, hemos introducido una serie de mejoras en la versión preliminar de New Boards Hub, centrándonos en la accesibilidad y el flujo de página.

Este es un ejemplo de los cambios de flujo de página que se adaptan al 400 % de zoom.

Gif para demostrar las nuevas mejoras del centro de paneles.

Además, hemos implementado mejoras de rendimiento en el formulario de elemento de trabajo, paneles y páginas de trabajos pendientes. Con estos cambios, puede esperar que los nuevos paneles coincidan con los estándares de rendimiento establecidos con Los paneles antiguos.

Controles de desarrollo e implementación

Ahora quitamos los controles Desarrollo o Implementación del elemento de trabajo, en función de cómo se configure el proyecto. Por ejemplo, puede configurar los valores del proyecto para desactivar repositorios o canalizaciones.

Capturas de pantalla de los servicios de DevOps.

Al ir al elemento de trabajo, los controles de desarrollo e implementación correspondientes se ocultarán del formulario.

Capturas de pantalla del trabajo relacionado.

Si decide conectar un repositorio de GitHub a Azure Boards, se mostrará el control de desarrollo para repositorios de GitHub.

Capturas de pantalla del control de desarrollo .

Azure Pipelines

La federación de identidades de carga de trabajo para las conexiones de servicio de Azure Resource Manager ya está disponible con carácter general.

En septiembre, anunciamos la capacidad de configurar conexiones de servicio de Azure sin usar un secreto. Desde entonces, muchos clientes han adoptado esta característica y nos complace anunciar que esta funcionalidad ya está disponible con carácter general.

Si aún no usa la federación de identidades de carga de trabajo, puede aprovechar las conexiones de servicio de Azure sin preocupaciones que no tienen secretos de expiración de las siguientes maneras:

Para crear una nueva conexión de servicio de Azure mediante la federación de identidades de carga de trabajo, seleccione Federación de identidades de carga de trabajo (automática) en la experiencia de creación de la conexión de servicio de Azure:

Captura de pantalla de la federación de identidad de carga de trabajo (automática).

Para convertir una conexión de servicio de Azure creada anteriormente, seleccione la acción "Convertir" después de seleccionar la conexión:

Captura de pantalla de la acción Convertir.

Para convertir varias conexiones de servicio, puede usar la automatización, por ejemplo, este script de PowerShell:

#!/usr/bin/env pwsh
<# 
.SYNOPSIS 
    Convert multiple Azure Resource Manager service connection(s) to use Workload identity federation

.LINK
    https://aka.ms/azdo-rm-workload-identity-conversion

.EXAMPLE
    ./convert_azurerm_service_connection_to_oidc_simple.ps1 -Project <project> -OrganizationUrl https://dev.azure.com/<organization>
#> 
#Requires -Version 7.3

param ( 
    [parameter(Mandatory=$true,HelpMessage="Name of the Azure DevOps Project")]
    [string]
    [ValidateNotNullOrEmpty()]
    $Project,

    [parameter(Mandatory=$true,HelpMessage="Url of the Azure DevOps Organization")]
    [uri]
    [ValidateNotNullOrEmpty()]
    $OrganizationUrl
) 
$apiVersion = "7.1"
$PSNativeCommandArgumentPassing = "Standard" 

#-----------------------------------------------------------
# Log in to Azure
$azdoResource = "499b84ac-1321-427f-aa17-267ca6975798"
az login --allow-no-subscriptions --scope ${azdoResource}/.default
$OrganizationUrl = $OrganizationUrl.ToString().Trim('/')

#-----------------------------------------------------------
# Retrieve the service connection
$getApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints?authSchemes=ServicePrincipal&type=azurerm&includeFailed=false&includeDetails=true&api-version=${apiVersion}"
az rest --resource $azdoResource -u "${getApiUrl} " -m GET --query "sort_by(value[?authorization.scheme=='ServicePrincipal' && data.creationMode=='Automatic' && !(isShared && serviceEndpointProjectReferences[0].projectReference.name!='${Project}')],&name)" -o json `
        | Tee-Object -Variable rawResponse | ConvertFrom-Json | Tee-Object -Variable serviceEndpoints | Format-List | Out-String | Write-Debug
if (!$serviceEndpoints -or ($serviceEndpoints.count-eq 0)) {
    Write-Warning "No convertible service connections found"
    exit 1
}

foreach ($serviceEndpoint in $serviceEndpoints) {
    # Prompt user to confirm conversion
    $choices = @(
        [System.Management.Automation.Host.ChoiceDescription]::new("&Convert", "Converting service connection '$($serviceEndpoint.name)'...")
        [System.Management.Automation.Host.ChoiceDescription]::new("&Skip", "Skipping service connection '$($serviceEndpoint.name)'...")
        [System.Management.Automation.Host.ChoiceDescription]::new("&Exit", "Exit script")
    )
    $prompt = $serviceEndpoint.isShared ? "Convert shared service connection '$($serviceEndpoint.name)'?" : "Convert service connection '$($serviceEndpoint.name)'?"
    $decision = $Host.UI.PromptForChoice([string]::Empty, $prompt, $choices, $serviceEndpoint.isShared ? 1 : 0)

    if ($decision -eq 0) {

        Write-Host "$($choices[$decision].HelpMessage)"
    } elseif ($decision -eq 1) {
        Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
        continue 
    } elseif ($decision -ge 2) {
        Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
        exit 
    }

    # Prepare request body
    $serviceEndpoint.authorization.scheme = "WorkloadIdentityFederation"
    $serviceEndpoint.data.PSObject.Properties.Remove('revertSchemeDeadline')
    $serviceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
    $serviceEndpoint | ConvertTo-Json -Depth 4 -Compress | Set-Variable serviceEndpointRequest
    $putApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints/$($serviceEndpoint.id)?operation=ConvertAuthenticationScheme&api-version=${apiVersion}"
    # Convert service connection
    az rest -u "${putApiUrl} " -m PUT -b $serviceEndpointRequest --headers content-type=application/json --resource $azdoResource -o json `
            | ConvertFrom-Json | Set-Variable updatedServiceEndpoint
    
    $updatedServiceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
    if (!$updatedServiceEndpoint) {
        Write-Debug "Empty response"
        Write-Error "Failed to convert service connection '$($serviceEndpoint.name)'"
        exit 1
    }
    Write-Host "Successfully converted service connection '$($serviceEndpoint.name)'"
}

Para obtener más información, visite nuestra documentación.

El agente de Pipelines muestra los problemas de uso de recursos de forma más destacada

El pasado octubre agregamos la capacidad de realizar un seguimiento del uso de memoria y espacio en disco por parte del agente de Pipelines.

Para que los clientes sepan, pueden tener restricciones de recursos, como limitaciones de memoria o espacio en disco en su agente, hemos hecho que las restricciones de recursos sean más visibles:

Captura de pantalla de la advertencia memoria limitada y espacio en disco.

Si ve alguno de los mensajes anteriores, esto puede deberse a que una tarea usa más recursos de los que el agente tiene dimensiones, lo que puede provocar que el agente no responda y produzca un error en un trabajo de canalización:

"Hemos dejado de escuchar al agente"

En tales casos, habilite los registros detallados para obtener mensajes de uso de recursos más específicos y realizar un seguimiento de dónde se quedó sin recursos el agente. Si usa un agente autohospedado, asegúrese de que el agente tiene los recursos adecuados.

Instalación fuera de banda del ejecutor de tareas de Node 6

Azure Pipelines proporciona dos versiones de paquetes de agente:

  • Los paquetes vsts-agent-* admiten tareas que usan el nodo 6 para ejecutarse.
  • Los paquetes pipelines-agent-* no admiten tareas que requieren que se ejecute el nodo 6.

Los clientes que crean agentes autohospedados pueden descargarlos desde la página Versiones del agente de canalización. Las versiones de Node incluidas con el agente se usan para ejecutar tareas. Consulte Versiones del ejecutor de nodos.

Después del registro del agente, los agentes instalados desde los paquetes pipelines-agent-* descargarán las versiones de Node que no se incluyen con el agente y no se bloquearán en "Restricciones de tareas" en la configuración de la organización. Esto permite a los clientes usar los paquetes de agente pipelines-agent-* y controlar la instalación de Node 6 con "Restricciones de tareas" en la configuración de la organización.

Aprobación diferida

Las aprobaciones se pueden usar para cerrar sesión en una implementación. Sin embargo, hay situaciones en las que la hora en que se da la aprobación y la hora en que se debe iniciar la implementación no coinciden. Por ejemplo, para la implementación concreta que revise, sabe que es una fuera de límite. Imagine que no puede continuar inmediatamente, sino que debe tener lugar durante la noche.

Para cubrir estos escenarios, hemos agregado la opción de aplazar aprobaciones para canalizaciones YAML. Ahora, puede aprobar una ejecución de canalización y especificar cuándo debe ser efectiva la aprobación.

Captura de pantalla de la aprobación de una ejecución de canalización.

Al seleccionar Aplazar aprobación, puede configurar la hora en que la aprobación sea efectiva.

Captura de pantalla de aplazamiento de la aprobación.

Captura de pantalla de after_approval_deferred.

La aprobación se muestra como diferida en el panel de comprobaciones. Después del tiempo diferido, la aprobación es efectiva.

Captura de pantalla de la aprobación es efectiva.

Comprobaciones y aprobaciones de secuenciación

Con este sprint, puede especificar el orden en el que se ejecutan las aprobaciones y comprobaciones.

Las aprobaciones y comprobaciones permiten controlar las implementaciones en producción. Por ejemplo, puede especificar que solo las canalizaciones que se ejecutan en la main rama de un repositorio pueden usar una conexión de servicio arm de producción. Además, puede requerir la aprobación humana y que el sistema pase una comprobación de rendimiento.

Hasta hoy, todas las aprobaciones y comprobaciones se ejecutaron en paralelo, excepto el bloqueo exclusivo. Esto significa que si el proceso de implementación requiere comprobaciones de rendimiento para pasar antes de que se dé la aprobación manual, no se pudo aplicar esto en Azure Pipelines. Tenía que confiar en las instrucciones de aprobación y la documentación del proceso interno.

Con este sprint, vamos a introducir la secuenciación en aprobaciones y comprobaciones. Ahora hay cinco categorías de aprobaciones y comprobaciones:

  1. Comprobaciones estáticas: control de rama, plantilla requerida y evaluar artefacto
  2. Comprobaciones pre-dinámicas aprobación
  3. Comprobaciones dinámicas: aprobación, invocar la función de Azure, invocar la API REST, horas laborables, consulta de alertas de Azure Monitor
  4. Comprobaciones posteriores a la dinámica Aprobación
  5. Bloqueo exclusivo

Captura de pantalla de agregar comprobación.

El orden también se muestra en la pestaña Aprobaciones y comprobaciones.

Captura de pantalla de la pestaña aprobaciones y comprobaciones.

Dentro de cada categoría, las comprobaciones se ejecutan en paralelo. Es decir, si tiene una comprobación invocar función de Azure y una comprobación de horas laborables, se ejecutan al mismo tiempo.

Captura de pantalla de las comprobaciones de implementación.

Las categorías de comprobación se ejecutan una por una y, si se produce un error, el resto de las comprobaciones no se ejecutan. Esto significa que si tiene una comprobación de control de rama y una aprobación, si se produce un error en el control Rama, también se producirá un error en la aprobación. Por lo tanto, no se enviará ningún correo electrónico necesario.

Captura de pantalla de las comprobaciones de error de implementación.

Puede cerrar la sesión en una implementación después de ejecutar todas las comprobaciones dinámicas, usar una aprobación posterior a las comprobaciones dinámicas o realizar una validación manual antes de continuar con comprobaciones dinámicas mediante una aprobación de comprobaciones pre-dinámicas.

Validar y guardar de forma predeterminada al editar canalizaciones de YAML

Una canalización YAML incorrecta puede dar lugar a un tiempo y esfuerzo desperdiciados. Para mejorar la productividad de la edición de canalizaciones, vamos a cambiar el botón Guardar en el editor para que también realice la validación de YAML.

Captura de pantalla del botón nuevo.

Captura de pantalla de validación y guardado.

Si la canalización tiene errores, podrá guardarla.

Captura de pantalla de la canalización es válida.

Captura de pantalla de los errores detectados.

También hemos mejorado la experiencia De validación , por lo que puede ver los errores en una lista que es más fácil de entender.

Captura de pantalla de la lista de errores.

Azure Repos

Prevención de usuarios no autorizados para configurar la canalización como una directiva de compilación

Prevención de usuarios no autorizados para configurar la canalización como una directiva de compilación

Anteriormente, al agregar una nueva directiva de compilación, podría configurar para ejecutar cualquier canalización desde la lista desplegable (incluidas las canalizaciones para las que no tenía permiso de compilaciones de cola). Del mismo modo, podría editar la directiva de compilación existente incluso si se configuró para ejecutar la canalización para la que no tenía permiso de compilaciones de cola.

Ahora estamos evitando que los usuarios lo hagan. Si se deniega a un usuario el permiso Queue builds para una canalización determinada, esa canalización se mostrará como deshabilitada (atenuada) en la lista desplegable al agregar una nueva directiva de compilación.

Consulte la imagen siguiente en la que se muestra la canalización denominada "Espacio aislado" con el permiso de compilación de cola denegado .

Captura de pantalla de los permisos del espacio aislado.

Consulte la imagen siguiente en la que se muestra la canalización denominada "Sandbox" deshabilitada (atenuada) en la lista desplegable cuando el usuario con permiso de compilaciones de cola denegada está intentando agregar una nueva directiva de compilación.

Captura de pantalla de agregar directiva de compilación.

Cuando la directiva de compilación configurada para ejecutar la canalización denominada "Sandbox" ya existe, el usuario sin permiso queue builds no podrá editar ni ver la directiva de compilación. Este caso se muestra en la siguiente imagen.

Captura de pantalla de la validación de compilación.

Al intentar eliminar esta directiva, se mostrará el cuadro de diálogo emergente que solicita confirmación de eliminación.

Captura de pantalla de confirmación de la eliminación.

Estos cambios también se aplican a las llamadas API que dan lugar a la creación o edición de la directiva de compilación. Cuando cualquiera de estas acciones se ejecuta mediante una identidad de usuario sin permiso de compilación de cola , la llamada devolverá el código de error adecuado y el mensaje de error que indica “TFS.WebApi.Exception: TF401027: Que necesita el permiso QueueBuild en esta canalización para realizar esta acción".

La eliminación de una directiva de compilación realizada a través de la API con un user identity permiso sin compilaciones de cola se realizará correctamente y no habrá ninguna advertencia o prevención (no se realizará ningún cambio en el funcionamiento de la eliminación a través de la API).

Azure Artifacts

La compatibilidad con Crates de Rust está disponible con carácter general

A partir del 16 de febrero de 2024, la compatibilidad con Crates de Rust se convertirá en una característica disponible con carácter general para Azure Artifacts. Los medidores de facturación se activarán mediante el mismo modelo de precios que se aplica a los demás protocolos admitidos.

Compatibilidad de Azure Artifacts con la auditoría de npm

Azure Artifacts ahora admite npm audit comandos y npm audit fix . Esta característica permite a los usuarios analizar y corregir las vulnerabilidades de su proyecto actualizando automáticamente las versiones de paquetes no seguras. Para más información, visite Uso de la auditoría de npm para detectar y corregir vulnerabilidades de paquetes.

Pasos siguientes

Nota:

Estas características se implementarán en las próximas dos a tres semanas.

Vaya a Azure DevOps y eche un vistazo.

Cómo enviar sus comentarios

Nos encantaría escuchar lo que piensas sobre estas características. Use el menú de ayuda para notificar un problema o proporcionar una sugerencia.

Hacer una sugerencia

También puede obtener consejos y sus preguntas respondidas por la comunidad en Stack Overflow.

Gracias,

Demonio