Share via


Allmän tillgänglighet för arbetsbelastningsidentitetsfederation för Azure Resource Manager-tjänstanslutningar

Vi är glada över att kunna meddela att arbetsbelastningsidentitetsfederationen nu är allmänt tillgänglig i Azure Pipelines! Du kan få en smidig upplevelse utan att behöva hantera hemligheter och certifikat i Azure-tjänstanslutningar.

Med den här uppdateringen förhandsgranskar vi även en ny funktion som en del av vår förbättrade GitHub-integrering med Azure Boards. Nu kan du länka direkt till GitHub-pull-begäranden eller incheckningar. Inga fler växlingar mellan fönster eller kopiera/klistra in. Välj bara den lagringsplats du vill ha, hitta den pull-begäran eller incheckning du behöver och länka den!

Läs viktig information om de här funktionerna.

Allmänt

GitHub Advanced Security för Azure DevOps

Azure-tavlor

Azure-pipelines

Azure-lagringsplatser

Azure Artifacts

Allmänt

Slutligt meddelande om utfasning av alternativa autentiseringsuppgifter

Alternativa autentiseringsuppgifter blev formellt inaktuella i mars 2020, men vissa befintliga användare blev inaktuella med löpande användning av sina befintliga alternativa autentiseringsuppgifter. Från och med januari 2024 har vi helt föråldrat alla alternativa autentiseringsuppgifter. För att undvika eventuella störningar växlar du till någon av de tillgängliga autentiseringsmekanismer som vi tillhandahåller, till exempel personliga åtkomsttoken eller hanterade identiteter.

Azure Devops OAuth självbetjäningshemlighetsrotation

Vart femte år är det viktigt att uppdatera klienthemligheten för din Azure DevOps OAuth-app för att säkerställa kontinuerlig generering av åtkomst- och uppdateringstoken som krävs för att använda Azure DevOps-API:er. När din klienthemlighet närmar sig förfallodatum kan du nu skapa en ny separat, vilket ger ditt team friheten att hantera den utan att förlita sig på kundsupport. Den här flexibiliteten vid schemaläggning av hemlig rotation minimerar den potentiella avbrottstiden för dina kunder som väntar på en ersättning på grund av en hemlighet som har upphört att gälla.

Screenshot of Select a geography.

Leta efter den här nya funktionen på var och en av dina Azure DevOps-appsidor som kan nås via din profil här. Läs mer om det här nya steget i vår Azure DevOps OAuth-guide.

GitHub Advanced Security för Azure DevOps

Kodfragment är nu tillgängliga i aviseringsinformationsvyn

Aviseringsinformationssidan för kodgenomsökning och hemliga genomsökningsaviseringar visar nu kodfragment som markerar en eller flera kodrader där aviseringen inträffade. Om du vill gå till den ursprungliga filen i Azure DevOps-lagringsplatsen klickar du på filnamnet ovanför kodfragmentet.

Screenshot of case-sensitive middleware path.

Trunkerade hemligheter som visas i aviseringsöversikt

De trunkerade, sista sex tecknen i alla identifierade hemligheter visas nu på översiktsskärmen för hemligheters avisering. Den här funktionen är användbar om du har flera hemliga exponeringar av samma hemliga typ, så att du snabbt kan identifiera var specifika hemligheter finns.

Screenshot of secret alerts list.

Fler allvarlighetsgrad för aviseringar har lagts till för kodgenomsökningsaviseringar

Det finns nu nya allvarlighetsgrader för aviseringsresultat från CodeQL-frågorna quality som Error, Warningoch Note allvarlighetsgrad. Varje allvarlighetsgrad för kvalitetsaviseringar har ett eget märke och en egen färg för att ange allvarlighetsgrad för skalning. Du kan också filtrera efter var och en av dessa allvarlighetsgrader, ungefär som lowcritical allvarlighetsgradsskalan för säkerhetsaviseringar.

Screenshot of code scanning alerts list and severity filter.

Länkad Azure-prenumeration krävs för GitHub Advanced Security för Azure DevOps-aktivering

Om du tidigare har aktiverat Avancerad säkerhet för lagringsplatser i en Azure DevOps-organisation utan en länkad Azure-prenumeration kan du märka att Advanced Security automatiskt inaktiverades på dessa lagringsplatser. Om du vill återaktivera Avancerad säkerhet lägger du till en associerad Azure-prenumeration i organisationen. Mer information om hur du lägger till eller ändrar din prenumeration finns i Ändra Azure-prenumeration.

Avancerade API för säkerhet uppdateringar

