Utilizar os segredos do Azure Key Vault nos Pipelines do Azure

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

O Azure Key Vault permite que os desenvolvedores armazenem e gerenciem com segurança informações confidenciais, como chaves de API, credenciais ou certificados. O serviço Azure Key Vault dá suporte a dois tipos de contêineres: cofres e pools HSM (Módulo de Segurança de Hardware) gerenciados. Os Vaults podem armazenar software, segredos e certificados apoiados por HSM, enquanto os pools de HSM gerenciados suportam exclusivamente chaves apoiadas por HSM.

Neste tutorial, vai aprender a:

  • Criar um Cofre da Chave do Azure usando a CLI do Azure
  • Adicionar um segredo e configurar o acesso ao cofre de chaves do Azure
  • Use segredos em seu pipeline

Pré-requisitos

Criar um repositório

Se você já tiver seu próprio repositório, prossiga para a próxima etapa. Caso contrário, siga as instruções abaixo para inicializar o repositório. Usaremos este repositório do Azure para configurar nosso pipeline.

  1. Entre em sua organização do Azure DevOps e navegue até seu projeto.

  2. Selecione Repositórios e, em seguida, selecione Inicializar para inicializar a ramificação principal com um LEIA-ME.

    Uma captura de tela mostrando como inicializar um repositório com um arquivo LEIA-ME.

Criar um Azure Key Vault

  1. Entre no Portal do Azure e selecione o botão Cloud Shell no canto superior direito.

  2. Se você tiver mais de uma assinatura do Azure associada à sua conta, use o comando abaixo para especificar uma assinatura padrão. Pode utilizar az account list para gerar uma lista das suas subscrições.

    az account set --subscription <YOUR_SUBSCRIPTION_NAME_OR_ID>
    
  3. Defina sua região padrão do Azure. Você pode usar az account list-locations para gerar uma lista de regiões disponíveis.

    az config set defaults.location=<YOUR_REGION>
    
  4. Criar um novo grupo de recursos.

    az group create --name <YOUR_RESOURCE_GROUP_NAME>
    
  5. Crie um novo Cofre da Chave do Azure.

    az keyvault create \
      --name <YOUR_KEY_VAULT_NAME> \
      --resource-group <YOUR_RESOURCE_GROUP_NAME>
    
  6. Crie um novo segredo no seu cofre de chaves do Azure.

    az keyvault secret set \
      --name <YOUR_SECRET_NAME> \
      --value <YOUR_ACTUAL_SECRET> \
      --vault-name <YOUR_KEY_VAULT_NAME>
    

Configurar políticas de acesso ao cofre de chaves

Para acessar nosso Cofre da Chave do Azure, precisamos configurar uma entidade de serviço para conceder acesso ao Azure Pipelines. Siga este guia para criar uma entidade de serviço com a CLI do Azure e continue com as próximas etapas nesta seção.

  1. Navegue até o portal do Azure e use a barra de pesquisa para localizar o cofre de chaves criado anteriormente.

    Uma captura de tela mostrando como pesquisar seu Cofre da Chave do Azure.

  2. Selecione Políticas de acesso e, em seguida, selecione Criar para criar uma nova política.

  3. Em Permissões secretas, selecione Obter e Listar.

  4. Selecione Avançar e, em seguida, selecione a entidade de serviço criada anteriormente. Uma entidade de serviço é um objeto que representa um aplicativo ou serviço que está solicitando acesso aos recursos do Azure.

  5. Selecione Avançar e, em seguida , Avançar mais uma vez.

  6. Reveja as suas políticas e, em seguida, selecione Criar quando terminar.

Adicionar atribuição de função

Na próxima etapa, criaremos uma conexão de serviço ARM usando a entidade de serviço. Antes de podermos verificar a conexão, precisamos conceder à entidade de serviço acesso de leitura no nível da assinatura:

  1. Navegue até o portal do Azure

  2. Selecione Subscrições no painel de navegação esquerdo e, em seguida, localize e selecione a sua subscrição.

  3. Selecione Controle de acesso e, em seguida, selecione Adicionar>atribuição de função.

    Uma captura de tela mostrando como adicionar uma nova atribuição de função no nível da assinatura.

  4. Selecione Leitor no separador Função e, em seguida, selecione Seguinte.

  5. Selecione Utilizador, grupo ou entidade de serviço e, em seguida, selecione Selecionar membros.

    Uma captura de tela mostrando como adicionar membros à atribuição de função no Azure.

  6. Use a barra de pesquisa para encontrar sua entidade de serviço e, em seguida, selecione o sinal "+" para selecioná-lo e, em seguida, clique no botão Selecionar .

  7. Selecione Rever + atribuir, reveja as suas definições e, em seguida, selecione Rever + atribuir mais uma vez para confirmar as suas escolhas e adicionar a atribuição de função.

