Utilizar os segredos do Azure Key Vault nos Pipelines do Azure

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

O Azure Key Vault é um serviço na cloud que ajuda os programadores a armazenar e gerir de forma segura informações sensíveis, como chaves API, credenciais e certificados. O Key Vault suporta dois tipos de contentores: cofres e pools de módulos de segurança de hardware gerido (HSM). Os cofres podem armazenar tanto chaves, segredos e certificados, apoiados por Software e por Módulos de Segurança de Hardware (HSM). Pools de HSM geridos suportam exclusivamente chaves protegidas por HSM.

Neste artigo, aprende como criar um cofre de chaves, adicionar um segredo, configurar políticas de acesso e depois usar esse segredo no Azure Pipelines. Este tutorial utiliza um cofre de chaves com acesso público à rede. Se precisar de aceder a um cofre de chaves privadas a partir do seu pipeline, veja Aceder a um cofre de chave privada a partir do seu pipeline. Para ligar segredos do Key Vault a grupos de variáveis, consulte Ligar um grupo de variáveis a segredos em Azure Key Vault.

Pré-requisitos

Categoria Requerimentos
Azure DevOps - Uma organização de DevOps do Azure.
- Um projeto Azure DevOps.
Azure Uma assinatura do Azure.

Obter o código

Se não tiver o seu próprio projeto, importe o seguinte repositório de exemplos para o seu repositório Azure:

  1. Inicie sessão na sua organização do Azure DevOps e, em seguida, aceda ao 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 cofre de chaves

Para criar um novo cofre de chaves no Azure usando a CLI do Azure, siga estes passos:

  1. Vai ao portal Azure, e depois seleciona Azure Cloud Shell no canto superior direito.

  2. Se a sua conta estiver associada a várias subscrições do Azure, defina a sua subscrição predefinida.

    az account set --subscription <YOUR_SUBSCRIPTION_NAME_OR_ID>
    
  3. Defina uma região Azure predefinida. Para ver uma lista de regiões disponíveis, execute az account list-locations.

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

    az group create --name <YOUR_RESOURCE_GROUP_NAME>
    
  5. Cria um novo cofre de chaves.

    az keyvault create \
      --name <YOUR_KEY_VAULT_NAME> \
      --resource-group <YOUR_RESOURCE_GROUP_NAME>
    
  6. Adiciona um segredo ao teu cofre de chaves.

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

Configurar a autenticação

Depois de criar o seu cofre de chaves, o passo seguinte é configurar a autenticação. Selecione Identidade Gerida ou Principal de Serviço e siga as instruções para configurar a autenticação.

Criar uma identidade gerida atribuída pelo utilizador

  1. Vai ao portal Azure, e depois pesquisa por Identidades Geridas na barra de pesquisa.

  2. Selecione Criar e forneça a seguinte informação:

    • Subscrição: Selecione a sua subscrição Azure no menu suspenso.
    • Grupo de recursos: selecione um grupo de recursos existente ou crie um novo.
    • Região: Selecione a região onde a identidade gerida é criada.
    • Nome: Introduza um nome para a identidade gerida atribuída pelo utilizador.
  3. Seleciona Rever + criar e depois seleciona Criar para iniciar a implementação.

  4. Após a implementação terminar, selecione Ir para o recurso e copie os valores do ID da Subscrição e do ID do Cliente . Precisas destes valores em etapas posteriores.

  5. Em Definições, selecione Propriedades e copie o valor do ID de Inquilino da sua identidade gerida para uso posterior.

Configurar políticas de acesso ao cofre de chaves

  1. Vai ao portal Azure, e usa a barra de pesquisa para localizar o cofre de chaves que criaste anteriormente.

  2. Selecione políticas de acesso e depois 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. Cole o ID do Cliente da identidade gerida que criou anteriormente na barra de pesquisa e depois selecione a identidade gerida.

  5. Selecione Seguinte e, depois, selecione Seguinte novamente.

  6. Revise os detalhes da política de acesso e selecione Criar para aplicar a política.

