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.

Neste tutorial, vai aprender a:

  • Criar um principal de serviço
  • Criar uma conexão de serviço
  • Configure seus pontos de acesso de entrada
  • Consultar um cofre de chaves privado do Azure a partir do 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

Comece criando uma nova entidade de serviço, isso permitirá que você acesse os recursos do Azure. Em seguida, você precisará criar uma nova conexão de serviço ARM no Azure DevOps e, em seguida, configurar uma credencial federada para sua entidade de serviço no Azure antes de verificar e salvar sua conexão de serviço no Azure DevOps.

  1. Navegue para o portal do Azure.

  2. Abra o Cloud Shell na barra de menus 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 e, em seguida, selecione Next.

  4. Em Tipo de identidade, selecione Registro de aplicativo (automático) no menu suspenso.

  5. Para Credential, deixe o valor recomendado padrão: Workload identity federation.

  6. Para Nível de escopo, selecione **Assinatura e selecione sua assinatura no menu suspenso.

  7. Selecione um grupo de recursos se quiser limitar o acesso apenas ao grupo de recursos especificado.

  8. Forneça um nome para sua conexão de serviço e 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.

  9. Quando terminar, selecione Guardar.

    Uma captura de tela exibindo como configurar uma conexão de serviço ARM para uma entidade de serviço.

Criar uma credencial federada

  1. Navegue até o portal do Azure, insira a ID do Cliente da entidade de serviço na barra de pesquisa e selecione seu Aplicativo.

  2. Em Gerenciar, selecione Certificados & segredos>Credenciais federadas.

  3. Selecione Adicionar credencial e, em seguida, para Cenário de credenciais federadas, selecione Outro emissor.

  4. Para Emissor, cole a seguinte URL substituindo o espaço reservado pelo GUID da sua organização. Você pode encontrar o ID da sua organização navegando até Configurações>da organização Microsoft Entra> Baixe a lista de organizações do Azure DevOps conectadas ao seu diretório.

    https://vstoken.dev.azure.com/<ORGANIZATION_ID>
    
  5. Para Identificador de assunto, cole a seguinte URL substituindo o espaço reservado pelo nome da organização, nome do projeto e nome da conexão de serviço.

    sc://ORGANIZATION_NAME/PROJECT_NAME/SERVICE_CONNECTION_NAME
    
  6. Forneça um Nome para sua credencial federada e selecione Adicionar 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 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.

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.

Criar uma conexão 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.

  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 a ligação de serviço que criou anteriormente, selecione o cofre de chaves e, em seguida, selecione Autorizar.

  5. Em Variáveis, selecione Adicionar para adicionar o seu segredo e, em seguida, selecione Guardar quando terminar.

Nota

Verifique se a conexão de serviço tem as permissões Obter e listar e se a entidade de serviço recebe a função Usuário de Segredos do Cofre da Chave no cofre de chaves privadas.

1.1 Configurar as permissões de conexão de serviço

  1. Navegue até o cofre de chaves do Azure e selecione Políticas de acesso.

  2. Selecione Criar e, em Permissões secretas, adicione as permissões Obter e Listar e selecione Avançar.

  3. Adicione a sua ligação de serviço na barra de pesquisa, selecione-a e, em seguida, selecione Seguinte.

  4. Selecione Seguinte mais uma vez, reveja as suas definições e, em seguida, selecione Rever + criar quando terminar.

1.2 Configurar as permissões da entidade de serviço

  1. Navegue até o cofre de chaves do Azure e selecione Controle de acesso (IAM).

  2. Selecione Adicionar>atribuição> de função e, em seguida, selecione a guia Função.

  3. Selecione a função Usuário dos Segredos do Cofre da Chave e selecione Avançar.

  4. Selecione Selecionar membros> , adicionar sua entidade >de serviço Selecionar.

  5. Selecione Rever + atribuir quando terminar.

  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.