Přístup k Azure DevOps s identitou úloh Microsoft Entra

Služby Azure DevOps

Poznámka:

Tato funkce se zavádí tento týden a další. Pokud tuto funkci ještě v projektu služby Azure DevOps Services nevidíte, vraťte se za několik dní.

Připojení služby Azure DevOps umožňuje, aby se vaše kanály ověřily v Azure DevOps bez tokenů PAT (Personal Access Tokens) pomocí identit úloh Microsoft Entra. Instanční objekty a spravované identity přistupují k Azure DevOps prostřednictvím federace identit zátěžových aplikací, která eliminuje nutnost spravovat a obměňovat tajné kódy.

Výhody

  • PAT-free ověřování: Eliminujte potřebu vytvářet, ukládat a obnovovat osobní přístupové tokeny.
  • Nejnižší oprávnění: Místo oprávnění účtu sdílené služby sestavení používejte oprávnění pro jednotlivé kanály.
  • Vylepšené zabezpečení: Používejte federované přihlašovací údaje Entra s automatickou obměnou tokeny.
  • Přístup mezi organizacemi: Přistupujte k prostředkům Azure DevOps v různých organizacích pomocí jediného připojení ke službě.
  • Audit trail: Všechny pokusy o ověření se protokolují v protokolech auditu Azure DevOps.

Podporované scénáře

Připojení služby Azure DevOps podporuje tyto scénáře:

  • Repository resources: Podívejte se na kód z úložišť v různých organizacích Azure DevOps.
  • Kanály Artifact: Přístup ke kanálům Azure Artifacts (NuGet, npm, Maven, Python, Cargo, Conda) napříč organizacemi bez použití PAT.
  • volání REST API: Ověřte se do Azure DevOps rozhraní REST API z inline skriptů.
  • publikování Rozšíření: Publikujte rozšíření na Visual Studio Marketplace

Předpoklady

Pokud chcete vytvořit připojení služby Azure DevOps, potřebujete:

Krok 1: Vytvoření připojení služby ve stejné organizaci

Pokud je hlavní služba ve stejné organizaci Azure DevOps jako připojení služby:

Přidejte principál služby do vaší organizace

  1. Ve vaší organizaci Azure DevOps přejděte na Nastavení uspořádání>Uživatelé.

  2. Vyberte Přidat uživatele.

  3. Zadejte podrobnosti pro manažera služby:

    • Název: Název služebního objektu nebo spravované identity nebo ID objektu
    • Úroveň přístupu: Vyberte odpovídající úroveň přístupu. Použijte Basic pro standardní přístup
  4. Přiřaďte služebního principála nebo spravovanou identitu projektu, ve kterém budete vytvářet připojení služby, například přidáním do skupiny Čtenáři.

  5. Potvrďte volbu Přidat.

  6. Přiřaďte další oprávnění na úrovni prostředků ke služebnímu účtu nebo spravované identitě.

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

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

  2. Vyberte Nové připojení služby.

  3. Jako typ připojení služby vyberte Azure DevOps.

  4. Vyplňte formulář:

    • Identita: Vyberte instanční objekt, který jste přidali do vaší organizace.
    • Název připojení služby: Zadejte popisný název připojení (například my-azdo-connection)
    • Popis (volitelné): Přidání podrobností o účelu připojení
  5. Výběrem možnosti Uložit vytvořte připojení služby.

Vytvořte připojení služby pro přístup mezi různými organizacemi

Pro přístup k prostředkům v jiné organizaci Azure DevOps, která je připojena ke stejnému tenantovi Entra ID:

  1. Při vytváření připojení služby postupujte podle pokynů v části Vytvoření připojení služby ve stejné organizaci, ale při vytváření připojení služby vyberte Jinou organizaci .

  2. Zadejte název cílové Azure DevOps organizace.

  3. Zástupce služby musíte také přidat jako uživatele v cílové organizaci.

Použijte připojení služby v kanálu.

Prozkoumejte repozitáře od různých organizací

pool:
  vmImage: 'ubuntu-latest'

resources:
  repositories:
  - repository: external-repo
    type: git
    endpoint: my-azdo-connection
    name: 'external-project/external-repo'
    ref: 'refs/heads/main'

steps:
- checkout: self
- checkout: external-repo

Odkaz na šablonu z jiné organizace

resources:
  repositories:
    - repository: templates 
      type: git
      endpoint: my-azdo-connection
      name: 'external-project/external-repo'
      ref: "refs/heads/main"    
      
steps:
- template: azdosc-template.yml@templates

Přístup k informačním kanálům artefaktů

Použijte služební připojení pro úkoly ověřování artefaktů.

- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: 'my-azdo-connection'

- task: DotNetCoreCLI@2
  inputs:
    command: 'restore'
    projects: '**/*.csproj'

Volání Azure DevOps ze skriptu

- task: AzureCLI@3
  displayName: Secret-less
  inputs:
    connectionType: 'azureDevOps'
    azureDevOpsServiceConnection: 'my-azdo-connection'
    scriptType: 'pscore'
    scriptLocation: 'inlineScript'
    inlineScript: |
      az rest --method get `
              --url "https://status.dev.azure.com/_apis/status/health?api-version=7.1-preview.1" `
              --resource 499b84ac-1321-427f-aa17-267ca6975798 `
              --query "sort_by(services[?id=='Pipelines'].geographies | [], &name)" `
              -o table

      az devops configure -l

      az devops project list --query "value[].{Name:name, Id:id}" `
                            -o table

      az pipelines pool list --query "[].{Id:id, Name:name}" `
                            -o table

- task: AzureCLI@3
  displayName: Use Entra access token
  inputs:
    connectionType: 'azureDevOps'
    azureDevOpsServiceConnection: 'my-azdo-connection'
    scriptType: 'pscore'
    scriptLocation: 'inlineScript'
    inlineScript: |
      # Get access token for Azure DevOps
      $token = az account get-access-token --resource "499b84ac-1321-427f-aa17-267ca6975798" `
                                           --query "accessToken" `
                                           --output tsv
      
      # Use token in REST API call
      $headers = @{
        Authorization = "Bearer $token"
        "Content-Type" = "application/json"
      }
      
      $body = @{
        name = "Test Build"
      } | ConvertTo-Json
      
      Invoke-RestMethod -Uri "$(System.CollectionUri)$(System.TeamProject)/_apis/build/definitions?api-version=7.1" `
                        -Method POST `
                        -Headers $headers `
                        -Body $body

Úloha AzureCLI@3 používá Azure DevOps CLI, která je předinstalovaná na agentech hostovaných Microsoft. U agentů v místním prostředí potřebujete Azure CLI s rozšířením azure-devops. azure-devops Pokud rozšíření není nainstalované, úloha AzureCLI@3 ji nainstaluje za běhu.

Osvědčené postupy zabezpečení

  • Minimální oprávnění: Přiřaďte servisnímu účtu pouze ta oprávnění, která potřebuje pro vaše konkrétní úlohy v kanálu.
  • Přístup k auditu: Pravidelně kontrolujte protokoly auditu a monitorujte využití připojení služby.
  • Použití oboru: K omezení sdílených oprávnění použijte samostatná připojení služeb pro různé projekty nebo organizace.

Troubleshooting

Návod

Pro lepší zabezpečení přiřaďte principálu služby jenom potřebná oprávnění, pravidelně kontrolujte protokoly auditu a pro různé projekty nebo organizace používejte samostatná připojení.

Vytvoření připojení služby se nezdařilo.

Příčina: Služební principal není přidaný do vaší organizace nebo nemáte požadovaná oprávnění.

Oprava :

  • Zkontrolujte, že jste aplikační objekt přidali jako uživatele vaší organizaci.
  • Zkontrolujte, jestli máte příslušná oprávnění k vytváření připojení služeb.
  • Ujistěte se, že má služební principál požadovanou úroveň přístupu v organizaci.

Potrubí nelze ověřit

Příčina: Název připojení ke službě neodpovídá odkazu YAML nebo služební účet nemá oprávnění k cílovým prostředkům.

Oprava :

  • Zkontrolujte, jestli název připojení služby ve vašem kanálu YAML odpovídá názvu, který jste vytvořili.
  • Zkontrolujte, jestli má instanční objekt příslušná oprávnění pro prostředky, ke kterým přistupujete.
  • Zkontrolujte auditní protokoly Azure DevOps, zda nedošlo k chybám při ověřování.
  • Odkaz na nejčastější dotazy k aplikačním objektům a spravovaným identitám.
  • V případě statusových kódů Microsoft Entra AADSTS si projděte seznam zpráv o chybách.

Přístup mezi organizacemi nefunguje

Příčina: Instanční objekt služby jste nepřidali jako uživatele v obou organizacích, nebo jste chybně napsali název cílové organizace.

Oprava :

  • Přidejte servisní účet jako uživatele v obou organizacích.
  • Zkontrolujte, jestli je název cílové organizace správně napsaný v konfiguraci připojení služby.
  • Zkontrolujte, jestli má instanční objekt požadovaná oprávnění v cílové organizaci.

Běžné chybové zprávy

Zpráva Význam a zmírnění rizik
CHYBA: TF401444: Přihlaste se alespoň jednou jako 72f988bf-86f1-41af-91ab-2d7cd011db47\72f988bf-86f1-4 1af-91ab-2d7cd011db47\115c3ab3-943b-4e0c-96ed-1a1763fbaa44 ve webovém prohlížeči pro povolení přístupu ke službě. Zkontrolujte, že jste aplikační objekt přidali jako uživatele vaší organizaci.
Spravovaná identita / servisní principál <sp/msi name> nemá přístup k organizaci Azure DevOps <org>. Ujistěte se, že byla identita přidána do organizace. Viz https://aka.ms/azdosc#prerequisites. Přidejte hlavní název služby jako uživatele do cílové organizace a přiřaďte jej k požadovanému projektu.
Nemáte oprávnění k vybrané identitě. Připojení služby se uloží jako koncept. Pokud chcete konfiguraci dokončit, obraťte se na vlastníka identity a vytvořte federované přihlašovací údaje na portálu Azure pomocí níže uvedených identifikátorů vystavitele a subjektu. Přihlášený uživatel nemá dostatečná oprávnění k vytvoření federovaných přihlašovacích údajů. Postupujte podle zobrazených pokynů a vytvořte federované přihlašovací údaje přímo na identitě.
VS800075: Projekt s ID vstfs:///Classification/TeamProject/00000000-0000-00000000-000000000000 neexistuje nebo k němu nemáte oprávnění. Identita připojení služby se do projektu nepřidá. Přejděte na stránku > s podrobnostmi o připojení služby Zobrazit přístup v aktuální organizaci> Členem > Vyberte skupinu, do které chcete přidat identitu, například do Readers skupiny. Případně přejděte do nastavení organizace>Uživatelé>. Identita použitá pro připojení > ke službě Spravovat přístup> a vyberte projekty, ke kterým identita potřebuje přístup.

Microsoft Entra ID chybové zprávy

Následující tabulka uvádí běžné kódy chyb Microsoft Entra ID a možné problémy související s připojením služby identit úloh:

Zpráva Možný problém
AADSTS700016: Aplikace s identifikátorem **** nebyla nalezena. Identita použitá pro připojení služby již neexistuje, pravděpodobně byla odebrána z připojení služby nebo je nesprávně nakonfigurovaná. Pokud připojení služby konfigurujete ručně s předem vytvořenou identitou, ujistěte se, že appID/clientId je správně nakonfigurovaná.
AADSTS7000215: Byl poskytnut neplatný tajný klíč klienta. Používáte připojení služby s tajným kódem, jehož platnost vypršela. Převeďte připojení služby na federaci identit úloh a nahraďte tajný kód s vypršenou platností federovanými přihlašovacími údaji.
AADSTS700024: Přihlašovací prohlášení klienta není v platném časovém rozsahu. Pokud k chybě dojde přibližně po 1 hodině, použijte místo toho připojení služby k federaci identit úloh a spravované identitě . Tokeny spravované identity mají životnost přibližně 24 hodin.
Pokud k chybě dojde před 1 hodinou, ale po 10 minutách, přesuňte příkazy, které (implicitně) požadují přístupový token, například přístup k úložišti Azure na začátek skriptu. Přístupový token se ukládá do mezipaměti pro další příkazy.
AADSTS70021: Pro předložené tvrzení nebyl nalezen žádný odpovídající záznam federované identity. Vystavitel kontrolního výrazu: https://app.vstoken.visualstudio.com. Nebyly vytvořeny žádné federované přihlašovací údaje nebo adresa URL vystavitele není správná. Správná adresa URL vystavitele má formát https://login.microsoftonline.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Adresu URL vystavitele můžete opravit úpravou a uložením připojení služby. Pokud Azure DevOps vaši identitu nevytvořil, musíte vystavitele aktualizovat ručně. Správného vydavatele najdete v editačním dialogu připojení služby nebo v odpovědi, pokud používáte REST API.
AADSTS70021: Pro předložené tvrzení nebyl nalezen žádný odpovídající záznam federované identity. Vystavitel kontrolního výrazu: https://login.microsoftonline.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Předmět kontrolního výrazu: sc://<org>/<project>/<service-connection>. Adresa URL vystavitele nebo předmět federace se neshoduje. Organizace nebo projekt Azure DevOps byly přejmenovány nebo bylo přejmenováno ručně vytvořené připojení služby, aniž by se aktualizoval předmět federace u identity.
AADSTS700211: Nebyl nalezen žádný odpovídající záznam federované identity pro předloženého vydavatele tvrzení Nebyla vytvořena žádná federovaná pověření nebo adresa URL poskytovatele není správná.
AADSTS700213: Nebyl nalezen odpovídající záznam federované identity pro uvedené subjektové tvrzení. Nebyly vytvořeny žádné federované přihlašovací údaje nebo subjekt není správný.
AADSTS700223 Federace identit úloh je v tenantovi Microsoft Entra omezená nebo zakázaná. V tomto scénáři může být možné použít spravovanou identitu pro federaci. Další informace se nachází v tématu Identita úlohy se spravovanou identitou.
AADSTS70025: Klientská aplikace nemá nakonfigurované přihlašovací údaje federované identity Ujistěte se, že jsou federované přihlašovací údaje nakonfigurované pro registraci aplikace nebo spravovanou identitu.
Microsoft Entra zamítl token vydaný Azure DevOps s chybovým kódem AADSTS700238 Federace identit úloh je omezená na tenanta Microsoft Entra. Vystavitel vaší organizace (https://login.microsoftonline.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) nesmí používat federaci identit úloh s typem identity úlohy (registrace aplikace nebo spravovaná identita), kterou používáte. Požádejte správce tenanta Microsoft Entra nebo správcovský tým, aby povolili federaci pracovních identit pro vaši organizaci Azure DevOps.
AADSTS70052: Identita musí být řízená identita, aplikace pro jednoho tenanta nebo účet služby. Vydavatel Microsoft Entra v současné době nepodporuje registrace víceklientských aplikací s signInAudience: AzureADMultipleOrgs. Používejte signInAudience: AzureADMyOrg a rozdělujte přístup k více tenantům, abyste místo toho používali různá připojení služeb pro každého tenanta. Pokud jste závislí na operacích ARM, které přistupují k více tenantům v jednom požadavku (například mezi-tenant peering virtuálních sítí), můžete kontaktovat podporu, aby vaše organizace Azure DevOps místo toho používala vystavitele Azure DevOps.
AADSTS900382: Důvěrný klient není podporován napříč cloudy. Některé suverénní cloudy blokují federaci identit úloh.

Zobrazuje se vám chyba AADSTS, která není uvedená výše? Zkontrolujte kódy chyb ověřování a autorizace Microsoft Entra.

Další kroky