Olika uppdateringar av advanced API för säkerhet levereras nyligen:

  • API:et FÖR GET-aviseringar stöder nu en ny parameter, , ModifiedSinceför att returnera en inkrementell lista över aviseringar och endast returnera aviseringar som har ändrats sedan det här datumet. Mer information finns i Aviseringar – lista.
  • GET SARIFs API returnerar nu specifika uppladdningsfel som hjälper dig att felsöka eventuella SARIF-uppladdningsfel. Mer information finns i SARIFs.
  • Det finns två nya slutpunkter för att hämta eller uppdatera en organisations eller projektets status för avancerad säkerhet. Båda slutpunkterna returnerar en lista över lagringsplatser med Advanced Security aktiverat. Mer information finns i Org – Enablement or Project – Enablement (Organisationsaktivering eller Projekt – Aktivering).
  • Det finns två nya slutpunkter för att hämta en uppskattning av antalet aktiva incheckningar för en organisation eller ett projekt för att återspegla vad din uppskattade användning av Advanced Security-mätare kan kosta. Mer information finns i Uppskattad användning av organisationsmätare eller uppskattad användning av projektmätare.

Avancerade säkerhetsbehörigheter visas nu permanent

Tidigare skulle de tre avancerade säkerhetsbehörighetsbitarna bara finnas som tilldelningsbara behörigheter per lagringsplats om Advanced Security aktiverades. Nu är dessa behörigheter tillgängliga som standard i fönstret Säkerhetsbehörigheter för lagringsplatser > och kan tilldelas utan att avancerad säkerhet ska aktiveras.

Screenshot of Advanced Security permissions.

Azure-tavlor

Du har två alternativ för att ansluta ditt arbetsobjekt till en GitHub-pull-begäran eller incheckning. Du kan antingen använda AB#-syntaxen i pull-begäran eller länka den direkt från arbetsobjektet. I dag innebär processen att kopiera URL:en för GitHub-pull-begäran och klistra in den när du lägger till en länk. Detta kräver att du öppnar flera fönster och växlar mellan GitHub och Azure DevOps.

I den här sprinten är vi glada över att kunna presentera en förbättrad upplevelse genom att aktivera sökfunktioner när du länkar till en GitHub-pull-begäran eller incheckning. Sök och välj önskad lagringsplats och öka detaljnivån för att hitta och länka till den specifika pull-begäran eller incheckningen. Inget mer behov av flera fönsterändringar och kopiera/klistra in (även om du fortfarande har det alternativet).

Gif to demo add link.

Kommentar

Den här funktionen är endast tillgänglig i förhandsversionen av New Boards Hub.

Om du är intresserad av att få åtkomst till den här funktionen kan du skicka ett e-postmeddelande direkt till oss tillsammans med ditt organisationsnamn (dev.azure.com/{organisationsnamn}).

Nya förbättringar av boards Hub

Med den här versionen har vi introducerat en rad förbättringar av förhandsversionen av New Boards Hub, med fokus på hjälpmedel och sidomfång.

Här är ett exempel på ändringar i sidomflödet som är anpassningsbara upp till 400 % zoom.

Gif to demo new boards hub improvements.

Dessutom har vi distribuerat prestandaförbättringar i arbetsobjektets formulär, tavlor och sidor med kvarvarande uppgifter. Med dessa ändringar kan du förvänta dig att nya tavlor matchar de prestandastandarder som angetts med Gamla tavlor.

Utvecklings- och distributionskontroller

Nu tar vi bort kontrollerna Utveckling och/eller Distribution från arbetsobjektet, beroende på hur ditt projekt har konfigurerats. Du kan till exempel konfigurera dina projektinställningar för att stänga av lagringsplatser och/eller pipelines.

Screenshots of DevOps services.

När du går till arbetsobjektet döljs motsvarande kontroller för utveckling och distribution från formuläret.

Screenshots of related work.

Om du bestämmer dig för att ansluta en GitHub-lagringsplats till Azure Boards visas utvecklingskontrollen för GitHub-lagringsplatser.

Screenshots of development control .

Azure-pipelines

Arbetsbelastningsidentitetsfederation för Azure Resource Manager-tjänstanslutningar är nu allmänt tillgänglig

I september meddelade vi möjligheten att konfigurera Azure-tjänstanslutningar utan att använda en hemlighet. Sedan dess har många kunder antagit den här funktionen och vi är glada över att kunna meddela att den här funktionen nu är allmänt tillgänglig.

Om du inte använder arbetsbelastningsidentitetsfederation ännu kan du dra nytta av problemfria Azure-tjänstanslutningar som inte har hemligheter som upphör att gälla på följande sätt:

Om du vill skapa en ny Azure-tjänstanslutning med hjälp av arbetsbelastningsidentitetsfederation väljer du Arbetsbelastningsidentitetsfederation (automatisk) i azure-tjänstens anslutningsupplevelse:

Screenshot of Workload identity federation (automatic).

Om du vill konvertera en tidigare skapad Azure-tjänstanslutning väljer du åtgärden "Konvertera" när du har valt anslutningen:

Screenshot of Convert action.

Om du vill konvertera flera tjänstanslutningar kan du använda automatisering, till exempel det här PowerShell-skriptet:

#!/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)'"
}

Mer information finns i vår dokumentation.

Pipelines-agenten visar problem med resursutnyttjande mer framträdande

I oktober förra året lade vi till möjligheten att spåra minnes- och diskutrymmesanvändning av Pipelines-agenten.

För att göra kunderna medvetna om att de kan ha resursbegränsningar som minnes- eller diskutrymmesbegränsningar på sin agent, gjorde vi resursbegränsningarna mer synliga:

Screenshot of Limited memory and disk space warning.

Om du ser något av ovanstående meddelanden kan det bero på att en aktivitet använder fler resurser än agenten är dimensionerad för, vilket kan leda till att agenten inte svarar och misslyckas med ett pipelinejobb:

"Vi slutade höra från agenten"

I sådana fall aktiverar du utförliga loggar för att få mer detaljerade resursanvändningsmeddelanden och spåra var din agent fick slut på resurser. Om du använder en lokalt installerad agent kontrollerar du att agenten har tillräckliga resurser.

Out-of-band-installation av Node 6-aktivitetslöpare

Azure Pipelines innehåller två versioner av agentpaket:

  • vsts-agent-* paket stöder uppgifter med hjälp av Node 6 för att köra.
  • pipelines-agent-* paket stöder inte uppgifter som kräver att Node 6 körs.

Kunder som skapar lokalt installerade agenter kan ladda ned dessa från sidan pipelineagentversioner. Nodversionerna som ingår i agenten används för att köra uppgifter. Se Node runner-versioner.

Efter agentregistreringen laddar agenter som är installerade från pipelines-agent-* -paket nu ned Nodversioner som inte ingår i agenten och som inte blockeras under Aktivitetsbegränsningar i organisationens inställningar. Detta gör att kunder kan använda pipelines-agent-* agentpaket och styra installationen av Node 6 med "Uppgiftsbegränsningar" i organisationsinställningarna.

Uppskjutet godkännande

Godkännanden kan användas för att signera en distribution. Det finns dock situationer när tiden när godkännandet ges och den tid då distributionen ska starta inte matchar. För den specifika distribution som du granskar vet du till exempel att den är utanför gränserna. Tänk dig att det inte kan fortsätta omedelbart, snarare bör det äga rum under natten.

För att täcka sådana scenarier har vi lagt till alternativet att skjuta upp godkännanden för YAML-pipelines. Nu kan du godkänna en pipelinekörning och ange när godkännandet ska gälla.

Screenshot of approve a pipeline run.

När du väljer Skjut upp godkännande kan du konfigurera tiden när godkännandet träder i kraft.

Screenshot of Defer approval.

Screenshot of after_approval_deferred.

Godkännandet visas som uppskjutet i kontrollpanelen. Efter den uppskjutna tiden gäller godkännandet.

Screenshot of approval is effective.

Sekvensering av godkännanden och kontroller

Med den här sprinten kan du ange i vilken ordning godkännanden och kontroller körs.

Godkännanden och kontroller kan du styra distributioner till produktion. Du kan till exempel ange att endast pipelines som körs på main en lagringsplatss gren tillåts använda en arm-tjänstanslutning för produktion. Dessutom kan du kräva mänskligt godkännande och att systemet klarar en prestandakontroll.

Fram till idag kördes alla godkännanden och kontroller parallellt, förutom exklusivt lås. Detta innebar att om distributionsprocessen krävde prestandakontroller innan manuellt godkännande gavs, kunde du inte framtvinga detta i Azure Pipelines. Du var tvungen att förlita dig på godkännandeinstruktioner och intern processdokumentation.

Med den här sprinten introducerar vi sekvensering i Godkännanden och kontroller. Det finns nu fem kategorier av Godkännanden och kontroller:

  1. Statiska kontroller: Grenkontroll, Obligatorisk mall och Utvärdera artefakt
  2. Förhandsdynamik kontrollerar godkännande
  3. Dynamiska kontroller: Godkännande, Anropa Azure-funktion, Anropa REST API, Kontorstid, Fråga Azure Monitor-aviseringar
  4. Efterdynadskontroll av godkännande
  5. Exklusivt lås

Screenshot of add check.

Ordningen visas också på fliken Godkännanden och checkar.

Screenshot of approvals and checks tab.

