Share via


Bereitstellen benutzerdefinierter Richtlinien mit Azure Pipelines

Azure Pipelines kombiniert Continuous Integration (CI) und Continuous Delivery (CD), um den Code kontinuierlich und konsistent zu testen und zu erstellen und auf einem beliebigen Ziel bereitzustellen. In diesem Artikel wird beschrieben, wie Sie den Bereitstellungsprozess der benutzerdefinierten Richtlinien in Azure Active Directory B2C (Azure AD B2C) mithilfe von Azure Pipelines automatisieren.

Wichtig

Bei der Verwaltung von benutzerdefinierten Richtlinien in Azure AD B2C mit Azure Pipelines werden derzeit Vorschau-Vorgänge verwendet, die im /beta-Endpunkt der Microsoft Graph-API zur Verfügung stehen. Die Verwendung dieser APIs in Produktionsanwendungen wird nicht unterstützt. Weitere Informationen finden Sie in der Microsoft Graph-REST-API-Beta-Endpunkt-Referenz.

Voraussetzungen

Registrieren einer Anwendung für Verwaltungstasks

Sie verwenden das PowerShell-Skript, um die Azure AD B2C-Richtlinien bereitzustellen. Bevor das PowerShell-Skript mit der Microsoft Graph-API interagieren kann, erstellen Sie eine Anwendungsregistrierung in Ihrem Azure AD B2C-Mandanten. Wenn dies noch nicht erfolgt ist, registrieren Sie eine Microsoft Graph-Anwendung.

Damit das PowerShell-Skript auf Daten in Microsoft Graph zugreifen kann, erteilen Sie der registrierten Anwendung die entsprechenden Anwendungsberechtigungen. In den API-Berechtigungen der App-Registrierung unter Microsoft Graph>Richtlinie> wurde die Berechtigung Policy.ReadWrite.TrustFramework erteilt.

Konfigurieren eines Azure-Repository

Nach dem Registrieren einer Microsoft Graph-Anwendung können Sie ein Repository für Ihre Richtliniendateien konfigurieren.

  1. Melden Sie sich bei Ihrer Azure DevOps-Organisation an.
  2. Erstellen Sie ein neues Projekt, oder wählen Sie ein vorhandenes Projekt aus.
  3. Navigieren Sie in Ihrem Projekt zu Repos, und wählen Sie Dateien aus.
  4. Wählen Sie ein vorhandenes Repository aus, oder erstellen Sie ein Repository.
  5. Erstellen Sie im Stammverzeichnis Ihres Repositorys einen Ordner mit dem Namen B2CAssets. Fügen Sie Ihre benutzerdefinierten Azure AD B2C-Richtliniendateien dem Ordner B2CAssets hinzu.
  6. Erstellen Sie im Stammverzeichnis Ihres Repositorys einen Ordner mit dem Namen Scripts. Erstellen Sie eine PowerShell-Datei DeployToB2C.ps1. Fügen Sie das folgende PowerShell-Skript in die Datei DeployToB2C.ps1 ein.
  7. Committen und pushen Sie die Änderungen.

Das folgende Skript erhält ein Zugriffstoken von Microsoft Entra ID. Mit dem Token ruft das Skript die Microsoft Graph-API auf, um die Richtlinien in den Ordner B2CAssets hochzuladen. Sie können auch den Inhalt der Richtlinie ändern, bevor Sie sie hochladen. Ersetzen Sie z. B. tenant-name.onmicrosoft.com durch den Namen Ihres Mandanten.

[Cmdletbinding()]
Param(
    [Parameter(Mandatory = $true)][string]$ClientID,
    [Parameter(Mandatory = $true)][string]$ClientSecret,
    [Parameter(Mandatory = $true)][string]$TenantId,
    [Parameter(Mandatory = $true)][string]$Folder,
    [Parameter(Mandatory = $true)][string]$Files
)

try {
    $body = @{grant_type = "client_credentials"; scope = "https://graph.microsoft.com/.default"; client_id = $ClientID; client_secret = $ClientSecret }

    $response = Invoke-RestMethod -Uri https://login.microsoftonline.com/$TenantId/oauth2/v2.0/token -Method Post -Body $body
    $token = $response.access_token

    $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
    $headers.Add("Content-Type", 'application/xml')
    $headers.Add("Authorization", 'Bearer ' + $token)

    # Get the list of files to upload
    $filesArray = $Files.Split(",")

    Foreach ($file in $filesArray) {

        $filePath = $Folder + $file.Trim()

        # Check if file exists
        $FileExists = Test-Path -Path $filePath -PathType Leaf

        if ($FileExists) {
            $policycontent = Get-Content $filePath -Encoding UTF8

            # Optional: Change the content of the policy. For example, replace the tenant-name with your tenant name.
            # $policycontent = $policycontent.Replace("your-tenant.onmicrosoft.com", "contoso.onmicrosoft.com")     
    
    
            # Get the policy name from the XML document
            $match = Select-String -InputObject $policycontent  -Pattern '(?<=\bPolicyId=")[^"]*'
    
            If ($match.matches.groups.count -ge 1) {
                $PolicyId = $match.matches.groups[0].value
    
                Write-Host "Uploading the" $PolicyId "policy..."
    
                $graphuri = 'https://graph.microsoft.com/beta/trustframework/policies/' + $PolicyId + '/$value'
                $content = [System.Text.Encoding]::UTF8.GetBytes($policycontent)
                $response = Invoke-RestMethod -Uri $graphuri -Method Put -Body $content -Headers $headers -ContentType "application/xml; charset=utf-8"
    
                Write-Host "Policy" $PolicyId "uploaded successfully."
            }
        }
        else {
            $warning = "File " + $filePath + " couldn't be not found."
            Write-Warning -Message $warning
        }
    }
}
catch {
    Write-Host "StatusCode:" $_.Exception.Response.StatusCode.value__

    $_

    $streamReader = [System.IO.StreamReader]::new($_.Exception.Response.GetResponseStream())
    $streamReader.BaseStream.Position = 0
    $streamReader.DiscardBufferedData()
    $errResp = $streamReader.ReadToEnd()
    $streamReader.Close()

    $ErrResp

    exit 1
}

exit 0

Konfigurieren von Azure Pipelines

Nachdem Sie Ihr Repository initialisiert und mit Ihren benutzerdefinierten Richtliniendateien aufgefüllt haben, können Sie die Freigabepipeline einrichten. Führen Sie die folgenden Schritte aus, um eine Pipeline zu erstellen:

  1. Wählen Sie in Ihrem Projekt Pipelines>Freigaben>Neue Pipeline aus.
  2. Wählen Sie unter Vorlage auswählen die Option Leerer Auftrag und dann Anwenden aus.
  3. Geben Sie einen Phasennamen (z. B. DeployCustomPolicies) ein, und schließen Sie dann den Bereich.
  4. Wählen Sie Artefakt hinzufügen aus, und wählen Sie unter Quelltyp die Option Azure-Repository aus.
    1. Wählen Sie unter Projekt Ihr Projekt aus.
    2. Wählen Sie die Quelle (Repository) aus, die den Ordner Skripts enthält.
    3. Wählen Sie einen Standardbranch aus, z. B. master.
    4. Übernehmen Sie unter Standardversion die Einstellung Neuestes Element aus dem Standardbranch.
    5. Geben Sie für das Repository einen Quellalias ein, zum Beispiel policyRepo.
  5. Wählen Sie Hinzufügen aus.
  6. Benennen Sie die Pipeline um, und geben Sie ihr einen aussagekräftigen Namen, zum Beispiel Deploy Custom Policy Pipeline.
  7. Wählen Sie zum Speichern der Pipelinekonfiguration Speichern aus.

Konfigurieren von Pipelinevariablen

Die Pipelinevariablen stellen eine bequeme Möglichkeit dar, wichtige Bits von Daten in verschiedene Teile der Pipeline zu übernehmen. Die folgenden Variablen enthalten Informationen zu Ihrer Azure AD B2C-Umgebung.

