Usar segredos do Azure Key Vault no Azure Pipelines

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

O Azure Key Vault permite que os desenvolvedores armazenem e gerenciem segredos com segurança, como chaves de API, credenciais ou certificados. O serviço do Azure Key Vault dá suporte a dois tipos de contêineres: cofres e pools de HSM (módulo de segurança de hardware) gerenciados. Os cofres dão suporte ao armazenamento de chaves, segredos e certificados com suporte de HSM e de software, enquanto os pools de HSM gerenciados dão suporte apenas a chaves com suporte de HSM.

Neste tutorial, você aprenderá a:

  • Criar um Azure Key Vault usando a CLI do Azure
  • Adicionar um segredo e configurar o acesso ao cofre de chaves do Azure
  • Usar segredos em seu pipeline

Pré-requisitos

Criar um Cofre de chaves do Azure

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

  1. Se você tiver mais de uma assinatura do Azure associada à sua conta, use o comando abaixo para especificar uma assinatura padrão. Você pode usar az account list para gerar uma lista das suas assinaturas.

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

    az config set defaults.location=<your_region>
    

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

    az config set defaults.location=westus2
    
  3. Criar um grupo de recursos. Um grupo de recursos é um contêiner que mantém os recursos relacionados a uma solução do Azure.

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

    az keyvault create \
      --name <your-key-vault> \
      --resource-group <your-resource-group>
    
  5. Crie um 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. Entre na sua organização do Azure DevOps.

  2. Se você não tiver nenhum projeto em sua organização, selecione Criar um projeto para começar. Caso contrário, selecione Novo projeto no canto superior direito.

Criar um repositório

Usaremos o YAML para criar nosso pipeline, mas primeiro precisamos criar um repositório.

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

  2. Selecione Repositórios e Inicializar para inicializar um novo repositório com um LEIAME.

    Uma captura de tela mostrando como inicializar um repositório.

Criar um novo pipeline

  1. Selecione Pipelines e escolha Novo Pipeline.

  2. Selecione Git do Azure Repos (YAML).

    Uma captura de tela mostrando como selecionar um controle de origem do Azure Repos.

  3. Escolha o repositório criado nas etapas anteriores.

  4. Selecione o modelo Pipeline inicial.

  5. O pipeline padrão incluirá alguns scripts que executam comandos echo. Eles não serão necessários, logo podemos excluí-los. O novo arquivo YAML deve ser semelhante a este:

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

    Uma captura de tela mostrando como acessar o painel do assistente de tarefa.

  7. Pesquise o cofre e selecione a tarefa Azure Key Vault.

    Uma captura de tela mostrando como pesquisar a tarefa do Azure Key Vault.

  8. Selecione sua assinatura do Azure e escolha Autorizar. Selecione o Cofre de chaves no menu suspenso e escolha Adicionar para adicionar a tarefa ao pipeline YAML.

    Uma captura de tela mostrando como configurar a tarefa do Azure Key Vault.

    Observação

    Não há suporte para o recurso Tornar segredos disponíveis para todo o trabalho no Azure DevOps Server 2019 e 2020.

  9. O arquivo YAML deverá ser semelhante ao seguinte:

    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'
    

Não salve e nem enfileire o pipeline ainda. Primeiro, devemos dar ao pipeline as permissões certas para acessar o Azure Key Vault. Mantenha a guia do navegador aberta, retomaremos as etapas restantes depois de configurarmos as permissões do cofre de chaves.

Configurar políticas de acesso do Azure Key Vault

Para acessar nosso Azure Key Vault, primeiro devemos configurar uma entidade de serviço para dar acesso ao Azure Pipelines. Siga este guia para criar sua entidade de serviço e prossiga com as próximas etapas nesta seção.

  1. Navegue até o portal do Azure.

  2. Use a barra de pesquisa para procurar o cofre de chaves criado anteriormente.

    Uma captura de tela mostrando como pesquisar pelo seu Azure Key Vault.

  3. Em Configurações, selecione Políticas de acesso.

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

  5. Selecione Permissões de segredo e escolha Obter e Listar.

  6. Selecione a opção para escolher uma entidade de serviço e pesquise por aquela que você criou no início desta seção. Uma entidade de segurança é um objeto que representa um usuário, grupo, serviço ou aplicativo que está solicitando acesso aos recursos do Azure.

  7. Selecione Adicionar para criar a política de acesso e escolha Salvar quando terminar.

Observação

Não há suporte para os Azure Key Vaults que usam o RBAC (controle de acesso baseado em função) do Azure.

Executar e revisar o pipeline

  1. Volte para a guia anterior de onde paramos.

  2. Selecione Salvar e escolha Salvar novamente para confirmar suas alterações e acionar o pipeline. Talvez seja solicitado que você permita o acesso do pipeline aos recursos do Azure, se solicitado, selecione Permitir. Você só precisará aprovar uma vez o pipeline.

  3. Selecione a tarefa CmdLine para exibir os logs.

    Uma captura de tela mostrando os logs da tarefa de linha de comando.

  4. Retorne ao resumo do pipeline e selecione o artefato publicado.

    Uma captura de tela mostrando o resumo do pipeline e o artefato publicado.

  5. Selecione o artefato secret.txt para abri-lo.

    Uma captura de tela mostrando como abrir o artefato publicado.

  6. O arquivo de texto deve conter nosso segredo: mysecretpassword.

Aviso

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

Limpar os recursos

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

  1. Se você criou uma nova organização para hospedar o projeto, confira 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 PipelinesKeyVaultResourceGroup. Execute o seguinte comando para excluir o grupo de recursos e todos os recursos.

    az group delete --name PipelinesKeyVaultResourceGroup
    

Perguntas frequentes

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 a permissão de lista de segredos no cofre de chaves, execute os seguintes comandos para autorizar seu aplicativo a acessar a chave ou o 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;

Próximas etapas