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

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

Важно!

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

Предварительные требования

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

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

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

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

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

  1. Войдите в организацию Azure DevOps.
  2. Создайте новый проект или выберите существующий.
  3. В этом проекте откройте раздел Репозитории и выберите элемент Файлы.
  4. Выберите существующий репозиторий или создайте новый.
  5. В корневом каталоге этого репозитория создайте папку с именем B2CAssets. Добавьте файлы настраиваемой политики Azure AD B2C в папку B2CAssets.
  6. В корневом каталоге этого репозитория создайте папку с именем Scripts. Создайте файл PowerShell с именем DeployToB2C.ps1. Вставьте в этот файл DeployToB2C.ps1 приведенный ниже скрипт PowerShell.
  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 Repository (Репозиторий Azure).
    1. В поле Проект выберите нужный проект.
    2. В поле Источник (репозиторий) выберите репозиторий с папкой Scripts.
    3. Выберите ветвь по умолчанию, например master.
    4. Для параметра Версия по умолчанию сохраните значение Последнее из ветви по умолчанию.
    5. Введите псевдоним источника для репозитория. Например, policyRepo.
  5. Нажмите Добавить
  6. Переименуйте конвейер, чтобы имя соответствовало назначению. Например, Конвейер развертывания настраиваемой политики.
  7. Щелкните команду Сохранить, чтобы сохранить конфигурацию.

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

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

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

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

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

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

Задача конвейера содержит заранее упакованный скрипт, который выполняет определенное действие. Добавьте задачу для вызова скрипта PowerShell DeployToB2C.ps1.

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

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

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

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

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

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

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

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

    • Путь к скрипту: нажмите кнопку с многоточием (...), перейдите в папку Scripts и выберите в ней файл 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. Выберите элемент Создать выпуск, а затем щелкните команду Создать, чтобы поставить выпуск в очередь.

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

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

См. также: