Condividi tramite


Connettersi ad Azure con una connessione al servizio Azure Resource Manager

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

Nota

Verrà implementata la nuova esperienza di creazione della connessione al servizio di Azure. La ricezione della nuova funzionalità nella tua organizzazione dipende da vari fattori e potresti ancora vedere la vecchia esperienza utente.

Una connessione al servizio Azure Resource Manager consente di connettersi a risorse di Azure come Azure Key Vault dalla pipeline. Questa connessione consente di usare una pipeline per distribuire le risorse di Azure, ad esempio un'app del servizio app Azure, senza dover eseguire l'autenticazione ogni volta.

Sono disponibili più opzioni di autenticazione per la connessione ad Azure con una connessione al servizio Azure Resource Manager. Si consiglia di utilizzare la federazione delle identità dei carichi di lavoro con una registrazione dell'app o un'identità gestita. La federazione delle identità del carico di lavoro elimina la necessità di dati riservati e della loro gestione.

Opzioni consigliate:

Nota

Esistono altre opzioni di autenticazione della connessione al servizio Azure Resource Manager che non usano la federazione delle identità del carico di lavoro. Queste opzioni sono disponibili per la compatibilità con le versioni precedenti e i casi limite e non sono consigliate. Se si configura una connessione al servizio per la prima volta, usa la federazione di identità per carico di lavoro. Prima, se si dispone di una connessione di servizio esistente, provare a convertire la connessione di servizio per usare la federazione dell'identità del carico di lavoro.

Creare una registrazione dell'app con federazione dell'identità per il carico di lavoro (automatica)

È possibile usare questo approccio se tutti gli elementi seguenti sono veri per lo scenario:

  • Hai il ruolo di proprietario per la tua sottoscrizione di Azure.
  • Non ci si connette ad Azure Stack o agli ambienti di Azure US Government .
  • Tutte le attività delle estensioni del Marketplace usate vengono aggiornate per supportare la federazione delle identità del carico di lavoro.

Con questa selezione, Azure DevOps esegue automaticamente query per la sottoscrizione, il gruppo di gestione o l'area di lavoro di Machine Learning a cui connettersi e crea una federazione dell'identità del carico di lavoro per l'autenticazione.

  1. Nel progetto Azure DevOps passare a Impostazioni progetto>Connessioni del servizio.

    Per altre informazioni, vedere Aprire le impostazioni del progetto.

  2. Selezionare Nuova connessione al servizio, quindi selezionare Azure Resource Manager e Avanti.

    Screenshot che mostra la scelta della selezione di Azure Resource Manager.

  3. Selezionare Registrazione app (automatica) con le credenziali Federazione delle identità del carico di lavoro.

    Screenshot della selezione del metodo di autenticazione (automatizzato) della registrazione dell'app con l'identità della workload selezionata.

  4. Selezionare un livello ambito. Selezionare Sottoscrizione, Gruppo di gestione o Area di lavoro di Machine Learning. I gruppi di gestione sono contenitori che consentono di gestire l'accesso, i criteri e la conformità tra più sottoscrizioni. Un'area di lavoro di Machine Learning consente di creare artefatti di Machine Learning.

    • Per l'ambito della sottoscrizione, immettere i seguenti parametri:

      Parametro Descrizione
      Abbonamento Obbligatorio. Selezionare l’abbonamento di Azure.
      Gruppo di risorse Facoltativo. Selezionare il gruppo di risorse di Azure.
    • Per l'ambito del gruppo di gestione selezionare il gruppo di gestione di Azure.

    • Per l'ambito dell'area di lavoro di Machine Learning , immettere i parametri seguenti:

      Parametro Descrizione
      Abbonamento Obbligatorio. Selezionare l’abbonamento di Azure.
      Gruppo di risorse Obbligatorio. Selezionare il gruppo di risorse contenente l'area di lavoro.
      Area di lavoro di Machine Learning Obbligatorio. Selezionare l'area di lavoro di Azure Machine Learning.
  5. Immettere un nome di connessione al servizio.

  6. Facoltativamente, immettere una descrizione per la connessione al servizio.

  7. Selezionare Concedi l'autorizzazione di accesso a tutte le pipeline per consentire a tutte le pipeline di usare questa connessione al servizio. Se non si seleziona questa opzione, è necessario concedere manualmente l'accesso a ogni pipeline che usa questa connessione al servizio.

  8. Selezionare Salva.

Creare una connessione al servizio per un'identità gestita assegnata dall'utente esistente

