Partilhar via


Aceda a um cofre de chaves privadas a partir do seu pipeline

O Azure Key Vault oferece uma solução segura para gerenciar credenciais como chaves, segredos e certificados com segurança perfeita. Usando o Azure Pipelines, você pode simplificar o processo de acesso e uso de cofres de chaves, facilitando o armazenamento e a recuperação de credenciais.

Em determinados cenários, as organizações priorizam a segurança restringindo o acesso aos cofres de chaves exclusivamente às redes virtuais designadas do Azure para garantir o mais alto nível de segurança para aplicativos críticos.

Este artigo irá orientá-lo através da configuração de seus pontos de acesso de entrada para acessar e usar um cofre de chave privada em seu pipeline.

Pré-requisitos

Aceder a um cofre de chaves privadas

O Azure Pipelines permite que os desenvolvedores vinculem um Cofre da Chave do Azure a um grupo variável e mapeiem segredos seletivos do cofre para ele. Um cofre de chaves usado como um grupo de variáveis pode ser acessado:

  1. No Azure DevOps, durante o tempo de configuração do grupo de variáveis.

  2. De um agente auto-hospedado, durante o tempo de execução do trabalho de pipeline.

Um diagrama mostrando os dois caminhos diferentes para acessar um cofre de chave privada.

Criar um principal de serviço

Vamos começar criando uma nova entidade de serviço, isso nos permitirá acessar os recursos do Azure. Em seguida, criaremos uma nova conexão de serviço ARM no Azure DevOps usando essa entidade de serviço para nos permitir consultar nosso Cofre da Chave do Azure a partir do Azure Pipelines.

  1. Navegue para o portal do Azure.

  2. Abra o Cloud Shell e selecione Bash.

  3. Execute o seguinte comando para criar uma nova entidade de serviço:

    az ad sp create-for-rbac --name YOUR_SERVICE_PRINCIPAL_NAME
    
  4. Certifique-se de copiar a saída, pois vamos usá-la para criar a conexão de serviço na próxima etapa.

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 Nova conexão de serviço.

  3. Selecione Azure Resource Manager, >Next e, em seguida, selecione Service principal (manual)>Next.

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

  5. Introduza as informações da entidade de serviço e, em seguida, selecione Verificar.

  6. Após a verificação bem-sucedida, nomeie sua conexão de serviço, adicione uma descrição e marque a caixa de seleção Conceder permissão de acesso a todos os pipelines . Selecione Verificar e salvar quando terminar.

  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.

  3. Selecione Azure Resource Manager, nomeie sua conexão de serviço e selecione Azure Cloud for Environment and Subscription para o Nível de Escopo.

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

  5. Introduza as informações da entidade de serviço e, em seguida, selecione Verificar ligação.

  6. Marque a caixa de seleção Permitir que todos os pipelines usem esta conexão e selecione Ok quando terminar.

Gorjeta

Se não conseguir verificar a ligação da entidade de serviço, conceda ao Leitor da entidade de serviço acesso à sua subscrição.

Aceder a um cofre de chave privada a partir do Azure Devops

Nesta seção, exploraremos dois métodos para acessar um cofre de chave privada do Azure DevOps. Primeiro, usaremos Grupos de Variáveis para vincular e mapear segredos de nosso cofre de chaves, seguido pela configuração do acesso de entrada permitindo intervalos de IP estáticos. Estabelecemos acesso de entrada porque o Azure Pipelines usa o IP Público do Azure DevOps publicado ao consultar o Cofre da Chave do Azure de um Grupo de Variáveis. Portanto, adicionando conexões de entrada ao firewall do Azure Key Vault, podemos nos conectar com êxito ao nosso Azure Key Vault.

Para nossa segunda abordagem, demonstraremos a adição dinâmica do endereço IP do agente hospedado pela Microsoft à lista de permissões do firewall do nosso cofre de chaves, consultando o cofre de chaves e, posteriormente, removendo o IP após a conclusão. Essa segunda abordagem é para fins de demonstração e não é a abordagem recomendada pelo Azure Pipelines.

