Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Azure Key Vault oferece uma forma segura de gerir credenciais, incluindo chaves, segredos e certificados. Ao usar o Azure Pipelines, pode simplificar o processo de aceder e usar cofres de chaves para armazenar e recuperar credenciais.
Em certos cenários, as organizações dão prioridade à segurança restringindo o acesso aos cofres de chaves exclusivamente a redes virtuais Azure designadas. Esta restrição garante o mais alto nível de segurança para aplicações críticas. Neste tutorial, aprende a configurar a autenticação e o acesso de entrada para que o seu pipeline possa consultar e recuperar dados de um Azure Key Vault privado.
Pré-requisitos
| Produto | Requirements |
|---|---|
| Azure DevOps | - Uma Azure DevOps organização. - Um projeto Azure DevOps . - Permissões: - Para conceder acesso a todos os pipelines no projeto: Você deve ser membro do grupo Administradores de Projeto. - Para criar ligações de serviço: É necessário ter a função de Administrador ou Criador para ligações de serviço. |
| Azure | - Uma assinatura do Azure. - Um cofre de chaves Azure. |
Aceder a um cofre de chaves privadas
Os programadores podem usar o Azure Pipelines para ligar um cofre de chaves Azure a um grupo de variáveis e mapear segredos seletivos do cofre para ele. Um cofre de chaves usado como grupo de variáveis pode ser acedido:
- Do Azure DevOps ao configurar o grupo de variáveis.
- De um agente autoalojado durante a execução do trabalho do pipeline.
Para configurar o acesso ao seu cofre de chaves privadas, complete os seguintes passos por ordem:
- Crie um principal de serviço para autenticar com recursos do Azure.
- Crie uma ligação de serviço Azure Resource Manager no Azure DevOps usando o principal de serviço.
- Crie uma credencial federada para o seu principal de serviço no Azure.
Criar um principal de serviço
Crie um principal de serviço para autenticar com recursos do Azure:
Vai para o portal Azure.
No menu superior, abre Azure Cloud Shell e depois seleciona Bash.
Execute o seguinte comando para criar um novo principal de serviço:
az ad sp create-for-rbac --name YOUR_SERVICE_PRINCIPAL_NAMECopia a saída do comando. Precisa destes valores no passo seguinte ao criar a ligação ao serviço.
Criar uma conexão de serviço
Depois de criar o seu principal de serviço, use os seus valores de saída para criar uma ligação de serviço ao Azure Resource Manager no Azure DevOps.
Inicie sessão na sua organização do Azure DevOps e, em seguida, aceda ao 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.
Para o tipo de Identidade, selecione Registo de Aplicação (Automático) no menu suspenso.
Para Credencial, mantenha o valor predefinido recomendado como federação de identidade de workload.
Para o nível de Escopo, selecione Assinatura e depois selecione a sua assinatura no menu dropdown.
Selecione um grupo de recursos se quiser limitar o acesso apenas ao grupo de recursos especificado.
Introduza um nome para a sua ligação de serviço e depois selecione a caixa Conceder permissão de acesso a todos os pipelines para permitir que todos usem esta ligação de serviço.
Selecione Guardar.
Criar uma credencial federada
Depois de guardar a sua ligação ao serviço, configure uma credencial federada no Azure para estabelecer confiança entre o seu principal de serviço e o Azure DevOps.
Vá ao portal Azure, introduza o ID do cliente do seu principal de serviço na barra de pesquisa e depois selecione a sua candidatura.
Em Gerir, selecione Certificados e segredos>Credenciais federadas.
Selecione Adicionar credencial e, em seguida, para Cenário de credenciais federadas, selecione Outro emissor.
Para o Emissor, cole este URL a seguir para substituir o marcador de posição pelo GUID da sua organização. Pode encontrar o ID da sua organização indo a Definições da organização>Microsoft Entra. Descarregue a lista de organizações Azure DevOps ligadas ao seu diretório.
https://login.microsoftonline.com/<TENANT_ID>/v2.0Para identificador de Sujeito, cole o URL seguinte. Substitua os marcadores de lugar pelo nome da sua organização, nome do projeto e nome da ligação ao serviço.
ENTRA_PREFIX/sc/ORGANIZATION_NAME/PROJECT_NAME/SERVICE_CONNECTION_NAMEIntroduza um nome para a sua credencial federada e depois selecione Adicionar.
Criar uma conexão de serviço
Depois de criar o seu principal de serviço, use os seus valores de saída para criar uma ligação de serviço ao Azure Resource Manager no Azure DevOps.
Inicie sessão na sua organização do Azure DevOps e, em seguida, aceda ao seu projeto.
Selecione Definições do projeto>Conexões de serviço>Nova conexão de serviço.
Selecione Azure Resource Manager>Next e depois selecione Service principal (manual)>Next.
Para Ambiente, selecione Azure Cloud, e para Nível de Escopo, selecione Subscrição. Depois introduza o seu ID de subscrição e o nome da sua subscrição.
Introduza as informações da entidade de serviço e, em seguida, selecione Verificar.
Após a verificação, dê um nome à sua ligação ao serviço, adicione uma descrição e depois selecione a opção Conceder permissão de acesso a todos os pipelines. Selecione Verificar e salvar.
Gorjeta
Se não conseguir verificar a sua ligação ao principal de serviço, conceda ao Leitor principal do serviço acesso à sua subscrição.
Aceder a um cofre de chave privada a partir do Azure DevOps
Esta secção aborda dois métodos para aceder a um cofre de chave privada a partir do Azure DevOps.
O primeiro método utiliza grupos de variáveis para associar e mapear segredos do seu cofre de chaves e, em seguida, configurar o acesso de entrada, permitindo intervalos estáticos de endereços IP. O Azure Pipelines usa o IP público do Azure DevOps ao consultar um cofre de chaves de um grupo de variáveis, por isso é necessário permitir esses intervalos de IP no firewall do cofre de chaves.
O segundo método adiciona dinamicamente o endereço IP do agente hospedado pela Microsoft à lista de permissões do firewall do cofre de chaves no início do pipeline, consulta o cofre de chaves e, finalmente, remove o IP. Este método é apenas para fins de demonstração e não é recomendado para uso em produção.
Passo 1: Mapear segredos do cofre de chaves com um grupo de variáveis
Inicie sessão na sua organização do Azure DevOps e, em seguida, aceda ao seu projeto.
Selecione Pipelines>Biblioteca e, em seguida, selecione + Grupo de variáveis.
Nomeie o seu grupo de variáveis e depois ative Associar segredos de um Azure Key Vault como variáveis.
Selecione a ligação de serviço que criou anteriormente, selecione o cofre de chaves e depois selecione Autorizar.
Em Variáveis, selecione Adicionar para adicionar o seu segredo e depois selecione Guardar.
Nota
Certifique-se de que a sua ligação de serviço tem as permissões Get e List, e que o seu principal de serviço seja atribuído ao papel de Utilizador de Segredos de Key Vault no seu cofre de chaves privado.
Passo 1.1: Configurar as permissões de ligação ao serviço
Vai ao teu Azure cofre de chaves e depois seleciona 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 configurações e depois selecione Rever e criar.
Passo 1.2: Configurar as permissões do principal de serviço
Vai ao teu cofre de chaves Azure e depois seleciona Controlo de Acesso (IAM).
Selecione Adicionar>Adicionar atribuição de função e em seguida selecione o separador Função.
Selecione a função de Utilizador dos Segredos do Cofre de Chaves e, em seguida, selecione Seguinte.
Escolha membros selecionados, adicione o seu principal de serviço e escolha Selecionar.
Selecione Verificar + atribuir.
Inicie sessão na sua organização do Azure DevOps e, em seguida, aceda ao seu projeto.
Selecione Pipelines>Biblioteca e, em seguida, selecione + Grupo de variáveis.
Nomeie o seu grupo de variáveis e depois ative Associar segredos de um Azure Key Vault como variáveis.
Selecione a ligação de serviço ao Azure que criou anteriormente no menu suspenso e depois selecione o seu cofre de chaves.
Pode encontrar a mensagem de erro "A ligação ao serviço Azure especificado precisa de ter permissões de gestão de segredos "Obter, Listar" no cofre de chaves selecionado." Vá ao seu cofre de chaves no portal Azure e selecione controlo de acesso (IAM)>Adicionar atribuição de função>utilizador de segredos de cofre de chaves>Seguinte. Adicione o seu principal de serviço e depois selecione Rever + atribuir.
Adiciona os teus segredos e depois seleciona Guardar.
Passo 2: Configurar o acesso de entrada a partir do Azure DevOps
Depois de configurar o seu grupo de variáveis, permita o acesso de entrada do Azure DevOps ao seu cofre de chaves adicionando os intervalos de IP estáticos para a região geográfica da sua organização.
Entre na sua organização do Azure DevOps.
Selecione Definições da organização.
Vá à Visão Geral para encontrar a localização geográfica.
Encontre os seus intervalos IP V4 geográficos.
Importante
Para ligações de entrada nos Estados Unidos, certifique-se de adicionar as faixas 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.
Passo 3: Consultar um cofre de chave privada com um grupo de variáveis
Com o grupo de variáveis ligado e o acesso de entrada configurado, use o pipeline seguinte para consultar o seu cofre de chave privada e copiar o segredo recuperado. Azure Pipelines usa o seu IP público para consultar o cofre de chaves a partir de um grupo de variáveis, por isso certifica-te de que configuras o acesso entrante antes de correr o pipeline.
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 IP de agente hospedado pela Microsoft
Nesta abordagem, o pipeline consulta o IP do agente alojado pela Microsoft ao iniciar, adiciona-o à lista de permissões da firewall do Key Vault, executa as tarefas do Key Vault e, em seguida, remove-o antes de o pipeline terminar.
Nota
Esta abordagem serve apenas para fins demonstrativos. Não recomendamos esta abordagem para 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 = "$(agentIP)/32"
Remove-AzKeyVaultNetworkRule -VaultName "YOUR_KEY_VAULT_NAME" -IpAddressRange $ipRange
condition: succeededOrFailed()
Importante
Certifique-se de que o principal do serviço que utiliza para aceder ao seu cofre de chaves a partir do pipeline detém o papel de Contribuidor do Cofre de Chaves dentro do controlo de acesso (IAM) do seu cofre de chaves.
Aceder a um cofre de chaves privadas a partir de um agente auto-hospedado
Para aceder a um cofre de chaves privadas a partir de um agente Azure Pipelines, use um agente auto-hospedado (Windows, Linux, ou Mac) ou agentes Conjuntos de Dimensionamento de Máquinas Virtuais. Agentes alojados pela Microsoft, tal como outros serviços de computação genéricos, não estão incluídos na lista de trusted services do Key Vault.
Para estabelecer conectividade ao seu cofre de chave privada, configure um endpoint privado para acesso em linha de visão . Este ponto final tem de ser roteável, e o respetivo nome DNS privado tem de poder ser resolvido pelo agente de pipeline autoalojado.
Passo 1: Configurar o acesso de entrada a partir de um agente auto-hospedado
Siga as instruções para criar uma rede virtual.
No portal Azure, use a barra de pesquisa no topo da página para encontrar o seu cofre de chaves Azure.
Selecione o seu cofre de chaves e depois vá para Definiçõ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 aloja a rede virtual que criou anteriormente. Introduza um nome e um nome de interface de rede para a sua instância, e certifique-se de que seleciona a mesma região da rede virtual que criou anteriormente. Selecione Avançar.
Para método de ligação, selecione Ligar a um recurso Azure no meu diretório. Para Tipo de recurso, escolha Microsoft.KeyVault/vaults no menu suspenso. Selecione o seu recurso no menu suspenso. O sub-recurso alvo é preenchido automaticamente com o cofre de valores. Selecione Avançar.
No separador Rede Virtual, selecione a virtual network e a sub-rede que criou anteriormente e deixe os restantes campos como predefinidos. Selecione Avançar.
Aceite as definições padrão nos separadores DNS e Tags. Na aba Rever + Criar, selecione Criar.
Depois de o seu recurso ser implementado, vá ao seu cofre de chaves e selecione Definições>Rede>Conexões privadas ao endpoint. O teu endpoint privado deve estar listado com o estado de Ligação como Aprovado. Se ligares a um recurso do Azure num diretório diferente, tens de esperar que o proprietário do recurso aprove o teu pedido de ligação.
Passo 2: Permita a sua rede virtual
Com o endpoint privado configurado, permita que a rede virtual que aloja o seu agente auto-hospedado esteja nas definições do firewall do cofre de chaves.
Vai ao portal Azure, e depois encontra o teu cofre de chaves Azure.
Seleciona Definições>Rede e certifica-te de que estás no separador Firewalls e redes virtuais .
Selecione Adicionar uma rede virtual>Adicionar redes virtuais existentes.
Selecione a sua subscrição no menu suspenso, selecione a rede virtual que criou anteriormente e depois selecione as suas sub-redes.
Selecione Adicionar, depois desça até ao final da página e selecione Aplicar para guardar as suas alterações.
Passo 3: Consultar um cofre de chaves privadas de um agente auto-hospedado
Com a rede virtual permitida, utilize o seguinte pipeline para consultar o cofre de chave privada através do grupo de variáveis ligadas a partir de um agente auto-hospedado:
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 não quiseres conceder a Azure DevOps acesso de entrada ao teu cofre de chaves privadas, usa a tarefa AzureKeyVault para consultar diretamente o cofre de chaves. Neste caso, certifica-te de que a rede virtual que aloja o teu agente auto-hospedado está permitida nas definições do 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
Utilize as seguintes orientações para resolver problemas comuns de acesso ao cofre de chaves:
Public network access is disabled and request is not from a trusted service nor via an approved private link.Este erro indica que o acesso público está desativado, mas nem um endpoint privado nem as exceções obrigatórias de firewall estão configuradas. Siga os passos abaixo de Configure o acesso de entrada a partir de um agente auto-hospedado ou Configure o acesso de entrada a partir de Azure DevOps com base no seu cenário para configurar o acesso ao seu cofre de chaves privadas.
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>Este erro indica que o acesso público está desativado, Permitir que os serviços Microsoft fidedignos contornem esta firewall não está ativado e o IP do cliente não está na lista de permissões da firewall do cofre de chaves. No portal Azure, vai ao teu cofre de chaves, seleciona Settings>Networking e adiciona 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 que os intervalos IPv4 da sua geografia foram adicionados à lista de permissões do Key Vault. Para mais detalhes, veja Configurar o acesso de entrada a partir de Azure DevOps.
Em alternativa, consulte Permitir dinamicamente o IP do agente alojado na Microsoft para adicionar o IP do cliente à firewall do cofre de chaves em tempo de execução.