Criar uma conexão de serviço

  1. Entre em sua organização do Azure DevOps e navegue até seu projeto.

  2. Selecione Configurações do>projeto Conexões de serviço e, em seguida, selecione Nova conexão de serviço para criar uma nova conexão de serviço.

  3. Selecione Azure Resource Manager e, em seguida, selecione Next.

  4. Selecione Entidade de serviço (manual) e, em seguida, selecione Seguinte.

  5. Selecione Azure Cloud for Environment e Subscrição para o Nível de Âmbito e, em seguida, introduza o seu ID de Subscrição e o seu Nome de Subscrição.

  6. Preencha os seguintes campos com as informações obtidas ao criar a entidade de serviço e selecione Verificar quando terminar:

    • ID da entidade de serviço: seu appId da entidade de serviço.
    • Chave da entidade de serviço: sua senha da entidade de serviço.
    • ID do locatário: seu locatário principal de serviço.
  7. Quando a verificação for bem-sucedida, forneça um nome e uma descrição (opcional) para sua conexão de serviço e marque a caixa de seleção Conceder permissão de acesso a todos os pipelines .

  8. Selecione Verificar e salvar quando terminar.

    Uma captura de tela mostrando como criar uma nova conexão de serviço do Azure Resource Manager usando a entidade de serviço.

  1. Entre em sua coleção de DevOps do Azure e navegue até seu projeto.

  2. Selecione Configurações do>projeto Conexões>de serviço Nova conexão de serviço e, em seguida, selecione Azure Resource Manager para criar uma nova conexão de serviço ARM.

  3. Dê um nome à sua conexão de serviço e selecione Nuvem do Azure para Ambiente e Assinatura para o Nível de Escopo.

  4. Introduza o seu ID de Subscrição e o seu Nome de Subscrição.

  5. Preencha os seguintes campos com as informações obtidas ao criar a entidade de serviço e selecione Verificar conexão quando terminar:

    • ID do cliente da entidade de serviço: seu appId da entidade de serviço.
    • Chave da entidade de serviço: sua senha da entidade de serviço.
    • ID do locatário: seu locatário principal de serviço.
  6. Marque a caixa de seleção Permitir que todos os pipelines usem esta conexão e selecione Ok quando terminar.

    Uma captura de tela mostrando como criar uma nova conexão de serviço ARM usando a entidade de serviço no Azure DevOps Server 2019.

Criar um novo pipeline

  1. Entre em sua organização do Azure DevOps e navegue até seu projeto.

  2. Selecione Pipelines e, em seguida, selecione New Pipeline.

  3. Selecione Usar o editor clássico para criar um pipeline clássico.

  4. Selecione Azure Repos Git, selecione seu repositório e ramificação padrão e selecione Continuar.

  5. Selecione o modelo de pipeline .Net Desktop .

  6. Para este exemplo, só precisaremos das duas últimas tarefas. Pressione CTRL e, em seguida, selecione as cinco primeiras tarefas, clique com o botão direito do mouse e escolha Remover tarefas(ões) selecionada(s) para excluí-las.

    Uma captura de tela mostrando como excluir várias tarefas de pipeline.

  7. Selecione + para adicionar uma nova tarefa. Procure a tarefa Linha de comando , selecione-a e, em seguida, selecione Adicionar para adicioná-la ao seu pipeline. Uma vez adicionado, configure-o da seguinte forma:

    • Nome para exibição: Criar arquivo
    • Roteiro: echo $(YOUR_SECRET_NAME) > secret.txt

    Uma captura de tela mostrando como configurar a tarefa de linha de comando.

  8. Selecione + para adicionar uma nova tarefa. Procure a tarefa Cofre da Chave do Azure, selecione-a e selecione Adicionar* para adicioná-la ao seu pipeline. Uma vez adicionado, configure-o da seguinte forma:

    • Nome para exibição: Azure Key Vault
    • Assinatura do Azure: selecione sua conexão de serviço principal de serviço que você criou anteriormente
    • Cofre de chaves: selecione o cofre de chaves
    • Filtro secreto: Uma lista separada por vírgulas de nomes secretos ou deixe * para baixar todos os segredos do cofre de chaves selecionado

    Uma captura de tela mostrando como configurar a tarefa Cofre da Chave do Azure em pipelines clássicos.

  9. Selecione a tarefa Copiar arquivos e preencha os campos obrigatórios da seguinte maneira:

    • Nome para exibição: Copiar arquivo
    • Índice: secret.txt
    • Pasta de destino: $(build.artifactstagingdirectory)

    Uma captura de tela mostrando como configurar a tarefa de copiar arquivos em pipelines clássicos.

  10. Selecione a tarefa Publicar artefatos e preencha os campos obrigatórios da seguinte maneira:

    • Nome para exibição: Publicar artefato
    • Caminho para publicação: $(build.artifactstagingdirectory)
    • Nome do artefato: drop
    • Local de publicação do artefato: Azure Pipelines

    Uma captura de tela mostrando como configurar a tarefa de publicar artefatos em pipelines clássicos.

  11. Selecione Salvar e enfileirar e, em seguida, selecione Executar para executar o pipeline.

  12. Quando a execução do pipeline estiver concluída, retorne ao resumo do pipeline e selecione o artefato publicado.

  13. Selecione soltar>secret.txt para baixar o artefato publicado.

    Uma captura de tela mostrando como baixar o artefato publicado.

  14. Abra o arquivo de texto que você acabou de baixar, o arquivo de texto deve conter o segredo do seu cofre de chaves do Azure.

  1. Entre em sua coleção de DevOps do Azure e navegue até seu projeto.

  2. Selecione Pipelines e, em seguida, selecione Builds.

  3. Selecione Novo>pipeline de compilação.

  4. Selecione Usar o editor clássico para criar um novo pipeline de compilação clássico.

  5. Selecione Azure Repos Git, selecione seu repositório e sua ramificação padrão e selecione Continuar.

  6. Selecione o modelo de pipeline .Net Desktop e, em seguida, selecione Aplicar.

  7. Para este exemplo, só precisaremos das duas últimas tarefas. Pressione CTRL e, em seguida, selecione as cinco primeiras tarefas, clique com o botão direito do mouse e escolha Remover tarefas(ões) selecionada(s) para excluí-las.

    Uma captura de tela mostrando como excluir várias tarefas de pipeline em pipelines clássicos no Azure DevOps Server 2019.

  8. Selecione + para adicionar uma nova tarefa. Procure a tarefa Linha de comando , selecione-a e, em seguida, selecione Adicionar para adicioná-la ao seu pipeline. Uma vez adicionado, configure-o da seguinte forma:

    • Nome para exibição: Criar arquivo
    • Roteiro: echo $(YOUR_SECRET_NAME) > secret.txt

    Uma captura de tela mostrando como configurar a tarefa de linha de comando em pipelines clássicos no Azure DevOps Server 2019.

  9. Selecione + para adicionar uma nova tarefa. Procure a tarefa Cofre da Chave do Azure, selecione-a e selecione Adicionar* para adicioná-la ao seu pipeline. Uma vez adicionado, configure-o da seguinte forma:

    • Nome para exibição: Azure Key Vault
    • Assinatura do Azure: selecione sua conexão de serviço principal de serviço que você criou anteriormente
    • Cofre de chaves: selecione o cofre de chaves
    • Filtro secreto: Uma lista separada por vírgulas de nomes secretos ou deixe * para baixar todos os segredos do cofre de chaves selecionado

    Uma captura de tela mostrando como configurar a tarefa Cofre da Chave do Azure em um pipeline clássico no Azure DevOps Server 2019.

  10. Selecione a tarefa Copiar arquivos e preencha os campos obrigatórios da seguinte maneira:

    • Nome para exibição: Copiar arquivo
    • Índice: secret.txt
    • Pasta de destino: $(build.artifactstagingdirectory)

    Uma captura de tela mostrando como configurar a tarefa de copiar arquivos em pipelines clássicos no Azure DevOps Server 2019.

  11. Selecione a tarefa Publicar artefatos e preencha os campos obrigatórios da seguinte maneira:

    • Nome para exibição: Publicar artefato
    • Caminho para publicação: $(build.artifactstagingdirectory)
    • Nome do artefato: drop
    • Local de publicação do artefato: Azure Pipelines

    Uma captura de tela mostrando como configurar a tarefa de publicar artefatos em pipelines clássicos no Azure DevOps Server 2019.

  12. Selecione Salvar fila & e, em seguida, selecione Salvar fila & para executar seu pipeline de compilação.

  13. Quando a execução do pipeline estiver concluída, selecione Artefatos e, em seguida, selecione soltar.

  14. Na janela recém-aberta, selecione soltar>secret.txt, selecione o ícone de reticências (...) e, em seguida, selecione download para salvar o arquivo de texto.

  15. Abra o arquivo de texto que você acabou de baixar, ele deve conter o segredo do seu cofre de chaves do Azure.

Aviso

Este tutorial é apenas para fins educacionais. Para obter as práticas recomendadas de segurança e como trabalhar com segredos com segurança, consulte Gerenciar segredos em seus aplicativos de servidor com o Azure Key Vault.

Clean up resources (Limpar recursos)

Siga as etapas abaixo para excluir os recursos que você criou:

  1. Se você criou uma nova organização para hospedar seu projeto, veja como excluir sua organização, caso contrário , exclua seu projeto.

  2. Todos os recursos do Azure criados durante este tutorial são hospedados em um único grupo de recursos. Execute o seguinte comando para excluir seu grupo de recursos e todos os seus recursos.

    az group delete --name <YOUR_RESOURCE_GROUP_NAME>
    

FAQ

P: Estou recebendo o seguinte erro: "o usuário ou grupo não tem permissão de lista de segredos" o que devo fazer?

R: Se você encontrar um erro indicando que o usuário ou grupo não tem permissão de lista de segredos no cofre de chaves, execute os seguintes comandos para autorizar seu aplicativo a acessar a chave ou segredo no Cofre de Chaves do Azure:

$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;