Wdrażanie zasad niestandardowych za pomocą usługi Azure Pipelines

Usługa Azure Pipelines obsługuje ciągłą integrację i ciągłe dostarczanie (CD), aby stale i spójnie testować, kompilować i dostarczać kod do dowolnego miejsca docelowego. W tym artykule opisano sposób automatyzowania procesu wdrażania zasad niestandardowych usługi Azure Active Directory B2C (Azure AD B2C) przy użyciu usługi Azure Pipelines.

Ważne

Zarządzanie zasadami niestandardowymi usługi Azure AD B2C za pomocą usługi Azure Pipelines obecnie używa operacji w wersji zapoznawczej dostępnych w punkcie końcowym usługi Microsoft interfejs Graph API/beta. Te interfejsy API nie są obsługiwane w zastosowaniach produkcyjnych. Aby uzyskać więcej informacji, zobacz dokumentację punktu końcowego interfejsu API REST programu Microsoft Graph w wersji beta.

Wymagania wstępne

Rejestrowanie aplikacji na potrzeby zadań zarządzania

Skrypt programu PowerShell służy do wdrażania zasad Azure AD B2C. Zanim skrypt programu PowerShell będzie mógł korzystać z interfejs Graph API firmy Microsoft, utwórz rejestrację aplikacji w dzierżawie usługi Azure AD B2C. Jeśli jeszcze tego nie zrobiono, zarejestruj aplikację programu Microsoft Graph.

Aby skrypt programu PowerShell uzyskiwał dostęp do danych w programie MS Graph, przyznaj zarejestrowanej aplikacji odpowiednie uprawnienia aplikacji. Udzielono uprawnieńzasad programu>MicrosoftGraph.ReadWrite.TrustFramework> w ramach uprawnień interfejsu API rejestracji aplikacji.

Konfigurowanie repozytorium platformy Azure

Po zarejestrowaniu aplikacji programu Microsoft Graph możesz skonfigurować repozytorium dla plików zasad.

  1. Zaloguj się do organizacji usługi Azure DevOps.
  2. Utwórz nowy projekt lub wybierz istniejący projekt.
  3. W projekcie przejdź do obszaru Repozytoria i wybierz pozycję Pliki.
  4. Wybierz istniejące repozytorium lub utwórz je.
  5. W katalogu głównym repozytorium utwórz folder o nazwie B2CAssets. Dodaj pliki zasad niestandardowych Azure AD B2C do folderu B2CAssets.
  6. W katalogu głównym repozytorium utwórz folder o nazwie Scripts. Utwórz plik programu PowerShell DeployToB2C.ps1. Wklej następujący skrypt programu PowerShell do DeployToB2C.ps1.
  7. Zatwierdzanie i wypychanie zmian.

Poniższy skrypt uzyskuje token dostępu z identyfikatora Microsoft Entra. Za pomocą tokenu skrypt wywołuje interfejs Graph API MS w celu przekazania zasad w folderze B2CAssets. Zawartość zasad można również zmienić przed przekazaniem. Na przykład zastąp element tenant-name.onmicrosoft.com nazwą dzierżawy.

