Implementar políticas personalizadas com o Azure Pipelines

O Azure Pipelines suporta a integração contínua (CI) e a entrega contínua (CD) para testar, compilar e enviar um código de forma constante e consistente para qualquer destino. Este artigo descreve como automatizar o processo de implementação das políticas personalizadas do Azure Active Directory B2C (Azure AD B2C) com o Azure Pipelines.

Importante

A gestão Azure AD políticas personalizadas B2C com o Azure Pipelines utiliza atualmente operações de pré-visualização disponíveis no ponto final do Microsoft Graph API/beta. A utilização destas APIs em aplicações de produção não é suportada. Para obter mais informações, veja Referência do ponto final beta da API REST do Microsoft Graph.

Pré-requisitos

Registar uma aplicação para tarefas de gestão

Utilize o script do PowerShell para implementar as políticas Azure AD B2C. Antes de o script do PowerShell poder interagir com o microsoft Graph API, crie um registo de aplicação no seu inquilino Azure AD B2C. Se ainda não o fez, registe uma aplicação do Microsoft Graph.

Para que o script do PowerShell aceda a dados no MS Graph, conceda à aplicação registada as permissões de aplicação relevantes. Foi concedida a permissão Política dePolítica> do MicrosoftGraph.ReadWrite.TrustFramework> nas Permissões de API do registo da aplicação.

Configurar um Repositório do Azure

Com uma aplicação do Microsoft Graph registada, está pronto para configurar um repositório para os seus ficheiros de política.

  1. Inicie sessão na sua organização do Azure DevOps.
  2. Crie um novo projeto ou selecione um projeto existente.
  3. No seu projeto, navegue para Repositórios e selecione Ficheiros.
  4. Selecione um repositório existente ou crie um.
  5. No diretório de raiz do seu repositório, crie uma pasta com o nome B2CAssets. Adicione os seus Azure AD ficheiros de política personalizada B2C à pasta B2CAssets.
  6. No diretório de raiz do seu repositório, crie uma pasta com o nome Scripts. Crie um ficheiro do PowerShell DeployToB2C.ps1. Cole o seguinte script do PowerShell no DeployToB2C.ps1.
  7. Consolidar e Emitir as alterações.

O script seguinte adquire um token de acesso do Microsoft Entra ID. Com o token, o script chama o MS Graph API para carregar as políticas na pasta B2CAssets. Também pode alterar o conteúdo da política antes de a carregar. Por exemplo, substitua pelo nome do tenant-name.onmicrosoft.com seu inquilino.

[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 preenchido com os seus ficheiros de política personalizada, está pronto para configurar o pipeline de versão. Para criar um pipeline, siga estes passos:

  1. No seu projeto, selecione Pipelines Versões>>Novo pipeline.
  2. Em Selecionar um modelo, selecione Tarefa vazia e, em seguida, selecione Aplicar.
  3. Introduza um Nome da fase, por exemplo DeployCustomPolicies e, em seguida, feche o painel.
  4. Selecione Adicionar um artefacto e, em Tipo de origem, selecione Repositório do Azure.
    1. Para o Projeto, selecione o seu projeto.
    2. Selecione a Origem (repositório) que contém a pasta Scripts .
    3. Selecione um ramo Predefinido, por exemplo , principal.
    4. Deixe a definição Versão predefinida de Mais Recente a partir do ramo predefinido.
    5. Introduza um alias de Origem para o repositório. Por exemplo, policyRepo.
  5. Selecione Adicionar
  6. Mude o nome do pipeline para refletir a intenção. Por exemplo, Implementar Pipeline de Política Personalizada.
  7. Selecione Guardar para guardar a configuração do pipeline.

Configurar variáveis de pipeline

As variáveis de pipeline proporcionam-lhe uma forma conveniente de obter os principais bits de dados em várias partes do pipeline. As variáveis seguintes fornecem informações sobre o seu ambiente Azure AD B2C.

Name Valor
clientId ID da aplicação (cliente) da aplicação que registou anteriormente.
clientSecret O valor do segredo do cliente que criou anteriormente.
Altere o tipo de variável para secreto (selecione o ícone de bloqueio).
tenantId your-b2c-tenant.onmicrosoft.com, em que your-b2c-tenant é o nome da sua Azure AD inquilino B2C.

Para adicionar variáveis de pipeline, siga estes passos:

  1. No pipeline, selecione o separador Variáveis .
  2. Em Variáveis de pipeline, adicione a variável acima com os respetivos valores.
  3. Selecione Guardar para guardar as variáveis.

Adicionar tarefas de pipeline

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

  1. No pipeline que criou, selecione o separador Tarefas .

  2. Selecione Tarefa do agente e, em seguida, selecione o sinal de adição (+) para adicionar uma tarefa à tarefa do Agente.

  3. Procure e selecione PowerShell. Não selecione "Azure PowerShell", "PowerShell em máquinas de destino" ou outra entrada do PowerShell.

  4. Selecione a tarefa de Script do PowerShell recentemente adicionada.

  5. Introduza os seguintes valores para a tarefa script do PowerShell:

    • Versão da tarefa: 2.*

    • Nome a apresentar: o nome da política que esta tarefa deve carregar. Por exemplo, B2C_1A_TrustFrameworkBase.

    • Tipo: Caminho do Ficheiro

    • Caminho do Script: selecione as reticências (...), navegue para a pasta Scripts e, em seguida, selecione o ficheiro deDeployToB2C.ps1 .

    • Argumentos: introduza 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 -Files parâmetro é uma lista delimitador de vírgulas de ficheiros de política a implementar. Atualize a lista com os seus ficheiros de política.

      Importante

      Certifique-se de que as políticas são carregadas pela ordem correta. Em primeiro lugar, a política de base, a política de extensões e, em seguida, as políticas da entidade confiadora. Por exemplo, TrustFrameworkBase.xml,TrustFrameworkLocalization.xml,TrustFrameworkExtensions.xml,SignUpOrSignin.xml.

  6. Selecione Guardar para guardar a tarefa do Agente.

Testar o pipeline

Para testar o pipeline de versão:

  1. Selecione Pipelines e, em seguida , Versões.
  2. Selecione o pipeline que criou anteriormente, por exemplo DeployCustomPolicies.
  3. Selecione Criar versão e, em seguida, selecione Criar para colocar a versão em fila.

Deverá ver uma faixa de notificação a indicar que uma versão foi colocado em fila. Para ver o respetivo estado, selecione a ligação na faixa de notificação ou selecione-a na lista no separador Versões .

Passos seguintes

Saiba mais sobre: