Partilhar via


Utilizar os segredos do Azure Key Vault nos Pipelines do Azure

Azure DevOps Services | 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

Obter o código de exemplo

Se você já tiver seu próprio repositório, prossiga para a próxima etapa. Caso contrário, importe o repositório de exemplo a seguir para o Azure Repo.

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

  2. Selecione Repositórios e, em seguida, selecione Importar. Insira o seguinte URL do repositório e selecione Importar.

    https://github.com/MicrosoftDocs/pipelines-dotnet-core
    

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 a autenticação

Criar uma identidade gerida atribuída pelo utilizador

  1. Entre no portal do Azure e procure o serviço Identidades Gerenciadas na barra de pesquisa.

  2. Selecione Criar e preencha os campos obrigatórios da seguinte forma:

    • Assinatura: selecione sua assinatura no menu suspenso.
    • Grupo de recursos: selecione um grupo de recursos existente ou crie um novo.
    • Região: selecione uma região no menu suspenso.
    • Nome: introduza um nome para a sua identidade gerida atribuída pelo utilizador.
  3. Selecione Rever + criar quando terminar.

  4. Quando a implantação estiver concluída, selecione Ir para recurso e copie os valores de Assinatura e ID do Cliente para usar nas próximas etapas.

  5. Navegue até Propriedades de Configurações> e copie o valor de ID de Locatário da identidade gerenciada para uso posterior.

Configurar políticas de acesso ao cofre de chaves

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

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

  3. Em Permissões secretas, marque as caixas de seleção Obter e Listar .

  4. Selecione Avançar e cole a ID do Cliente da identidade gerenciada criada anteriormente na barra de pesquisa. Selecione sua identidade gerenciada.

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

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

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. Em Tipo de identidade, selecione Identidade gerenciada no menu suspenso.

  5. Para a Etapa 1: Detalhes da identidade gerenciada, preencha os campos da seguinte maneira:

    • Subscrição para identidade gerida: selecione a subscrição que contém a sua identidade gerida.

    • Grupo de recursos para identidade gerenciada: selecione o grupo de recursos que hospeda sua identidade gerenciada.

    • Identidade gerenciada: selecione sua identidade gerenciada no menu suspenso.

  6. Para a Etapa 2: Escopo do Azure, preencha os campos da seguinte maneira:

    • Nível de escopo para conexão de serviço: Selecione Assinatura.

    • Assinatura para conexão de serviço: selecione a assinatura que sua identidade gerenciada acessará.

    • Grupo de recursos para conexão de serviço: (Opcional) Especifique para limitar o acesso de identidade gerenciada a um grupo de recursos.

  7. Para a Etapa 3: Detalhes da conexão de serviço:

    • Nome da conexão de serviço: forneça um nome para sua conexão de serviço.

    • Referência de gerenciamento de serviços: (opcional) Informações de contexto de um banco de dados ITSM.

    • Descrição: (Opcional) Adicione uma descrição.

  8. Em Segurança, marque a caixa de seleção Conceder permissão de acesso a todos os pipelines para permitir que todos os pipelines usem essa conexão de serviço. Se você não selecionar essa opção, deverá conceder manualmente acesso a cada pipeline que usa essa conexão de serviço.

  9. Selecione Salvar para validar e criar a conexão de serviço.

    Uma captura de tela exibindo como criar uma conexão de serviço ARM de identidade gerenciada.

Aceda aos segredos do cofre de chaves a partir do seu 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 Azure Repos Git (YAML) e, em seguida, selecione seu repositório.

  4. Selecione o modelo de pipeline inicial.

  5. O pipeline padrão incluirá um script que executa comandos echo. Estes não são necessários para que possamos eliminá-los.

  6. Adicione a tarefa AzureKeyVault, substituindo os espaços reservados pelo nome da conexão de serviço que você criou anteriormente e o nome do cofre de chaves. Seu arquivo YAML deve ser semelhante ao seguinte trecho:

    trigger:
    - main
    
    pool:
      vmImage: ubuntu-latest
    
    steps:
    - task: AzureKeyVault@2
      displayName: Azure Key Vault
      inputs:
        azureSubscription: 'SERVICE_CONNECTION_NAME'
        KeyVaultName: 'KEY_VAULT_NAME'
        SecretsFilter: '*'
        RunAsPreJob: false
    
  7. Vamos adicionar as seguintes tarefas para copiar e publicar nosso segredo. Este exemplo é apenas para fins de demonstração e não deve ser implementado em um ambiente de produção.

    trigger:
    - main
    
    pool:
      vmImage: ubuntu-latest
    
    steps:
    - task: AzureKeyVault@2
      displayName: Azure Key Vault
      inputs:
        azureSubscription: 'SERVICE_CONNECTION_NAME'
        KeyVaultName: 'KEY_VAULT_NAME'
        SecretsFilter: '*'
        RunAsPreJob: false
    
    - task: CmdLine@2
      displayName: Create file
      inputs:
        script: 'echo $(SECRET_NAME) > secret.txt'
    
    - task: CopyFiles@2
      displayName: Copy file
      inputs:
        Contents: secret.txt
        targetFolder: '$(Build.ArtifactStagingDirectory)'
    
    - task: PublishBuildArtifacts@1
      displayName: Publish Artifact
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
        ArtifactName: 'drop'
        publishLocation: 'Container'
    
  8. Selecione Salvar e executar e, em seguida, selecione-o mais uma vez para confirmar suas alterações e acionar o pipeline. Você pode ser solicitado a permitir o acesso do pipeline aos recursos do Azure, se solicitado, selecione Permitir. Você só terá que aprovar seu pipeline uma vez.

  9. Selecione a tarefa CmdLine para exibir os logs.

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

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

    Uma captura de tela mostrando o artefato publicado na guia resumo.

  11. Selecione soltar>secret.txt para baixá-lo.

    Uma captura de tela mostrando como baixar o artefato publicado.

  12. 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.

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:

az account set --subscription <YOUR_SUBSCRIPTION_ID>

az login

$spnObjectId = az ad sp show --id <YOUR_SERVICE_PRINCIPAL_ID>

az keyvault set-policy --name <YOUR_KEY_VAULT_NAME> --object-id $spnObjectId --secret-permissions get list