Name Wert
clientId Anwendungs-ID (Client) der zuvor von Ihnen registrierten Anwendung.
clientSecret Wert des geheimen Clientschlüssels, den Sie zuvor erstellt haben.
Ändern Sie den Variablentyp in Geheimnis (wählen Sie das Schlosssymbol aus).
tenantId your-b2c-tenant.onmicrosoft.com, wobei your-b2c-tenant dem Namen Ihres Azure AD B2C-Mandanten entspricht.

Führen Sie die folgenden Schritte aus, um Pipelinevariablen hinzuzufügen:

  1. Wählen Sie in Ihrer Pipeline die Registerkarte Variablen aus.
  2. Fügen Sie unter Pipelinevariablen die obige Variable mit ihren Werten hinzu.
  3. Wählen Sie Speichern aus, um die Variablen zu speichern.

Hinzufügen von Pipelinetasks

Eine Pipelineaufgabe ist ein vorgepacktes Skript, das eine Aktion ausführt. Fügen Sie eine Aufgabe hinzu, die das PowerShell-Skript DeployToB2C.ps1 aufruft.

  1. Wählen Sie in der Pipeline, die Sie erstellt haben, die Registerkarte Aufgaben aus.

  2. Wählen Sie Agent-Auftrag und dann das Pluszeichen (+) aus, um dem Agent-Auftrag einen Task hinzuzufügen.

  3. Suchen Sie nach dem Eintrag PowerShell, und wählen Sie ihn aus. Wählen Sie nicht „Azure PowerShell“, „PowerShell auf Zielcomputern“ oder einen anderen Eintrag im Zusammenhang mit PowerShell aus.

  4. Wählen Sie den neu hinzugefügten Task PowerShell-Skript aus.

  5. Geben Sie für den Task „PowerShell-Skript“ die folgenden Werte ein:

    • Taskversion: 2.*

    • Anzeigename: Der Name der Richtlinie, die dieser Task hochladen soll, zum Beispiel B2C_1A_TrustFrameworkBase.

    • Typ: Dateipfad

    • Skriptpfad: Wählen Sie die Auslassungspunkte (...) aus, navigieren Sie zum Ordner Skripts, und wählen Sie dann die Datei DeployToB2C.ps1 aus.

    • Argumente: Geben Sie das folgende PowerShell-Skript ein.

      -ClientID $(clientId) -ClientSecret $(clientSecret) -TenantId $(tenantId) -Folder $(System.DefaultWorkingDirectory)/policyRepo/B2CAssets/ -Files "TrustFrameworkBase.xml,TrustFrameworkLocalization.xml,TrustFrameworkExtensions.xml,SignUpOrSignin.xml,ProfileEdit.xml,PasswordReset.xml"
      

      Der Parameter -Files ist eine Liste mit Kommatrennzeichen der bereitzustellenden Richtliniendateien. Aktualisieren Sie die Liste mit Ihren Richtliniendateien.

      Wichtig

      Stellen Sie sicher, dass die Richtlinien in der richtigen Reihenfolge hochgeladen werden. Zuerst die Basisrichtlinie, dann die Erweiterungsrichtlinie und anschließend die Richtlinien der vertrauenden Seite. Beispiel: TrustFrameworkBase.xml,TrustFrameworkLocalization.xml,TrustFrameworkExtensions.xml,SignUpOrSignin.xml.

  6. Wählen Sie Speichern aus, um den Agent-Auftrag zu speichern.

Testen Ihrer Pipeline

So testen Sie Ihre Pipeline

  1. Wählen Sie Pipelines und anschließend Freigaben aus.
  2. Wählen Sie die zuvor erstellte Pipeline (z. B. DeployCustomPolicies) aus.
  3. Wählen Sie Freigabe erstellen und dann Erstellen aus, um die Freigabe in die Warteschlange einzureihen.

Es sollte ein Benachrichtigungsbanner mit dem Hinweis angezeigt werden, dass eine Freigabe in die Warteschlange gestellt wurde. Um deren Status anzuzeigen, wählen Sie den Link im Benachrichtigungsbanner oder die Freigabe in der Liste auf der Registerkarte Freigaben aus.

Nächste Schritte

Weitere Informationen: