Развертывание настраиваемых политик с помощью Azure Pipelines

Это важно

Начиная с 1 мая 2025 г. Azure AD B2C больше не будет доступен для приобретения для новых клиентов. Дополнительные сведения см. в разделе "Вопросы и ответы".

Azure Pipelines поддерживает непрерывную интеграцию (CI) и непрерывную доставку (CD) для постоянного и согласованного тестирования, сборки и отправки кода в любой целевой объект. В этой статье описывается, как автоматизировать процесс развертывания настраиваемых политик Azure Active Directory B2C (Azure AD B2C) с помощью Azure Pipelines.

Это важно

Управление пользовательскими политиками Azure AD B2C с помощью Azure Pipelines в настоящее время использует операции предварительной версии, доступные в конечной точке Microsoft Graph API. Использование этих API в рабочих приложениях не поддерживается. Дополнительные сведения см. в справочнике по бета-точке REST API Microsoft Graph.

Предпосылки

Регистрация приложения для задач управления

Вы используете скрипт PowerShell для развертывания политик Azure AD B2C. Прежде чем скрипт PowerShell сможет взаимодействовать с API Microsoft Graph, создайте регистрацию приложения в клиенте Azure AD B2C. Если вы еще этого не сделали, зарегистрируйте приложение Microsoft Graph.

Чтобы скрипт PowerShell получил доступ к данным в MS Graph, предоставьте зарегистрированному приложению соответствующие разрешения приложения. Было предоставлено разрешение для Microsoft Graph>политик>Policy.ReadWrite.TrustFramework в разделе разрешений API регистрации приложения.

Настройка репозитория Azure

При регистрации приложения Microsoft Graph можно настроить репозиторий для файлов политики.

  1. Войдите в организацию Azure DevOps.
  2. Создайте проект или выберите существующий проект.
  3. В проекте перейдите в Репозиторий и выберите "Файлы".
  4. Выберите существующий репозиторий или создайте его.
  5. В корневом каталоге репозитория создайте папку с именем B2CAssets. Добавьте файлы пользовательской политики Azure AD B2C в папку B2CAssets .
  6. В корневом каталоге репозитория создайте папку с именем Scripts. Создайте файл PowerShell DeployToB2C.ps1. Вставьте следующий скрипт PowerShell в DeployToB2C.ps1.
  7. Фиксация и отправка изменений.

Следующий скрипт получает маркер доступа из идентификатора Microsoft Entra. С помощью токена скрипт вызывает API MS Graph для загрузки политик в папку B2CAssets. Вы также можете изменить содержимое политики перед отправкой. Например, замените tenant-name.onmicrosoft.com названием вашего арендатора.

[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

Настройка Azure Pipelines

После инициализации репозитория и заполнения пользовательскими файлами политики можно настроить конвейер выпуска. Чтобы создать конвейер, выполните следующие действия.

  1. В проекте выберите Конвейеры>Релизы>Новый конвейер.
  2. В разделе "Выбор шаблона" выберите пустое задание и нажмите кнопку "Применить".
  3. Введите имя этапа, например DeployCustomPolicies, а затем закройте область.
  4. Выберите "Добавить артефакт" и в разделе "Тип источника" выберите репозиторий Azure.
    1. Для проекта выберите проект.
    2. Выберите источник (репозиторий), содержащий папку "Скрипты ".
    3. Выберите ветвь по умолчанию, например master.
    4. Оставьте параметр По умолчанию в значении Самая последняя из основной ветви.
    5. Введите псевдоним источника для репозитория. Например, policyRepo.
  5. Выберите Добавить
  6. Переименуйте конвейер, чтобы отразить свое намерение. Например, внедрение настраиваемого конвейера политик.
  7. Нажмите кнопку "Сохранить", чтобы сохранить конфигурацию конвейера.

Настройка переменных конвейера

Переменные конвейера предоставляют удобный способ получения битов данных в различных частях конвейера. Следующие переменные содержат сведения о среде Azure AD B2C.

Имя Ценность
clientId Идентификатор приложения (клиента) зарегистрированного ранее приложения.
clientSecret Значение созданного ранее секрета клиента .
Измените тип переменной на секрет (щелкните значок блокировки).
tenantId your-b2c-tenant.onmicrosoft.com, где ваш-b2c-арендатор является именем вашего арендатор Azure AD B2C.

Чтобы добавить переменные конвейера, выполните следующие действия.

  1. В конвейере выберите вкладку "Переменные".
  2. В разделе "Переменные конвейера" добавьте указанную выше переменную со своими значениями.
  3. Нажмите кнопку "Сохранить", чтобы сохранить переменные.

Добавить задачи конвейера

Задача конвейера — это предварительно упакованный скрипт, выполняющий действие. Добавьте задачу, которая вызывает сценарий PowerShellDeployToB2C.ps1 .

  1. В созданном конвейере выберите вкладку "Задачи ".

  2. Выберите задание агента и выберите знак плюса (+), чтобы добавить задачу в задание агента.

  3. Найдите и выберите PowerShell. Не выбирайте "Azure PowerShell", "PowerShell на целевых компьютерах" или другую запись PowerShell.

  4. Выберите только что добавленную задачу скрипта PowerShell .

  5. Введите следующие значения для задачи скрипта PowerShell:

    • Версия задачи: 2.*

    • Отображаемое имя: имя политики, которую должна загрузить эта задача. Например, B2C_1A_TrustFrameworkBase.

    • Тип: путь к файлу

    • Путь к сценарию: выберите многоточие (...), перейдите в папку «Сценарии », а затем выберите файл DeployToB2C.ps1 .

    • Аргументы. Введите следующий скрипт 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"
      

      Параметр -Files представляет собой список файлов политики, разделенных запятыми, для развертывания. Обновите список с помощью файлов политики.

      Это важно

      Убедитесь, что правила загружаются в правильном порядке. Сначала политика основы, политика расширений, а затем политика доверяющей стороны. Например: TrustFrameworkBase.xml,TrustFrameworkLocalization.xml,TrustFrameworkExtensions.xml,SignUpOrSignin.xml.

  6. Нажмите кнопку "Сохранить", чтобы сохранить задание агента.

Тестирование конвейера

Чтобы протестировать конвейер выпуска, выполните приведенные выше действия.

  1. Выберите Конвейеры и затем Релизы.
  2. Выберите созданный ранее конвейер, например DeployCustomPolicies.
  3. Выберите Создать релиз, а затем нажмите Создать, чтобы поставить выпуск в очередь.

Вы увидите баннер уведомления, сообщающий, что выпуск поставлен в очередь. Чтобы просмотреть его состояние, выберите ссылку в баннере уведомлений или выберите ее в списке на вкладке "Выпуски ".

Дальнейшие действия

Дополнительные сведения: