Implantar políticas personalizadas com o Azure Pipelines

O Azure Pipelines dá suporte à CI (integração contínua) e à CD (entrega contínua) para testar, compilar e enviar um código de maneira constante e consistente para qualquer destino. Este artigo descreve como automatizar o processo de implantação das políticas personalizadas do Azure AD B2C (Azure Active Directory B2C) usando o Azure Pipelines.

Importante

Atualmente, o gerenciamento de políticas personalizadas do Azure AD B2C com o Azure Pipelines usa operações de versão prévia disponíveis no ponto de extremidade /beta da API do Microsoft Graph. Não há suporte para o uso dessas APIs em aplicativos de produção. Para obter mais informações, consulte a referência de ponto de extremidade beta da API REST do Microsoft Graph.

Pré-requisitos

Registrar um aplicativo para tarefas de gerenciamento

Use o script do PowerShell para implantar as políticas do Azure AD B2C. Para que o script do PowerShell possa interagir com a API do Microsoft Graph, crie um registro de aplicativo no seu locatário do Azure AD B2C. Se você ainda não fez isso, registre um aplicativo do Microsoft Graph.

Para que o script do PowerShell acesse dados no MS Graph, conceda ao aplicativo registrado as permissões de aplicativo relevantes. Concessão da permissão Microsoft Graph>Policy>Policy.ReadWrite.TrustFramework em Permissões de API do registro de aplicativo.

Configurar um repositório do Azure

Com um aplicativo do Microsoft Graph registrado, você estará pronto para configurar um repositório para seus arquivos de política.

  1. Entre na sua organização do Azure DevOps.
  2. Crie um projeto ou selecione um existente.
  3. No seu projeto, procure Repos e selecione Arquivos.
  4. Escolha um repositório existente ou crie um.
  5. No diretório raiz do repositório, crie uma pasta chamada B2CAssets. Adicione os arquivos de política personalizados do Azure AD B2C à pasta B2CAssets.
  6. No diretório raiz do repositório, crie uma pasta chamada Scripts. Crie um arquivo DeployToB2C.ps1 do PowerShell. Cole o script do PowerShell a seguir em DeployToB2C.ps1.
  7. Faça commit e efetue push das alterações.

O script a seguir adquire um token de acesso da ID do Microsoft Entra. Com o token, o script chama a API do MS Graph para carregar as políticas na pasta B2CAssets. Você também pode alterar o conteúdo da política antes de carregá-la. Por exemplo, substitua o tenant-name.onmicrosoft.com pelo nome do locatário.

[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

Configurar o Azure Pipelines

Com o repositório inicializado e populado com os arquivos de políticas personalizadas, você estará pronto para configurar o pipeline de lançamento. Para criar um pipeline, siga estas etapas:

  1. No projeto, selecione Pipelines>Lançamentos>Novo pipeline.
  2. Em Selecionar um modelo, escolha Trabalho vazio e Aplicar.
  3. Insira um Nome do estágio, por exemplo DeployCustomPolicies, e feche o painel.
  4. Selecione Adicionar um artefatoe, em Tipo de origem, selecione Repositório do Azure.
    1. Para o Projeto, escolha seu projeto.
    2. Selecione a Origem (repositório) que contém a pasta Scripts.
    3. Escolha um Branch padrão, por exemplo, mestre.
    4. Deixe a configuração de Versão padrão como Mais recente da ramificação padrão.
    5. Insira um Alias de origem para o repositório. Por exemplo, policyRepo.
  5. Selecione Adicionar
  6. Renomeie o pipeline para refletir a intenção. Por exemplo, Implantar pipeline de política personalizada.
  7. Selecione Salvar para salvar essa configuração.

Configurar variáveis de pipeline

As variáveis do pipeline oferecem uma forma conveniente de inserir os principais bits de dados em várias partes do pipeline. As variáveis a seguir fornecem informações sobre o seu ambiente do Azure AD B2C.

Nome Valor
clientId ID do aplicativo (cliente) que foi registrado anteriormente.
clientSecret O valor do segredo do cliente criado anteriormente.
Altere o tipo de variável para segredo (selecione o ícone de cadeado).
tenantId your-b2c-tenant.onmicrosoft.com, onde your-b2c-tenant é o nome do locatário do Azure AD B2C.

Para adicionar variáveis ​​de pipeline, siga estas etapas:

  1. No pipeline, selecione a guia Variáveis.
  2. Em Variáveis do pipeline, adicione a variável acima com os respectivos valores.
  3. Selecione Salvar para salvar as variáveis.

Adicionar tarefas de pipeline

Uma tarefa de pipeline é um script pré-empacotado que executa uma ação. Adicione uma tarefa que chama o script DeployToB2C.ps1 do PowerShell.

  1. No pipeline criado, selecione a guia Tarefas.

  2. Selecione Trabalho do agentee, em seguida, selecione o sinal de adição (+) para adicionar uma tarefa ao Trabalho do agente.

  3. Pesquise e selecione PowerShell. Não selecione "Azure PowerShell", "PowerShell nos computadores de destino" nem qualquer outra entrada do PowerShell.

  4. Selecione tarefa Script do PowerShell recém-adicionada.

  5. Insira os valores a seguir para a tarefa Script do PowerShell:

    • Versão da tarefa: 2.*

    • Nome de exibição: o nome da política que esta tarefa deve carregar. Por exemplo, B2C_1A_TrustFrameworkBase.

    • Tipo: caminho do arquivo

    • Caminho do Script: selecione as reticências (...), navegue até a pasta Scripts e, em seguida, selecione o arquivo DeployToB2C.ps1.

    • Argumentos: Insira o seguinte script do 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"
      

      O parâmetro -Files é uma lista delimitadora de vírgulas de arquivos de política a serem implantados. Atualize a lista com seus arquivos de política.

      Importante

      Verifique se as políticas foram carregadas na ordem correta. Primeiro, a política de base, a política de extensões, então as políticas de terceira parte confiável. Por exemplo, TrustFrameworkBase.xml,TrustFrameworkLocalization.xml,TrustFrameworkExtensions.xml,SignUpOrSignin.xml.

  6. Selecione Salvar para salvar o Trabalho do agente.

Testar o pipeline

Para testar o pipeline de lançamento:

  1. Selecione Pipelines e, em seguida, selecione Lançamentos.
  2. Selecione o pipeline criado anteriormente, por exemplo, DeployCustomPolicies.
  3. Selecione Criar versãoe, em seguida, selecione Criar para colocar a versão na fila.

Você deverá ver uma faixa de notificação informando que uma versão foi colocada na fila. Para exibir o status, selecione o link na faixa de notificação ou selecione-o na lista na guia Lançamentos.

Próximas etapas

Saiba mais sobre: