Azure-DevOps-Pipeline benötigt Azure-Zugriff? Azure DevOps Federation konfigurieren

Veröffentlicht am:

Eine Azure-DevOps-Pipeline benötigt Azure-Zugriff, ohne ein Client-Secret oder einen privaten Zertifikatschlüssel zu speichern.

Verwende eine Azure-Resource-Manager-Dienstverbindung mit Workload Identity Federation:

Pipeline fordert ein kurzlebiges Token an
-> Microsoft Entra überprüft die föderierte Vertrauensbeziehung
-> Microsoft Entra stellt ein Azure-Zugriffstoken aus
-> Pipeline greift auf ihre autorisierten Ressourcen zu

Demo vorbereiten

Erstelle oder wähle eine dedizierte Ressourcengruppe:

rg-azdo-federation-demo

Die Demo-Verbindung erhält nur Reader-Zugriff auf diese Ressourcengruppe.

Azure-Ressourcengruppe für die Federation-Demo

Du benötigst Berechtigungen zum Erstellen von Dienstverbindungen im Azure-DevOps-Projekt, der Microsoft-Entra-Identität und einer Azure-Rollenzuweisung.

Dienstverbindung erstellen

Öffne im Azure-DevOps-Projekt:

Project settings
> Pipelines
> Service connections
> New service connection

Azure DevOps Service connections

Wähle Azure Resource Manager und anschließend:

App registration (automatic)
Credential: Workload identity federation

Die genaue Bezeichnung kann leicht abweichen. Als Authentifizierungsmethode muss Workload Identity Federation und nicht ein Secret ausgewählt sein.

Konfiguriere:

Scope level: Subscription
Subscription: <Demo-Abonnement>
Resource group: rg-azdo-federation-demo
Service connection name: azure-wif-demo

Aktiviere nicht Grant access permission to all pipelines. Autorisiere später nur die Demo-Pipeline.

Auf die Demo-Ressourcengruppe begrenzte Dienstverbindung

Wähle Save.

Azure-Berechtigungen prüfen

Öffne die Demo-Ressourcengruppe:

Access control (IAM)
> Role assignments

Prüfe, ob der für die Verbindung erstellte Dienstprinzipal Folgendes besitzt:

Role: Reader
Scope: rg-azdo-federation-demo

Ersetze für diese Demo jede automatisch zugewiesene umfassendere Rolle durch Reader.

Reader-Rolle für die Azure-DevOps-Workload-Identität

Prüfpipeline erstellen

Füge azure-pipelines.yml zum Repository hinzu:

trigger: none

pool:
  vmImage: ubuntu-latest

steps:
  - task: AzureCLI@2
    displayName: Verify federated Azure access
    inputs:
      azureSubscription: azure-wif-demo
      scriptType: bash
      scriptLocation: inlineScript
      inlineScript: |
        az account show --output table
        az group show --name rg-azdo-federation-demo --output table

Der Wert azureSubscription muss exakt dem Namen der Dienstverbindung entsprechen. Die Aufgabe authentifiziert sich über die Verbindung; das YAML benötigt kein Client-Secret.

Autorisieren und ausführen

Erstelle die Pipeline aus azure-pipelines.yml und wähle Run.

Erlaube beim ersten Lauf dieser Pipeline die Verwendung von azure-wif-demo. Gewähre nicht allen Pipelines Zugriff.

Pipeline-Berechtigungsabfrage für die Dienstverbindung

Die Aufgabe sollte das erwartete Abonnement und die Ressourcengruppe anzeigen.

Erfolgreiche Azure-DevOps-Pipeline mit Federation

Problembehandlung

Prüfe bei einem Fehler, ob der Name der Dienstverbindung mit dem YAML übereinstimmt, die Pipeline autorisiert ist, die Verbindung bereit ist und die Identität weiterhin ihre Azure-Rolle besitzt. Selbstgehostete Agents benötigen Azure CLI 2.30 oder neuer.

Enterprise-Hinweis

  • separate Verbindungen für jede Anwendung und Umgebung erstellen
  • Zugriff auf die erforderliche Ressourcengruppe oder Ressource begrenzen
  • nur die erforderliche Azure-Rolle gewähren
  • ausgewählte Pipelines statt aller Pipelines autorisieren
  • Genehmigungen und Prüfungen für Produktions-Dienstverbindungen hinzufügen
  • Verwendung der Dienstverbindung und Azure-Aktivitätsprotokolle überwachen
  • ungenutzte Verbindungen, Identitäten und Rollenzuweisungen entfernen

Workload Identity Federation entfernt gespeicherte Authentifizierungs-Secrets. Sie ersetzt nicht Autorisierung mit geringsten Rechten, Pipeline-Reviews, Genehmigungen oder Überwachung.