Развертывание настраиваемых политик в 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 Active Directory B2C.
- Если вы еще не создали организацию DevOps, создайте ее сейчас по инструкциям из статьи Регистрация и вход в Azure DevOps.
Регистрация приложения для задач управления
Политики 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 можно переходить к настройке репозитория для файлов политики.
- Войдите в организацию Azure DevOps.
- Создайте новый проект или выберите существующий.
- В этом проекте откройте раздел Репозитории и выберите элемент Файлы.
- Выберите существующий репозиторий или создайте новый.
- В корневом каталоге этого репозитория создайте папку с именем
B2CAssets
. Добавьте файлы настраиваемой политики Azure AD B2C в папку B2CAssets. - В корневом каталоге этого репозитория создайте папку с именем
Scripts
. Создайте файл PowerShell с именем DeployToB2C.ps1. Вставьте в этот файл DeployToB2C.ps1 приведенный ниже скрипт PowerShell. - Зафиксируйте и отправьте изменения.
Следующий скрипт получает маркер доступа из идентификатора 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
После инициализации репозитория и заполнения его файлами настраиваемой политики можно приступать к настройке конвейера выпуска. Чтобы создать конвейер, выполните следующие действия:
- В проекте выберите элементы Конвейеры>Выпуски>Новый конвейер.
- В разделе Выбор шаблона щелкните элемент Пустое задание, а затем — команду Применить.
- Введите имя этапа, например DeployCustomPolicies, а затем закройте эту панель.
- Щелкните команду Добавить артефакт и в разделе Тип источника выберите вариант Azure Repository (Репозиторий Azure).
- В поле Проект выберите нужный проект.
- В поле Источник (репозиторий) выберите репозиторий с папкой Scripts.
- Выберите ветвь по умолчанию, например master.
- Для параметра Версия по умолчанию сохраните значение Последнее из ветви по умолчанию.
- Введите псевдоним источника для репозитория. Например, policyRepo.
- Нажмите Добавить
- Переименуйте конвейер, чтобы имя соответствовало назначению. Например, Конвейер развертывания настраиваемой политики.
- Щелкните команду Сохранить, чтобы сохранить конфигурацию.
Настройка переменных конвейера
Переменные конвейера предоставляют удобный способ добавлять важные элементы данных в разные части конвейера. Перечисленные ниже переменные содержат сведения о среде Azure AD B2C.
Имя | Значение |
---|---|
clientId |
Идентификатор приложения (клиента) , который вы зарегистрировали ранее. |
clientSecret |
Значение секрета клиента, который вы создали ранее. Измените тип переменной на секрет (щелкните значок замка). |
tenantId |
your-b2c-tenant.onmicrosoft.com , где your-b2c-tenant обозначает имя клиента Azure AD B2C. |
Чтобы добавить переменные конвейера, сделайте следующее:
- На странице конвейера выберите вкладку Переменные.
- В разделе Переменные конвейера добавьте указанные выше переменные и значения для них.
- Щелкните команду Сохранить, чтобы сохранить эти переменные.
Добавление задач конвейера
Задача конвейера содержит заранее упакованный скрипт, который выполняет определенное действие. Добавьте задачу для вызова скрипта PowerShell DeployToB2C.ps1.
В созданном конвейере щелкните вкладку Задачи.
Выберите элемент Задание агента и щелкните знак плюса (+), чтобы добавить задачу в задание агента.
Выполните поиск по строке PowerShell и выберите элемент с таким именем. Не перепутайте его с другими вариантами PowerShell, например "Azure PowerShell" или "PowerShell на целевых компьютерах".
Выберите только что добавленную задачу Скрипт PowerShell.
Введите следующие значения для задачи "Скрипт 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
.
Щелкните команду Сохранить, чтобы сохранить задание агента.
Тестирование конвейера
Чтобы протестировать конвейер выпуска, выполните следующие действия:
- Выберите элемент Конвейеры, а затем — элемент Выпуски.
- Выберите созданный ранее конвейер, например DeployCustomPolicies.
- Выберите элемент Создать выпуск, а затем щелкните команду Создать, чтобы поставить выпуск в очередь.
Вы увидите баннер с уведомлением о том, что выпуск поставлен в очередь. Чтобы проверить его состояние, щелкните ссылку в баннере уведомления или в списке на вкладке Выпуски.
Дальнейшие действия
См. также: