Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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 através do seu pipeline
Pré-requisitos
Uma organização e um projeto do Azure DevOps. Crie uma organização ou um projeto , caso ainda não o tenha feito.
Uma subscrição do Azure. Crie uma conta gratuita do Azure se ainda não tiver uma.
Um Cofre de Chaves do Azure. Crie um novo Cofre da Chave do Azure, caso ainda não o tenha feito.
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:
A partir do Azure DevOps, durante a configuração do grupo de variáveis.
De um agente auto-hospedado, durante o tempo de execução do trabalho de pipeline.
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.
Navegue para o portal do Azure.
Abra o Cloud Shell na barra de menus e selecione Bash.
Execute o seguinte comando para criar um novo principal de serviço:
az ad sp create-for-rbac --name YOUR_SERVICE_PRINCIPAL_NAMECertifique-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
Entre em sua organização do Azure DevOps e navegue até seu projeto.
Selecione Definições do projeto>Conexões de serviço>Nova conexão de serviço.
Selecione Azure Resource Manager e, em seguida, selecione Next.
Em Tipo de identidade, selecione Registro de aplicativo (automático) no menu suspenso.
Para Credential, deixe o valor recomendado padrão: Workload identity federation.
Para Nível de escopo, selecione **Assinatura e selecione sua assinatura no menu suspenso.
Selecione um grupo de recursos se quiser limitar o acesso apenas ao grupo de recursos especificado.
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.
Quando terminar, selecione Guardar.
Criar uma credencial federada
Navegue até o portal do Azure, insira a ID do Cliente da entidade de serviço na barra de pesquisa e selecione seu Aplicativo.
Em Gerir, selecione Certificados e segredos>Credenciais federadas.
Selecione Adicionar credencial e, em seguida, para Cenário de credenciais federadas, selecione Outro emissor.
Para Emissor, cole a seguinte URL substituindo o placeholder pelo GUID da sua organização. Você pode encontrar o ID da sua organização navegando até Configurações da organização>Microsoft Entra. Em seguida, baixe a lista de organizações do Azure DevOps conectadas ao seu diretório.
https://login.microsoftonline.com/<TENANT_ID>/v2.0Para o Identificador de Sujeito, cole a seguinte URL substituindo o espaço reservado pelo nome da sua organização, nome do projeto, e nome da conexão de serviço.
ENTRA_PREFIX/sc/ORGANIZATION_NAME/PROJECT_NAME/SERVICE_CONNECTION_NAMEForneça um Nome para sua credencial federada e selecione Adicionar quando terminar.
Criar uma conexão de serviço
Entre em sua organização do Azure DevOps e navegue até seu projeto.
Selecione Definições do projeto>Conexões de serviço>Nova conexão de serviço.
Selecione Azure Resource Manager, >Next e, em seguida, selecione Service principal (manual)>Next.
Selecione Azure Cloud para Ambiente e Subscrição para o Nível de Âmbito, em seguida, introduza o seu ID de Subscrição e o seu Nome de Subscrição.
Introduza as informações da entidade de serviço e, em seguida, selecione Verificar.
Após a verificação bem-sucedida, dê um nome à sua conexão de serviço, adicione uma descrição e marque a caixa de 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 à entidade de serviço acesso Leitor à 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 utiliza o IP Público designado do Azure DevOps quando consulta o Cofre das Chaves do Azure a partir 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 alojado pela Microsoft à lista de permissões do firewall do nosso cofre de chaves. Em seguida, efetuaremos a consulta no cofre de chaves e, posteriormente, removeremos 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
Entre em sua organização do Azure DevOps e navegue até seu projeto.
Selecione Pipelines>Biblioteca e, em seguida, selecione + Grupo de variáveis.
Dê um nome ao seu grupo de variáveis e, em seguida, selecione o interruptor para ativar o botão para vincular segredos de um Cofre de Chaves do Azure como variáveis.
Selecione a ligação de serviço que criou anteriormente, selecione o cofre de chaves e, em seguida, selecione Autorizar.
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 Lista e se a entidade de serviço está atribuída a função Utilizador de Segredos do Cofre da Chave no seu cofre de chaves privado.
1.1 Configurar as permissões de conexão de serviço
Navegue até o cofre de chaves do Azure e selecione Políticas de acesso.
Selecione Criar e, em Permissões secretas, adicione as permissões Obter e Listar e selecione Avançar.
Adicione a sua ligação de serviço na barra de pesquisa, selecione-a e, em seguida, selecione Seguinte.
Selecione Seguinte mais uma vez, reveja as suas definições e, em seguida, selecione Rever e criar quando terminar.
1.2 Configurar as permissões da entidade de serviço
Navegue até o cofre de chaves do Azure e selecione Controle de acesso (IAM).
Selecione Adicionar>Adicionar atribuição de função> e, em seguida, selecione a guia Função.
Selecione a função de Utilizador dos Segredos do Cofre de Chaves e, em seguida, selecione Seguinte.
Selecione Selecionar membros> adicione o seu principal de serviço >Selecionar.
Selecione Rever e atribuir quando terminar.
Entre em sua organização do Azure DevOps e navegue até seu projeto.
Selecione Pipelines>Biblioteca e, em seguida, selecione + Grupo de variáveis.
Dê um nome ao seu grupo de variáveis e, em seguida, selecione o interruptor para ativar o botão para vincular segredos de um Cofre de Chaves do Azure como variáveis.
Selecione a sua ligação de serviço do Azure criada anteriormente na lista pendente e, em seguida, selecione o seu cofre de chaves.
Se encontrar a mensagem de erro: A conexão de serviço especificada do Azure precisa ter permissões de gestão de segredos "Obter, Listar" no cofre de chaves selecionado. conforme mostrado acima. Navegue até o seu cofre de chaves no portal do Azure, selecione Controle de acesso (IAM)>Adicionar atribuição de função>, depois adicione o utilizador de segredos do cofre de chaves e em seguida adicione a sua entidade de serviço, depois selecione Revisar + atribuir quando terminar.
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.
Entre na sua organização do Azure DevOps.
Selecione Definições da organização.
Navegue até Visão geral, onde você encontrará a localização geográfica listada na parte inferior da página.
Encontre os seus intervalos IP V4 geográficos.
Importante
Para conexões de entrada dos Estados Unidos, certifique-se de adicionar os intervalos de IP para todas as regiões dos EUA.
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 Azure Key Vault do Grupo de Variáveis, por isso, certifique-se de ter configurado o acesso de entrada para que isto 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 permitida do cofre de chaves, continuar com as tarefas restantes e, finalmente, remover o IP da lista permitida 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 o principal 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) deste.
Aceder a um cofre de chaves privadas a partir de um agente auto-hospedado
Para ter a capacidade de aceder a um cofre de chaves privadas a partir de um agente do Azure Pipelines, precisará de utilizar um agente auto-hospedado (Windows, Linux, Mac) ou agentes de conjunto de escalonamento. 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 o seu cofre de chaves privadas, deve garantir uma conectividade de linha de vista configurando um ponto de extremidade privado para o seu cofre de chaves. Este ponto de extremidade deve ser roteável e ter o 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
Siga as instruções fornecidas para Criar uma rede virtual.
No portal do Azure, use a barra de pesquisa na parte superior da página para localizar seu Cofre da Chave do Azure.
Depois de localizar o cofre de chaves nos resultados da pesquisa, selecione-o e, em seguida, navegue até Configurações>Rede.
Selecione Conexões de ponto de extremidade privado e, em seguida, selecione Criar para criar um novo ponto de extremidade privado.
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.
Selecione Conectar a um recurso do Azure no meu diretório para o método de ligação e escolha Microsoft.KeyVault/vaults no menu suspenso para o Tipo de Recurso. Selecione o seu recurso na lista suspensa. O subrecurso Target será preenchido automaticamente com o valor: vault. Selecione Avançar quando terminar.
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.
Navegue pelas abas DNS e Tags, aceitando as configurações padrão. Na aba Rever + Criar, selecione Criar quando terminar.
Uma vez que o recurso esteja implantado, navegue até o seu cofre de chaves >Configurações>Rede>Conexões de ponto de extremidade privado, o seu ponto de extremidade privado deve estar listado com um estado de conexãoaprovado. 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.
2 - Permita a sua rede virtual
Navegue até o portal do Azure e localize seu Cofre da Chave do Azure.
Selecione Configurações>Rede, e certifique-se de que está no separador Firewalls e redes virtuais.
Selecione Adicionar uma rede virtual>Adicionar redes virtuais existentes.
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.
Selecione Adicionar quando terminar e, em seguida, desloque-se para a parte inferior da página e selecione Aplicar para guardar as alterações.
3 - Consultar um cofre de chaves privadas 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 chaves privado 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, deve-se assegurar que a rede virtual que hospeda o seu agente esteja autorizada nas definiçõ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 final 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, pode ir para Permitir dinamicamente o IP do agente hospedado pela Microsoft para aprender a adicionar o IP do cliente ao firewall do cofre de chaves durante o tempo de execução.