[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

Konfigurowanie usługi Azure Pipelines

Po zainicjowaniu i wypełnieniu repozytorium niestandardowymi plikami zasad możesz przystąpić do konfigurowania potoku wydania. Aby utworzyć potok, wykonaj następujące kroki:

  1. W projekcie wybierz pozycję Potoki>Zwalnia>nowy potok.
  2. W obszarze Wybierz szablon wybierz pozycję Puste zadanie, a następnie wybierz pozycję Zastosuj.
  3. Wprowadź nazwę etapu, na przykład DeployCustomPolicies, a następnie zamknij okienko.
  4. Wybierz pozycję Dodaj artefakt, a następnie w obszarze Typ źródła wybierz pozycję Repozytorium platformy Azure.
    1. W polu Project (Projekt) wybierz swój projekt.
    2. Wybierz źródło (repozytorium), które zawiera folder Scripts( Skrypty ).
    3. Wybierz gałąź Domyślna, na przykład master.
    4. Pozostaw ustawienie Domyślna wersjanajnowszej z gałęzi domyślnej.
    5. Wprowadź alias źródłowy dla repozytorium. Na przykład policyRepo.
  5. Wybierz pozycję Dodaj.
  6. Zmień nazwę potoku, aby odzwierciedlić jego intencję. Na przykład wdróż niestandardowy potok zasad.
  7. Wybierz pozycję Zapisz , aby zapisać konfigurację potoku.

Konfigurowanie zmiennych potoku

Zmienne potoku zapewniają wygodny sposób uzyskiwania kluczowych bitów danych do różnych części potoku. Poniższe zmienne zawierają informacje o środowisku Azure AD B2C.

Nazwa Wartość
clientId Identyfikator aplikacji (klienta) zarejestrowanej wcześniej aplikacji.
clientSecret Wartość utworzonego wcześniej wpisu tajnego klienta .
Zmień typ zmiennej na wpis tajny (wybierz ikonę blokady).
tenantId your-b2c-tenant.onmicrosoft.com, gdzie twoja-b2c-tenant jest nazwą dzierżawy usługi Azure AD B2C.

Aby dodać zmienne potoku, wykonaj następujące kroki:

  1. W potoku wybierz kartę Zmienne .
  2. W obszarze Zmienne potoku dodaj powyżej zmienną z ich wartościami.
  3. Wybierz pozycję Zapisz , aby zapisać zmienne.

Dodawanie zadań potoku

Zadanie potoku to wstępnie spakowany skrypt, który wykonuje akcję. Dodaj zadanie wywołujące skrypt programuDeployToB2C.ps1 PowerShell.

  1. W utworzonym potoku wybierz kartę Zadania .

  2. Wybierz pozycję Zadanie agenta, a następnie wybierz znak plus (+), aby dodać zadanie do zadania Agent.

  3. Wyszukaj i wybierz pozycję PowerShell. Nie wybieraj pozycji "Azure PowerShell", "PowerShell na maszynach docelowych" lub innego wpisu programu PowerShell.

  4. Wybierz nowo dodane zadanie skryptu programu PowerShell .

  5. Wprowadź następujące wartości dla zadania skryptu programu PowerShell:

    • Wersja zadania: 2.*

    • Nazwa wyświetlana: nazwa zasad, które powinny zostać przekazane przez to zadanie. Na przykład B2C_1A_TrustFrameworkBase.

    • Typ: Ścieżka pliku

    • Ścieżka skryptu: wybierz wielokropek (...), przejdź do folderu Scripts , a następnie wybierz plik DeployToB2C.ps1 .

    • Argumenty: wprowadź następujący skrypt programu PowerShell.

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

      Parametr -Files jest listą ograniczników przecinka plików zasad do wdrożenia. Zaktualizuj listę przy użyciu plików zasad.

      Ważne

      Upewnij się, że zasady są przekazywane w odpowiedniej kolejności. Najpierw zasady podstawowe, zasady rozszerzeń, a następnie zasady jednostki uzależnionej. Na przykład TrustFrameworkBase.xml,TrustFrameworkLocalization.xml,TrustFrameworkExtensions.xml,SignUpOrSignin.xml.

  6. Wybierz pozycję Zapisz , aby zapisać zadanie agenta.

Testowanie potoku

Aby przetestować potok wydania:

  1. Wybierz pozycję Potoki , a następnie pozycję Wydania.
  2. Wybierz utworzony wcześniej potok, na przykład DeployCustomPolicies.
  3. Wybierz pozycję Utwórz wydanie, a następnie wybierz pozycję Utwórz, aby utworzyć kolejkę wydania.

Powinien zostać wyświetlony baner powiadomień informujący o tym, że wydanie zostało w kolejce. Aby wyświetlić jego stan, wybierz link na banerze powiadomień lub wybierz go na liście na karcie Wydania .

Następne kroki

Dowiedz się więcej na następujące tematy: