Utilizar os segredos do Azure Key Vault nos Pipelines do Azure

Serviços do Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019

O Azure Key Vault permite aos programadores armazenar e gerir segredos de forma segura, como chaves de API, credenciais ou certificados. O serviço Key Vault do Azure suporta dois tipos de contentores: cofres e conjuntos HSM geridos (módulo de segurança de hardware). Os cofres suportam o armazenamento de chaves, segredos e certificados suportados por HSM e software, enquanto os conjuntos HSM geridos só suportam chaves suportadas por HSM.

Neste tutorial, vai aprender a:

  • Criar um Key Vault do Azure com a CLI do Azure
  • Adicionar um segredo e configurar o acesso ao cofre de chaves do Azure
  • Utilizar segredos no pipeline

Pré-requisitos

Criar um Azure Key Vault

Inicie sessão no Portal do Azure e, em seguida, selecione o botão Cloud Shell no canto superior direito.

  1. Se tiver mais do que uma subscrição do Azure associada à sua conta, utilize o comando abaixo para especificar uma subscrição predefinida. Pode utilizar az account list para gerar uma lista das suas subscrições.

    az account set --subscription <your_subscription_name_or_ID>
    
  2. Defina a sua região predefinida do Azure. Pode utilizar az account list-locations para gerar uma lista de regiões disponíveis.

    az config set defaults.location=<your_region>
    

    Por exemplo, este comando irá selecionar a região westus2:

    az config set defaults.location=westus2
    
  3. Criar um novo grupo de recursos. Um grupo de recursos é um contentor que detém recursos relacionados para uma solução do Azure.

    az group create --name <your-resource-group>
    
  4. Crie um novo cofre de chaves.

    az keyvault create \
      --name <your-key-vault> \
      --resource-group <your-resource-group>
    
  5. Crie um novo segredo no cofre de chaves do Azure.

    az keyvault secret set \
      --name "Password" \
      --value "mysecretpassword" \
      --vault-name <your-key-vault-name>
    

Criar um projeto

  1. Inicie sessão na sua organização do Azure DevOps.

  2. Se ainda não tiver projetos na sua organização, selecione Criar um projeto para começar. Caso contrário, selecione Novo projeto no canto superior direito.

Criar um repositório

Vamos utilizar o YAML para criar o nosso pipeline, mas primeiro temos de criar um novo repositório.

  1. Inicie sessão na sua organização do Azure DevOps e navegue para o seu projeto.

  2. Selecione Repositórios e, em seguida, selecione Inicializar para inicializar um novo repositório com um README.

    Uma captura de ecrã a mostrar como inicializar um repositório.

Criar um novo pipeline

  1. Selecione Pipelines e, em seguida, selecione Novo Pipeline.

  2. Selecione Git de Repositórios do Azure (YAML).

    Uma captura de ecrã a mostrar como selecionar o controlo de origem dos Repositórios do Azure.

  3. Selecione o repositório que criou no passo anterior.

  4. Selecione o modelo de pipeline Starter .

  5. O pipeline predefinido incluirá alguns scripts que executam comandos de eco. Estes não são necessários para que possamos eliminá-los. O seu novo ficheiro YAML deverá ter o seguinte aspeto:

    trigger:
    - main
    
    pool:
        vmImage: 'ubuntu-latest'
    
    steps:
    
  6. Selecione Mostrar assistente para expandir o painel assistente. Este painel fornece uma lista conveniente e pesquisável de tarefas de pipeline.

    Uma captura de ecrã a mostrar como aceder ao painel assistente tarefas.

  7. Procure o cofre e selecione a tarefa Key Vault do Azure.

    Uma captura de ecrã a mostrar como procurar a tarefa Key Vault do Azure.

  8. Selecione a sua subscrição do Azure e, em seguida, selecione Autorizar. Selecione o cofre de chaves no menu pendente e, em seguida, selecione Adicionar para adicionar a tarefa ao pipeline YAML.

    Uma captura de ecrã a mostrar como configurar a tarefa do Azure Key Vault.

    Nota

    A funcionalidade Disponibilizar segredos para todo o trabalho não é suportada no Azure DevOps Server 2019 e 2020.

  9. O ficheiro YAML deve ter o seguinte aspeto:

    trigger:
    - main
    
    pool:
      vmImage: ubuntu-latest
    
    steps:
    - task: AzureKeyVault@2
      inputs:
        azureSubscription: 'Your-Azure-Subscription'
        KeyVaultName: 'Your-Key-Vault-Name'
        SecretsFilter: '*'
        RunAsPreJob: false
    
    - task: CmdLine@2
      inputs:
        script: 'echo $(Your-Secret-Name) > secret.txt'
    
    - task: CopyFiles@2
      inputs:
        Contents: secret.txt
        targetFolder: '$(Build.ArtifactStagingDirectory)'
    
    - task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
        ArtifactName: 'drop'
        publishLocation: 'Container'
    

Ainda não guarde ou coloque em fila o pipeline. Primeiro, temos de dar ao nosso pipeline as permissões certas para aceder ao Azure Key Vault. Mantenha o separador do browser aberto, retomaremos os passos restantes assim que configurarmos as permissões do cofre de chaves.

Configurar políticas de acesso do Azure Key Vault

Para aceder ao nosso Key Vault do Azure, primeiro temos de configurar um principal de serviço para dar acesso aos Pipelines do Azure. Siga este guia para criar o principal de serviço e, em seguida, siga os passos seguintes nesta secção.

  1. Navegue para o portal do Azure.

  2. Utilize a barra de pesquisa para procurar o cofre de chaves que criou anteriormente.

    Uma captura de ecrã a mostrar como procurar o seu Key Vault do Azure.

  3. Em Definições Selecione Políticas de acesso.

  4. Selecione Adicionar Política de Acesso para adicionar uma nova política.

  5. Para Permissões de segredo, selecione Obter e Lista.

  6. Selecione a opção para selecionar um principal de serviço e procure o que criou no início desta secção. Um principal de segurança é um objeto que representa um utilizador, grupo, serviço ou aplicação que está a pedir acesso aos recursos do Azure.

  7. Selecione Adicionar para criar a política de acesso e, em seguida, selecione Guardar quando terminar.

Nota

Os Cofres de Chaves do Azure que utilizam o controlo de acesso baseado em funções do Azure (RBAC do Azure) não são suportados.

Executar e rever o pipeline

  1. Regresse ao separador anterior onde ficámos.

  2. Selecione Guardar e, em seguida, selecione Guardar novamente para consolidar as alterações e acionar o pipeline. Poderá ser-lhe pedido para permitir o acesso do pipeline aos recursos do Azure, se lhe for pedido, selecione Permitir. Só terá de aprovar o pipeline uma vez.

  3. Selecione a tarefa CmdLine para ver os registos.

    Captura de ecrã a mostrar os registos de tarefas da linha de comandos.

  4. Regresse ao resumo do pipeline e selecione o artefacto publicado.

    Captura de ecrã a mostrar o resumo do pipeline e o artefacto publicado.

  5. Selecione o artefacto secret.txt para o abrir.

    Uma captura de ecrã a mostrar como abrir o artefacto publicado.

  6. O ficheiro de texto deve conter o nosso segredo: mysecretpassword.

Aviso

Este tutorial destina-se apenas a fins educativos. Para obter as melhores práticas de segurança e como trabalhar com segredos em segurança, veja Gerir segredos nas suas aplicações de servidor com o Azure Key Vault.

Limpar os recursos

Siga os passos abaixo para eliminar os recursos que criou:

  1. Se tiver criado uma nova organização para alojar o seu projeto, veja como eliminar a sua organização, caso contrário, elimine o projeto.

  2. Todos os recursos do Azure criados durante este tutorial são alojados num único grupo de recursos PipelinesKeyVaultResourceGroup. Execute o seguinte comando para eliminar o grupo de recursos e todos os respetivos recursos.

    az group delete --name PipelinesKeyVaultResourceGroup
    

FAQ

P: Estou a receber o seguinte erro: "o utilizador ou grupo não tem permissão de lista de segredos" o que devo fazer?

R: Se encontrar um erro a indicar que o utilizador ou grupo não tem permissão de lista de segredos no cofre de chaves, execute os seguintes comandos para autorizar a sua aplicação a aceder à chave ou segredo no Azure Key Vault:

$ErrorActionPreference="Stop";
$Credential = Get-Credential;
Connect-AzAccount -SubscriptionId <YOUR_SUBSCRIPTION_ID> -Credential $Credential;
$spn=(Get-AzureRmADServicePrincipal -SPN <YOUR_SERVICE_PRINCIPAL_ID>);
$spnObjectId=$spn.Id;
Set-AzureRmKeyVaultAccessPolicy -VaultName key-vault-tutorial -ObjectId $spnObjectId -PermissionsToSecrets get,list;

Passos seguintes