Připojení do Azure pomocí připojení služby Azure Resource Manager

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

Připojení služby Azure Resource Manager můžete použít k připojení k prostředkům Azure prostřednictvím ověřování instančního objektu nebo prostřednictvím identity spravované služby Azure. Pokud používáte připojení služby Resource Manager, můžete kanál použít k nasazení do prostředku Azure, jako je aplikace služby Aplikace Azure Service, aniž byste museli pokaždé ověřovat.

Máte několik možností připojení k Azure pomocí připojení služeb Azure Resource Manageru:

  • Instanční objekt nebo spravovaná identita s federací identit úloh
  • Instanční objekt s tajným kódem
  • Spravovaná identita přiřazená agentem

Další informace o dalších typech připojení a obecné informace o vytváření a používání připojení najdete v tématu Připojení služeb pro sestavení a vydané verze.

Vytvoření připojení služby Azure Resource Manager, které používá federaci identit úloh

Federace identit úloh používá openID Připojení (OIDC) k ověřování s prostředky chráněnými microsoftem Entra bez použití tajných kódů.

Tento přístup doporučujeme použít, pokud jsou pro váš scénář splněné všechny následující položky:

  • Máte roli Vlastník vašeho předplatného Azure.
  • Nepřipojíte se ke službě Azure Stack ani ke cloudu Azure Government.
  • Všechny úlohy rozšíření z Marketplace, které používáte, se aktualizují, aby podporovaly federaci identit úloh.

Vytvoření nového připojení služby FS (Workload Identity Federation Service)

  1. V projektu Azure DevOps přejděte na připojení služby Project Settings>Service.

    Další informace najdete v tématu Otevření nastavení projektu.

  2. Vyberte Nové připojení služby a pak vyberte Azure Resource Manager.

    Snímek obrazovky znázorňující výběr typu připojení služby identit úloh

  3. Vyberte Federaci identit úloh (automaticky).

    Snímek obrazovky znázorňující výběr typu připojení služby identit úloh

  4. Zadejte následující parametry:

    Parametr Popis
    Předplatné Vyberte existující předplatné Azure. Pokud se nezobrazí žádná předplatná Nebo instance Azure, přečtěte si téma Řešení potíží s připojeními služeb Azure Resource Manageru.
    Skupina prostředků Pokud chcete uživatelům povolit přístup ke všem prostředkům definovaným v rámci předplatného, nechte prázdné. Pokud chcete omezit přístup uživatelů k prostředkům, zadejte název skupiny prostředků. Uživatelé pak můžou přistupovat pouze k prostředkům definovaným pro danou skupinu prostředků.
    Název připojení služby Povinný: Název, který použijete pro odkaz na toto připojení služby ve vlastnostech úlohy. Nejedná se o název vašeho předplatného Azure.
  5. Po vytvoření nového připojení služby zkopírujte název připojení a vložte ho do kódu jako hodnotu pro azureSubscription.

  6. K nasazení do konkrétního prostředku Azure potřebuje úloha více dat o daném prostředku. Přejděte k prostředku na webu Azure Portal a zkopírujte data do kódu. Pokud chcete například nasadit webovou aplikaci, zkopírujte název aplikace Aplikace Azure Service a vložte ji do kódu jako hodnotu .WebAppName

Převod existujícího připojení služby Azure Resource Manager na použití federace identit úloh

Existující připojení služby Azure Resource Manager můžete rychle převést tak, aby místo instančního objektu používalo federaci identit úloh. Nástroj pro převod připojení služby v Azure DevOps můžete použít, pokud vaše připojení služby splňuje tyto požadavky:

  • Azure DevOps původně vytvořilo připojení služby. Pokud ručně vytvoříte připojení služby, nemůžete připojení služby převést pomocí nástroje pro převod připojení služby, protože Azure DevOps nemá oprávnění ke změně vlastních přihlašovacích údajů.
  • Připojení služby používá pouze jeden projekt. Připojení mezi projektové služby se nedají převést.

Převod připojení služby:

  1. V projektu Azure DevOps přejděte na připojení služby Project Settings>Service.

    Další informace najdete v tématu Otevření nastavení projektu.

  2. Vyberte připojení služby, které chcete převést na použití identity úlohy.

  3. Vyberte Převést.

    Snímek obrazovky znázorňující výběr možnosti Převést pro federované přihlašovací údaje

    Pokud máte existující přihlašovací údaje instančního objektu s tajným kódem s vypršenou platností, zobrazí se jiná možnost převodu.

    Snímek obrazovky znázorňující možnost převodu na používání federovaných přihlašovacích údajů, pokud máte certifikát s vypršenou platností

  4. Opětovným výběrem možnosti Převést potvrďte, že chcete vytvořit nové připojení služby.

    Převod může trvat několik minut. Pokud chcete připojení vrátit zpět, musíte ho vrátit do sedmi dnů.

Převod několika připojení služby Azure Resource Manager pomocí skriptu

Pomocí skriptu můžete aktualizovat více připojení služeb najednou, aby teď pro ověřování používala federaci identit úloh.

Tento ukázkový skript PowerShellu vyžaduje dva parametry: organizace Azure DevOps (příklad: https://dev.azure.com/fabrikam-tailspin) a projekt Azure DevOps (příklad: Space game web agent). Skript pak načte přidružená připojení služeb pro váš projekt a organizaci Azure DevOps. Zobrazí se výzva k potvrzení, že chcete převést každé přidružené připojení služby, které nepoužívá federaci identit úloh. Pokud to potvrdíte, skript pomocí rozhraní REST API Azure DevOps aktualizuje každé připojení služby, aby teď používal federaci identit úloh. Skript vyžaduje ke spuštění PowerShellu 7.3 nebo novějšího a Azure CLI . Uložte skript do souboru .ps1 a spusťte ho pomocí PowerShellu 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)'"
}

Vrácení existujícího připojení služby Azure Resource Manager, které používá tajný klíč instančního objektu

Převedené automatické připojení služby můžete vrátit se svým tajným kódem sedm dní. Po sedmi dnech ručně vytvořte nový tajný klíč.

Pokud připojení služby vytvoříte a převedete ručně, nemůžete připojení služby vrátit zpět pomocí nástroje pro převod připojení služby, protože Azure DevOps nemá oprávnění ke změně vlastních přihlašovacích údajů.

Vrácení připojení ke službě:

  1. V projektu Azure DevOps přejděte na připojení služby Pipelines>Service.

  2. Vyberte existující připojení služby, které se má vrátit.

  3. Vyberte Vrátit převod na původní schéma.

    Snímek obrazovky znázorňující výběr možnosti vrácení federovaných přihlašovacích údajů

  4. Výběrem možnosti Zpět potvrďte svoji volbu.

Vytvoření připojení služby Azure Resource Manager, které používá tajný klíč instančního objektu

Tento přístup doporučujeme použít, pokud jsou pro váš scénář splněné všechny následující položky:

  • Jste přihlášení jako vlastník organizace Azure Pipelines a předplatné Azure.
  • Pro prostředky Azure, ke kterým uživatelé přistupují prostřednictvím připojení služby, nemusíte dál omezovat oprávnění.
  • Nepřipojíte se ke službě Azure Stack ani ke cloudu Azure Government.
  • Nepřipojujete se z Azure DevOps Serveru 2019 nebo starších verzí Team Foundation Serveru.

Vytvoření připojení služby:

  1. V projektu Azure DevOps přejděte na připojení služby Project Settings>Service.

    V Team Foundation Serveru vyberte ikonu Nastavení v horním řádku nabídek a přejděte na stránku Služby.

    Další informace najdete v tématu Otevření nastavení projektu.

  2. Vyberte Nové připojení služby a pak vyberte Azure Resource Manager.

    Snímek obrazovky znázorňující výběr typu připojení služby

  3. Zadejte nebo vyberte následující parametry:

    Parametr Popis
    Název připojení Povinný: Název, který použijete pro odkaz na toto připojení služby ve vlastnostech úlohy. Nejedná se o název vašeho předplatného Azure.
    Úroveň oboru Vyberte předplatné nebo skupinu pro správu. Skupiny pro správu jsou kontejnery, které pomáhají spravovat přístup, zásady a dodržování předpisů napříč několika předplatnými.
    Předplatné Pokud pro obor vyberete Předplatné , vyberte existující předplatné Azure. Pokud se nezobrazí žádná předplatná Nebo instance Azure, přečtěte si téma Řešení potíží s připojeními služeb Azure Resource Manageru.
    Skupina pro správu Pokud pro obor vyberete skupinu pro správu, vyberte existující skupinu pro správu Azure. Další informace najdete v tématu Vytváření skupin pro správu.
    Skupina prostředků Pokud chcete uživatelům povolit přístup ke všem prostředkům definovaným v rámci předplatného, nechte prázdné. Pokud chcete omezit přístup uživatelů k prostředkům, zadejte název skupiny prostředků. Uživatelé pak můžou přistupovat pouze k prostředkům definovaným pro danou skupinu prostředků.
  4. Po vytvoření nového připojení služby:

    • Pokud používáte klasický editor, vyberte název připojení, který jste přiřadili v nastavení předplatného Azure kanálu.
    • Pokud používáte soubor YAML, zkopírujte název připojení do kódu jako hodnotu pro azureSubscription.
  5. Pokud chcete provést nasazení do konkrétního prostředku Azure, přidejte do úkolu další informace o prostředku:

    • Pokud používáte klasický editor, vyberte data, která chcete přidat k úloze. Vyberte například název služby App Service.
    • Pokud používáte soubor YAML, přejděte k prostředku na webu Azure Portal. Zkopírujte potřebná data a vložte je do kódu úkolu. Pokud chcete například nasadit webovou aplikaci, zkopírujte název aplikace App Service a vložte ji jako hodnotu úlohy WebAppName YAML.

Poznámka:

Když použijete tento přístup, Azure DevOps se připojí k Microsoft Entra ID a vytvoří registraci aplikace s tajným kódem platným po dobu tří měsíců. Po vypršení platnosti připojení ke službě se zobrazí id Microsoft Entra s touto výzvou: Brzy vyprší platnost certifikátu nebo tajného klíče. Vytvořte nový. V tomto scénáři musíte aktualizovat připojení služby.

Pokud chcete aktualizovat připojení služby, na portálu Azure DevOps upravte připojení a pak vyberte Ověřit. Po uložení úpravy je připojení služby platné po dobu dalších tří měsíců.

Místo vytváření tajného kódu doporučujeme používat federaci identit úloh. Pokud používáte federaci identit úloh, nemusíte obměňovat tajné kódy a registrace aplikací udržuje zamýšlený účel. Pokud chcete začít používat federaci identit úloh, přejděte na stránku podrobností připojení služby a vyberte Převést. Připojení služby se převede tak, aby místo tajného kódu používalo federaci identit úloh. Další informace najdete v tématu Převod existujícího připojení služby Azure Resource Manager na použití federace identit úloh.

Další informace najdete v tématu Řešení potíží s připojením ke službě Azure Resource Manager.

Pokud máte potíže s používáním tohoto přístupu (například žádná předplatná zobrazená v rozevíracím seznamu) nebo pokud chcete další omezení uživatelských oprávnění, můžete místo toho použít instanční objekt nebo virtuální počítač s identitou spravované služby.

Vytvoření připojení služby Azure Resource Manager, které používá existující instanční objekt

  1. Pokud chcete použít předdefinovanou sadu přístupových oprávnění a pro tento účel ještě nemáte definovaný instanční objekt, vytvořte pomocí jednoho z těchto kurzů nový instanční objekt:

  2. V projektu Azure DevOps přejděte na připojení služby Project Settings>Service.

    V Team Foundation Serveru vyberte ikonu Nastavení v horním řádku nabídek a přejděte na stránku Služby.

    Další informace najdete v tématu Otevření nastavení projektu.

  3. Vyberte Nové připojení služby a pak vyberte Azure Resource Manager.

    Snímek obrazovky znázorňující výběr typu připojení služby

  4. Vyberte možnost Instanční objekt (ruční) a zadejte podrobnosti instančního objektu.

    Snímek obrazovky znázorňující otevření úplné verze dialogového okna služby

  5. Jako název Připojení ion zadejte zobrazovaný název, který se má použít k odkazování na toto připojení služby.

  6. V části Prostředí vyberte název prostředí (Azure Cloud, Azure Stack nebo Azure Government Cloud).

  7. Pokud azure Cloud nevyberete, zadejte adresu URL prostředí. Pro Azure Stack je adresa URL prostředí něco jako https://management.local.azurestack.external.

  8. U úrovně Rozsah vyberte obor připojení:

    • Pokud vyberete Předplatné, vyberte existující předplatné Azure. Pokud se nezobrazí žádná předplatná Nebo instance Azure, přečtěte si téma Řešení potíží s připojeními služeb Azure Resource Manageru.
    • Pokud vyberete skupinu pro správu, vyberte existující skupinu pro správu Azure. Další informace najdete v tématu Vytváření skupin pro správu.
  9. V dialogovém okně předplatného Azure zadejte následující informace o instančním objektu:

    • Subscription ID
    • Název předplatného
    • ID instančního objektu
    • Buď klíč klienta instančního objektu, nebo pokud jste vybrali Certifikát, zadejte obsah certifikátu i oddíly privátního klíče souboru *.pem .
    • ID tenanta

    Tyto informace získáte stažením a spuštěním skriptu Azure PowerShellu. Po zobrazení výzvy zadejte název předplatného, heslo, roli (volitelné) a typ cloudu, jako je Azure Cloud (výchozí), Azure Stack nebo Cloud Azure Government.

  10. Vyberte Ověřit připojení a ověřte nastavení, která jste zadali.

  11. Po vytvoření nového připojení služby:

    • Pokud používáte připojení služby v uživatelském rozhraní, vyberte název připojení, který jste přiřadili v nastavení předplatného Azure vašeho kanálu.
    • Pokud používáte připojení služby v souboru YAML, zkopírujte název připojení a vložte ho do kódu jako hodnotu pro azureSubscription.
  12. V případě potřeby upravte instanční objekt tak, aby zpřístupnil příslušná oprávnění.

    Další informace o ověřování pomocí instančního objektu najdete v tématu Použití řízení přístupu na základě role ke správě přístupu k prostředkům předplatného Azure nebo blogový příspěvek Automatizace nasazení skupiny prostředků Azure pomocí instančního objektu v sadě Visual Studio.

Další informace najdete v tématu Řešení potíží s připojeními služeb Azure Resource Manageru.

Vytvoření připojení služby Azure Resource Manager k virtuálnímu počítači, který používá identitu spravované služby

Poznámka:

Pokud chcete k ověření použít identitu spravované služby, musíte na virtuálním počítači Azure použít agenta v místním prostředí.

Agenty založené na virtuálních počítačích Azure můžete nakonfigurovat tak, aby používaly identitu spravované služby Azure v MICROSOFT Entra ID. V tomto scénáři použijete identitu přiřazenou systémem (instanční objekt) k udělení přístupu agentů založených na virtuálních počítačích Azure k libovolnému prostředku Azure, který podporuje Microsoft Entra ID, jako je instance služby Azure Key Vault, místo zachování přihlašovacích údajů v Azure DevOps pro připojení.

  1. V projektu Azure DevOps přejděte na připojení služby Project Settings>Service.

    V Team Foundation Serveru vyberte ikonu Nastavení v horním řádku nabídek a přejděte na stránku Služby.

    Další informace najdete v tématu Otevření nastavení projektu.

  2. Vyberte Nové připojení služby a pak vyberte Azure Resource Manager.

    Snímek obrazovky znázorňující výběr typu připojení služby

  3. Vyberte možnost Ověřování spravované identity.

    Snímek obrazovky znázorňující nastavení identity spravované služby

  4. Jako název Připojení ion zadejte zobrazovaný název, který se použije při odkazování na toto připojení služby.

  5. V části Prostředí vyberte název prostředí (Azure Cloud, Azure Stack nebo Azure Government Cloud).

  6. V dialogovém okně připojení zadejte následující hodnoty z vašeho předplatného:

    • Subscription ID
    • Název předplatného
    • ID tenanta
  7. Po vytvoření nového připojení služby:

    • Pokud používáte připojení služby v uživatelském rozhraní, vyberte název připojení, který jste přiřadili v nastavení předplatného Azure vašeho kanálu.
    • Pokud používáte připojení služby v souboru YAML, zkopírujte název připojení do kódu jako hodnotu pro azureSubscription.
  8. Ujistěte se, že má virtuální počítač (agent) příslušná oprávnění.

    Pokud například váš kód potřebuje volat Azure Resource Manager, přiřaďte virtuálnímu počítači příslušnou roli pomocí řízení přístupu na základě role (RBAC) v Microsoft Entra ID.

    Další informace najdete v tématu Jak můžu používat spravované identity pro prostředky Azure? A řízení přístupu na základě role slouží ke správě přístupu k prostředkům předplatného Azure.

Další informace o procesu najdete v tématu Řešení potíží s připojeními služeb Azure Resource Manageru.

Připojení do cloudu Azure Government

Informace o připojení ke cloudu Azure Government najdete v tématu Připojení z Azure Pipelines (Cloud Azure Government).

Připojení ke službě Azure Stack

Informace o připojení ke službě Azure Stack najdete v těchto článcích:

Nápověda a podpora