Criar uma conexão de serviço

  1. Inicia sessão no Azure DevOps e depois vai ao teu projeto.

  2. Selecione Definições do projeto>Conexões de serviço>Nova conexão de serviço.

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

  4. Para Tipo de Identidade, selecione Identidade Gerida.

  5. No Passo 1: Detalhes de identidade geridos, forneça a seguinte informação:

    • Subscrição para identidade gerida: selecione a subscrição que contém a sua identidade gerida.
    • Grupo de recursos para identidade gerida: Selecione o grupo de recursos que aloja a sua identidade gerida.
    • Identidade gerida: Selecione a sua identidade gerida na lista suspensa.
  6. Para o Passo 2: Azure Scope, forneça a seguinte informação:

    • Nível de escopo para conexão de serviço: Selecione Assinatura.
    • Subscrição para ligação ao serviço: Selecione a subscrição a que a identidade gerida acede.
    • Grupo de recursos para ligação ao serviço: (Opcional) Especifique um grupo de recursos para limitar o acesso da identidade gerida a um único grupo de recursos.
  7. Para o Passo 3: Detalhes da ligação ao serviço, forneça a seguinte informação:

    • Nome da ligação de serviço: Insira um nome para a ligação de serviço.
    • Referência de gestão de serviços: (Opcional) Inclua informação de contexto de uma base de dados ITSM.
    • Descrição: (Opcional) Introduzir uma descrição.
  8. Em Segurança, a opção Conceder permissão de acesso a todos os pipelines permite que todos os pipelines utilizem esta ligação de serviço. Não recomendamos esta opção. Em vez disso, autorize cada pipeline individualmente a usar a conexão de serviço.

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

    Captura de ecrã que mostra como criar uma ligação de serviço de identidade gerida no Azure Resource Manager.

Aceda aos segredos do cofre de chaves a partir do seu fluxo de trabalho

Aviso

Este tutorial é apenas para fins educacionais. Para melhores práticas de segurança e orientações sobre como trabalhar em segurança com segredos, consulte Gerir segredos nas suas aplicações de servidor com Azure Key Vault.

  1. Inicia sessão no Azure DevOps e depois vai ao teu projeto.

  2. Selecione Cadeias>Nova Cadeia.

  3. Selecione Repositórios do Azure Git (YAML) e, em seguida, selecione seu repositório.

  4. Selecione o modelo de pipeline inicial.

  5. O pipeline padrão inclui comandos de eco como exemplo. Não precisas destes comandos, por isso podes removê-los.

  6. Adiciona a tarefa Azure Key Vault ao teu pipeline. Substitua os marcadores pelo nome da ligação de serviço que criou anteriormente e pelo nome do cofre de chaves. O seu ficheiro YAML deve parecer semelhante ao seguinte exemplo:

    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. Adicione as seguintes tarefas para copiar e publicar o segredo. Este exemplo é apenas para fins demonstrativos. Não o uses num 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. Se for solicitado, selecione Permitir para conceder acesso ao pipeline aos recursos do Azure.

  9. Depois de o pipeline começar, selecione a tarefa CmdLine para visualizar os registos.

    Captura de ecrã que mostra os registos de tarefas da linha de comandos.

  10. Quando a execução do pipeline terminar, volte ao resumo do pipeline e selecione o artefacto publicado.

    Captura de ecrã que mostra o artefato publicado na aba de resumo.

  11. Selecione drop>secret.txt para descarregar o ficheiro.

    Captura de ecrã que mostra como descarregar o artefacto publicado.

  12. Abre o ficheiro de texto descarregado. Deve conter o segredo recuperado do teu cofre de chaves.

Limpar recursos

Para eliminar os recursos que criou, siga estes passos:

  1. Se criou uma nova organização para alojar o seu projeto, veja como eliminar a sua organização. Caso contrário, apaga o teu projeto.

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

    az group delete --name <YOUR_RESOURCE_GROUP_NAME>
    

Solução de problemas

Erro: "O utilizador ou grupo não tem permissão para a lista de segredos"

Este erro ocorre quando o principal de serviço ou a identidade gerida usada pelo seu pipeline não tem permissão para listar segredos no cofre de chaves. Para resolver este problema, certifique-se de que a identidade tem as permissões Get e List para segredos. Execute os seguintes comandos para conceder as permissões necessárias ao seu principal de serviço:

az login

az account set --subscription <YOUR_SUBSCRIPTION_ID>

$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