1 - Mapeie segredos do cofre de chaves com um grupo variável

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

  2. Selecione Biblioteca de Pipelines>e, em seguida, selecione + Grupo de variáveis.

  3. Nomeie seu grupo de variáveis e selecione o botão de alternância para habilitar o botão Vincular segredos de um Cofre de Chaves do Azure como variável .

  4. Selecione sua conexão de serviço do Azure criada anteriormente no menu suspenso e selecione seu cofre de chaves.

    Uma captura de tela mostrando como vincular um grupo de variáveis a um Cofre de Chaves do Azure com um erro indicando permissões de obtenção e lista ausentes.

  5. Se você encontrar a mensagem de erro: A conexão de serviço especificada do Azure precisa ter permissões de gerenciamento de segredo "Obter, Listar" no cofre de chaves selecionado. como mostrado acima. Navegue até o cofre de chaves no portal do Azure, selecione Controle de acesso (IAM)>Adicionar usuário>de segredos do cofre de chave de atribuição>de função Em seguida, adicione sua entidade de serviço e selecione Revisar + atribuir quando terminar.

    Uma captura de tela mostrando como adicionar uma entidade de serviço como um usuário secreto para um Cofre de Chaves do Azure.

  6. Adicione os seus segredos e, em seguida, selecione Guardar quando terminar.

2 - Configurar o acesso de entrada do Azure DevOps

Para habilitar o acesso ao seu cofre de chaves a partir do Azure DevOps, você deve conceder acesso a partir de intervalos de IP estáticos específicos. Esses intervalos são determinados pela localização geográfica da sua organização do Azure DevOps.

  1. Entre na sua organização do Azure DevOps.

  2. Selecione Definições da organização.

  3. Navegue até Visão geral, onde você encontrará a localização geográfica listada na parte inferior da página.

    Uma captura de tela mostrando como localizar a localização geográfica da sua organização do Azure DevOps.

  4. Encontre as suas gamas IP V4 geográficas.

  5. Configure seu cofre de chaves para permitir o acesso a partir de intervalos de IP estáticos.

3 - Consultar um cofre de chave privada com um grupo de variáveis

Neste exemplo, usamos o grupo de variáveis, configurado anteriormente e autorizado com uma entidade de serviço, para consultar e copiar nosso segredo do nosso Cofre de Chaves do Azure privado simplesmente usando o grupo de variáveis vinculadas. O Azure Pipelines usa o IP público postado ao consultar o Cofre da Chave do Azure de um Grupo de Variáveis, portanto, verifique se você configurou o acesso de entrada para que isso funcione corretamente:

variables:
  group: mySecret-VG

steps:
- task: CmdLine@2
  inputs:
    script: 'echo $(mySecret) > secret.txt'

- task: CopyFiles@2
  inputs:
    Contents: secret.txt
    targetFolder: '$(Build.ArtifactStagingDirectory)'

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'

Método alternativo - Permitir dinamicamente o IP do agente hospedado pela Microsoft

Nesta segunda abordagem, começaremos consultando o IP do agente hospedado pela Microsoft no início de nosso pipeline. Em seguida, vamos adicioná-lo à lista de permissões do cofre de chaves, prosseguir com as tarefas restantes e, finalmente, remover o IP da lista de permissões do firewall do cofre de chaves.

Nota

Essa abordagem é apenas para fins de demonstração e não é a abordagem recomendada pelo Azure Pipelines.

- task: AzurePowerShell@5
  displayName: 'Allow agent IP'
  inputs:
    azureSubscription: 'YOUR_SERVICE_CONNECTION_NAME'
    azurePowerShellVersion: LatestVersion
    ScriptType: InlineScript
    Inline: |
     $ip = (Invoke-WebRequest -uri "http://ifconfig.me/ip").Content
     Add-AzKeyVaultNetworkRule -VaultName "YOUR_KEY_VAULT_NAME" -ResourceGroupName "YOUR_RESOURCE_GROUP_NAME" -IpAddressRange $ip
     echo "##vso[task.setvariable variable=agentIP]ip"

- task: AzureKeyVault@2
  inputs:
    azureSubscription: 'YOUR_SERVICE_CONNECTION_NAME'
    KeyVaultName: 'YOUR_KEY_VAULT_NAME'
    SecretsFilter: '*'
    RunAsPreJob: false

- task: AzurePowerShell@5
  displayName: 'Remove agent IP'
  inputs:
    azureSubscription: 'YOUR_SERVICE_CONNECTION_NAME'
    azurePowerShellVersion: LatestVersion
    ScriptType: InlineScript
    Inline: |
     $ipRange = $env:agentIP + "/32"
     Remove-AzKeyVaultNetworkRule -VaultName "YOUR_KEY_VAULT_NAME" -IpAddressRange $ipRange
  condition: succeededOrFailed()

Importante

Certifique-se de que a entidade de serviço que está a utilizar para aceder ao cofre de chaves a partir do pipeline mantém a função de contribuidor do cofre de chaves no controlo de acesso (IAM) do cofre de chaves.

Aceder a um cofre de chaves privadas a partir de um agente auto-alojado

Para ter a capacidade de acessar um cofre de chave privada de um agente do Azure Pipelines, você precisará usar um agente auto-hospedado (Windows, Linux, Mac) ou agentes do Scale set. Isso ocorre porque os agentes Microsoft Hosted, como outros serviços de computação genéricos, não estão incluídos na lista de serviços confiáveis do cofre de chaves.

Para estabelecer conectividade com seu cofre de chave privada, você deve fornecer uma conectividade de linha de visão configurando um ponto de extremidade privado para seu cofre de chaves. Esse ponto de extremidade deve ser roteável e ter seu nome DNS privado resolúvel a partir do agente de pipeline auto-hospedado.

1 - Configurar o acesso de entrada de um agente auto-hospedado

  1. Siga as instruções fornecidas para Criar uma rede virtual.

  2. No portal do Azure, use a barra de pesquisa na parte superior da página para localizar seu Cofre da Chave do Azure.

  3. Depois de localizar o cofre de chaves nos resultados da pesquisa, selecione-o e navegue até Configurações>de rede.

  4. Selecione Conexões de ponto de extremidade privado e, em seguida, selecione Criar para criar um novo ponto de extremidade privado.

    Uma captura de tela mostrando como criar uma nova conexão de ponto de extremidade privado para um Cofre de Chaves do Azure.

  5. Selecione o Grupo de Recursos que hospeda a rede virtual que você criou anteriormente. Forneça um Nome e um Nome da Interface de Rede para sua instância e certifique-se de selecionar a mesma Região da rede virtual criada anteriormente. Selecione Avançar quando terminar.

    Uma captura de tela mostrando como configurar a guia noções básicas ao criar uma nova instância de ponto de extremidade privada para seu Cofre de Chaves do Azure.

  6. Selecione Conectar a um recurso do Azure em meu diretório para o método Connection e escolha Microsoft.KeyVault/vaults no menu suspenso para o tipo de recurso. Selecione seu recurso no menu suspenso. O subrecurso Target será preenchido automaticamente com o valor: vault. Selecione Avançar quando terminar.

    Uma captura de tela mostrando como configurar a guia de recurso ao criar uma nova instância de ponto de extremidade privada para seu Cofre de Chaves do Azure.

  7. Na guia Rede Virtual, selecione a Rede virtual e a Sub-rede que você criou anteriormente e deixe o restante dos campos como padrão. Selecione Avançar quando terminar.

  8. Continue pelas guias DNS e Tags , aceitando as configurações padrão. No separador Rever + Criar, selecione Criar quando terminar.

  9. Depois que o recurso for implantado, navegue até as configurações>do cofre> de chaves Conexões de ponto de extremidade privado de rede>, seu ponto de extremidade privado deve ser listado com um estado de conexão aprovado. Se você estiver vinculando a um recurso do Azure em um diretório diferente, precisará aguardar até que o proprietário do recurso aprove sua solicitação de conexão.

    Uma captura de tela mostrando uma conexão de ponto de extremidade privada aprovada

2 - Permita a sua rede virtual

  1. Navegue até o portal do Azure e localize seu Cofre da Chave do Azure.

  2. Selecione Configurações>de rede e verifique se você está na guia Firewalls e redes virtuais.

  3. Selecione Adicionar uma rede>virtual Adicionar redes virtuais existentes.

  4. Selecione a sua Subscrição no menu pendente e, em seguida, selecione a rede virtual que criou anteriormente e, em seguida, selecione as suas Sub-redes.

  5. Selecione Adicionar quando terminar e, em seguida, desloque-se para a parte inferior da página e selecione Aplicar para guardar as alterações.

    Uma captura de tela mostrando como adicionar uma rede virtual existente ao firewall do Cofre de Chaves do Azure.

3 - Consultar um cofre de chave privada a partir de um agente auto-hospedado

O exemplo a seguir usa um agente configurado na VM da rede virtual para consultar o cofre de chave privada por meio do grupo de variáveis:

pool: Self-hosted-pool

variables:
  group: mySecret-VG

steps:
- task: CmdLine@2
  inputs:
    script: 'echo $(mySecret) > secret.txt'

- task: CopyFiles@2
  inputs:
    Contents: secret.txt
    targetFolder: '$(Build.ArtifactStagingDirectory)'

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'

Se preferir não conceder acesso de entrada do Azure DevOps ao seu cofre de chave privada, você pode usar a tarefa AzureKeyVault para consultar seu cofre de chaves. No entanto, você deve garantir que você permita a rede virtual que hospeda seu agente nas configurações de firewall do cofre de chaves.

pool: Self-hosted-pool

steps:
- task: AzureKeyVault@2
  inputs:
    azureSubscription: '$(SERVICE_CONNECTION_NAME)'
    keyVaultName: $(KEY_VAULT_NAME)
    SecretsFilter: '*'

- task: CmdLine@2
  inputs:
    script: 'echo $(mySecret) > secret.txt'

- task: CopyFiles@2
  inputs:
    Contents: secret.txt
    targetFolder: '$(Build.ArtifactStagingDirectory)'

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'

Resolver problemas

Se você estiver enfrentando os seguintes erros, siga as etapas nesta seção para solucionar e resolver o problema:

  • Public network access is disabled and request is not from a trusted service nor via an approved private link.

Isso indica que o acesso público foi desativado e nem uma conexão de ponto de extremidade privada nem exceções de firewall foram configuradas. Siga as etapas em [#configure-inbound-access-from-a-self--hosted-agent] e Configure o acesso de entrada do Azure DevOps para configurar o acesso ao seu cofre de chave privada.

  • Request was not allowed by NSP rules and the client address is not authorized and caller was ignored because bypass is set to None Client address: <x.x.x.x>

Essa mensagem de erro indica que o acesso público do cofre de chaves foi desativado e a opção Permitir que serviços confiáveis da Microsoft ignorem esse firewall está desmarcada, mas o endereço IP do cliente não foi adicionado ao firewall do cofre de chaves. Navegue até o cofre de chaves no portal do Azure, depois Configurações>de Rede e adicione o IP do cliente à lista de permissões do firewall.

  • Error: Client address is not authorized and caller is not a trusted service.

Certifique-se de adicionar os intervalos IPV4 da sua geografia à sua lista de permissões do cofre de chaves. Consulte Configurar acesso de entrada do Azure DevOps para obter detalhes. Como alternativa, você pode ir para Permitir dinamicamente o IP do agente hospedado pela Microsoft para saber como adicionar o IP do cliente ao firewall do cofre de chaves durante o tempo de execução.