Inom varje kategori körs kontrollerna parallellt. Om du har en Invoke Azure Function-kontroll och en kontorstidskontroll körs de på samma gång.

Screenshot of checks for deploy.

Kontrollera att kategorier körs en efter en och om en misslyckas körs inte resten av kontrollerna. Det innebär att om du har en kontrollkontroll för grenen och ett godkännande misslyckas även godkännandet om grenkontrollen misslyckas. Därför skickas inga onödiga e-postmeddelanden.

Screenshot of checks for deploy fail.

Du kan logga ut på en distribution efter att alla dynamiska kontroller har körts, med hjälp av ett godkännande efter dynamiska kontroller, eller göra en manuell validering innan du fortsätter med dynamiska kontroller med hjälp av en förhands dynamisk kontroll Godkännande.

Verifiera och spara som standard när du redigerar YAML-pipelines

En felaktig YAML-pipeline kan leda till bortkastad tid och ansträngning. För att förbättra produktiviteten för pipelineredigering ändrar vi knappen Spara i redigeraren för att även utföra YAML-validering.

Screenshot of new button.

Screenshot of validate and save.

Om pipelinen har fel kan du fortfarande spara den.

Screenshot of pipeline is valid.

Screenshot of errors detected.

Vi har också förbättrat verifieringsfunktionen så att du kan se felen i en lista som är lättare att förstå.

Screenshot of errors list.

Azure-lagringsplatser

Skydd för obehöriga användare att konfigurera pipeline som en byggprincip

Skydd för obehöriga användare att konfigurera pipeline som en byggprincip

Tidigare, när du har lagt till en ny byggprincip, kunde du konfigurera att köra valfri pipeline från listrutan (inklusive pipelines som du inte hade behörighet att skapa köer för). På samma sätt kan du redigera den befintliga byggprincipen även om den har konfigurerats för att köra pipelinen som du inte har behörighet att skapa köer för.

Nu hindrar vi användare från att göra det. Om en användare nekas behörigheten Queue builds för den angivna pipelinen visas pipelinen som inaktiverad (nedtonad) i listrutan när du lägger till en ny byggprincip.

Se bilden nedan som visar pipelinen med namnet "Sandbox" med behörigheten Queue builds som nekas .

Screenshot of permissions for Sandbox.

Se bilden nedan som visar pipelinen med namnet "Sandbox" inaktiverad (nedtonad) i listrutan när användare med nekad behörighet för köversioner försöker lägga till en ny byggprincip.

Screenshot of add build policy.

När byggprincipen som konfigurerats för att köra pipelinen med namnet "Sandbox" redan finns kommer användaren utan behörighet att skapa kö inte att kunna redigera eller visa byggprincipen. Det här fallet visas på följande bild.

Screenshot of build validation.

När användaren försöker ta bort en sådan princip visas popup-dialogrutan som ber om borttagningsbekräftelse.

Screenshot of confirm deletion.

Dessa ändringar gäller även för alla API-anrop som resulterar i skapande eller redigering av byggprincipen. När någon av dessa åtgärder körs med hjälp av en användaridentitet utan behörighet att skapa köer , misslyckas anropet med att returnera rätt felkod och felmeddelandet om att “TFS.WebApi.Exception: TF401027: Du behöver queueBuild-behörigheten på den här pipelinen för att utföra den här åtgärden."

Borttagning av en byggprincip som görs via API med hjälp av en user identity utan behörighet för köversioner kommer att lyckas och det kommer inte att göras några varningar eller förebyggande åtgärder (inga ändringar i hur borttagningen via API fungerar).

Azure Artifacts

Stöd för Rust Crates är allmänt tillgängligt

Från och med den 16 februari 2024 blir Stöd för Rust Crates en allmänt tillgänglig funktion för Azure Artifacts. Faktureringsmätare aktiveras med samma prismodell som gäller för de andra protokoll som stöds.

Stöd för Azure Artifacts för npm-granskning

Azure Artifacts har nu stöd npm audit för och npm audit fix kommandon. Med den här funktionen kan användarna analysera och åtgärda sina projekts sårbarheter genom att automatiskt uppdatera osäkra paketversioner. Mer information finns i Använda npm-granskning för att identifiera och åtgärda paketsårbarheter.

Nästa steg

Kommentar

Dessa funktioner kommer att distribueras under de kommande två till tre veckorna.

Gå över till Azure DevOps och ta en titt.

Så här ger du feedback

Vi vill gärna höra vad du tycker om de här funktionerna. Använd hjälpmenyn för att rapportera ett problem eller ge ett förslag.

Make a suggestion

Du kan också få råd och dina frågor som besvaras av communityn på Stack Overflow.

Tack,

Dan Hellem