Usare questa opzione per creare automaticamente le credenziali di identità del carico di lavoro per un'identità gestita assegnata dall'utente esistente. Prima di iniziare, è necessario avere un'identità gestita assegnata dall'utente già esistente.

  1. Nel progetto Azure DevOps passare a Impostazioni progetto>Connessioni del servizio.

    Per altre informazioni, vedere Aprire le impostazioni del progetto.

  2. Selezionare Nuova connessione al servizio, quindi selezionare Azure Resource Manager e Avanti.

    Screenshot che mostra la scelta della selezione di Azure Resource Manager.

  3. Selezionare Identità gestita.

    Screenshot che mostra la scelta della selezione dell'identità gestita di Azure Resource Manager con identità assegnata dall'utente.

  4. In Passaggio 1: Dettagli identità gestita:

    1. Selezionare Sottoscrizione per Identità gestita. Si tratta della sottoscrizione di Azure che contiene l'identità gestita.
    2. Selezionare Gruppo di risorse per Identità gestita. Si tratta del gruppo di risorse che contiene l'identità gestita.
    3. Selezionare Identità gestita. Si tratta dell'identità gestita all'interno del gruppo di risorse che verrà usata per accedere alle risorse.
  5. Nel passaggio 2: Ambito di Azure:

    1. Selezionare il livello di ambito. Selezionare Sottoscrizione, Gruppo di gestione o Area di lavoro di Machine Learning. I gruppi di gestione sono contenitori che consentono di gestire l'accesso, i criteri e la conformità tra più sottoscrizioni. Un'area di lavoro di Machine Learning consente di creare artefatti di Machine Learning.

      • Per il campo di Sottoscrizione, inserire i seguenti parametri.

        Parametro Descrizione
        Sottoscrizione per la connessione al servizio Obbligatorio. Selezionare il nome della sottoscrizione di Azure a cui l'identità gestita avrà accesso.
        Gruppo di risorse per la connessione al servizio Facoltativo. Inserisci per limitare l'accesso all'identità gestita a un gruppo di risorse.
      • Per l'ambito del gruppo di gestione immettere i parametri seguenti:

        Parametro Descrizione
        Gruppo di gestione Obbligatorio. Selezionare il gruppo di gestione di Azure.
      • Per l'ambito dell'area di lavoro di Machine Learning , immettere i parametri seguenti:

        Parametro Descrizione
        Abbonamento Obbligatorio. Selezionare il nome della sottoscrizione di Azure.
        Gruppo di risorse per la connessione al servizio Facoltativo. Selezionare il gruppo di risorse contenente l'area di lavoro.
        ML Workspace area di lavoro Obbligatorio. Immettere il nome dell'area di lavoro di Azure Machine Learning esistente.
    2. Nella sezione Passaggio 3: Dettagli connessione al servizio, inserire o selezionare i parametri seguenti:

      Parametro Descrizione
      Nome connessione del servizio Obbligatorio. Nome usato per fare riferimento a questa connessione al servizio nelle proprietà dell'attività. Non il nome dell'abbonamento di Azure.
      Informazioni di riferimento sulla gestione dei servizi Facoltativo. Informazioni di contesto da un database ITSM.
      Descrizione Facoltativo. Immettere una descrizione della connessione al servizio.
    3. Nella sezione Sicurezza selezionare Concedi l'autorizzazione di accesso a tutte le pipeline per consentire a tutte le pipeline di usare questa connessione al servizio. Se non si seleziona questa opzione, è necessario concedere manualmente l'accesso a ogni pipeline che usa questa connessione al servizio.

    4. Selezionare Salva per convalidare e creare la connessione al servizio.

Convertire una connessione al servizio esistente per usare la federazione delle identità per i carichi di lavoro

È possibile convertire rapidamente una connessione al servizio Azure Resource Manager esistente per usare la federazione dell'identità del carico di lavoro per l'autenticazione anziché un segreto. È possibile usare lo strumento di conversione della connessione al servizio in Azure DevOps se la connessione al servizio soddisfa questi requisiti:

  • Azure DevOps ha originariamente creato la connessione al servizio. Se si crea manualmente la connessione al servizio, non è possibile convertire la connessione al servizio usando lo strumento di conversione della connessione al servizio perché Azure DevOps non dispone delle autorizzazioni per modificare le proprie credenziali.
  • Solo un progetto usa la connessione al servizio. Non è possibile convertire le connessioni al servizio tra progetti.

Per convertire una connessione al servizio:

  1. Nel progetto Azure DevOps passare a Impostazioni progetto>Connessioni del servizio.

    Per altre informazioni, vedere Aprire le impostazioni del progetto.

  2. Seleziona la connessione di servizio che desideri convertire per utilizzare l'identità di carico di lavoro.

  3. Selezionare Converti.

    Screenshot che mostra la selezione della conversione per le credenziali federate.

    Se si dispone di credenziali esistenti con un segreto scaduto, viene visualizzata un'opzione diversa da convertire.

    Screenshot che mostra l'opzione per la conversione per l'uso delle credenziali federate quando si dispone di un certificato scaduto.

  4. Selezionare di nuovo Converti per confermare di voler creare una nuova connessione al servizio.

    La conversione potrebbe richiedere alcuni minuti. Se si desidera ripristinare la connessione, è necessario ripristinarla entro sette giorni.

Convertire diverse connessioni al servizio con uno script

Utilizzare uno script per aggiornare automaticamente più connessioni di servizio contemporaneamente per utilizzare la federazione delle identità di carico di lavoro per l'autenticazione.

Questo script di PowerShell di esempio richiede due parametri: l'organizzazione Azure DevOps (ad esempio) https://dev.azure.com/fabrikam-tailspine il progetto Azure DevOps (ad esempio: Space game web agent). Lo script recupera quindi le connessioni al servizio associate per il progetto e l'organizzazione di Azure DevOps.

Quando si convertono le connessioni di servizio per utilizzare la federazione dell'identità del carico di lavoro, viene chiesto di confermare l'aggiornamento per ogni connessione che non la utilizza già. Dopo la conferma, lo script aggiorna queste connessioni al servizio tramite l'API REST di Azure DevOps per usare la federazione delle identità del carico di lavoro.

Lo script richiede l'esecuzione di PowerShell 7.3 o versione successiva e dell'interfaccia della riga di comando di Azure. Salvare lo script in un .ps1 file ed eseguirlo usando PowerShell 7.

#!/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" # application id of Azure DevOps 
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)'"
}

Reverti una connessione di servizio esistente che usa un segreto

È possibile ripristinare una connessione automatica del servizio convertita con il relativo segreto per sette giorni. Dopo sette giorni, creare manualmente un nuovo segreto.

Se si crea e si converte manualmente la connessione al servizio, non è possibile ripristinare la connessione al servizio usando lo strumento di conversione della connessione al servizio perché Azure DevOps non dispone delle autorizzazioni per modificare le proprie credenziali.

Per ripristinare una connessione al servizio:

  1. Nel progetto Azure DevOps, vai a Pipelines>Connessioni al servizio.

  2. Selezionare una connessione al servizio esistente da ripristinare.

  3. Selezionare Ripristina conversione nello schema originale.

    Screenshot che mostra la selezione di ripristino per una credenziale federata.

  4. Selezionare Di nuovo Ripristina per confermare la scelta.

Creare una connessione al servizio che utilizza un principale del servizio esistente

Se si vuole usare un set predefinito di autorizzazioni di accesso e non si dispone già di un'entità servizio definita a questo scopo, seguire una di queste esercitazioni per creare una nuova entità servizio:

Per creare una connessione al servizio che usa un principal del servizio esistente:

  1. Nel progetto Azure DevOps passare a Impostazioni progetto>Connessioni del servizio.

    Per altre informazioni, vedere Aprire le impostazioni del progetto.

  2. Selezionare Nuova connessione al servizio, quindi selezionare Azure Resource Manager e Avanti.

    Screenshot che mostra la selezione di Azure Resource Manager.

  3. Selezionare Entità servizio (manuale) e Avanti.

    Screenshot che mostra la selezione di un metodo di autenticazione dell'entità servizio (manuale).

  4. Nella finestra di dialogo Nuova connessione al servizio di Azure selezionare Ambiente. Se si seleziona Azure Stack, immettere l'URL dell'ambiente, che è simile a https://management.local.azurestack.external.

  5. Selezionare il livello di ambito. Selezionare Sottoscrizione o Gruppo di gestione. I gruppi di gestione sono contenitori che consentono di gestire l'accesso, i criteri e la conformità tra più sottoscrizioni.

    • Per l'ambito Sottoscrizione, immettere i parametri seguenti:

      Parametro Descrizione
      ID sottoscrizione Obbligatorio. Immettere l'ID sottoscrizione di Azure.
      Nome sottoscrizione Obbligatorio. Immettere il nome della sottoscrizione di Azure.
    • Per l'ambito del gruppo di gestione immettere i parametri seguenti:

      Parametro Descrizione
      ID gruppo di gestione Obbligatorio. Immettere l'ID del gruppo di gestione di Azure.
      Nome gruppo di gestione Obbligatorio. Immettere il nome del gruppo di gestione di Azure.
  6. Nella sezione Autenticazione immettere o selezionare i parametri seguenti:

    Parametro Descrizione
    ID entità servizio Obbligatorio. Immettere l'ID principale del servizio.
    credenziali Selezionare Chiave dell'entità servizio o Certificato. Se è stata selezionata la chiave dell'entità servizio, immettere la chiave (password). Se è stato selezionato Certificato, immettere il certificato.
    Tenant Id Obbligatorio. Immetti l'ID tenant.
    Verificare Selezionare questa opzione per convalidare le impostazioni immesse.
  7. Nella sezione Dettagli immettere i parametri seguenti:

    Parametro Descrizione
    Nome connessione Obbligatorio. Nome usato per fare riferimento a questa connessione al servizio nelle proprietà dell'attività. Non il nome dell'abbonamento di Azure.
    Descrizione Facoltativo. Immettere una descrizione della connessione al servizio.
    Sicurezza Selezionare Concedi l'autorizzazione di accesso a tutte le pipeline per consentire a tutte le pipeline di usare questa connessione al servizio. Se non si seleziona questa opzione, è necessario concedere manualmente l'accesso a ogni pipeline che usa questa connessione al servizio.
  8. Selezionare Verifica e salva per convalidare e creare la connessione al servizio.

Assistenza e supporto