Usar segredos do Azure Key Vault no Azure Pipelines
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
O Cofre de chaves do Azure permite que os desenvolvedores armazenem e gerenciem com segurança informações confidenciais, como chaves de API, credenciais ou certificados. O serviço do Cofre de chaves do Azure aceita dois tipos de contêiner: cofres e pools de HSM (módulo de segurança de hardware) gerenciado. Os cofres podem armazenar chaves, segredos e certificados com suporte de software e HSM, enquanto os pools HSM gerenciados oferecem suporte exclusivo a chaves apoiadas por HSM.
Neste tutorial, você aprenderá a:
- Criar um Azure Key Vault usando a CLI do Azure
- Adicionar um segredo e configurar o acesso ao cofre de chaves do Azure
- Usar segredos em seu pipeline
Pré-requisitos
Uma organização do Azure DevOps e um projeto. Crie uma organização ou um projeto , caso ainda não tenha feito isso.
Uma assinatura do Azure. Crie uma conta do Azure gratuitamente se você ainda não tiver uma.
Obter o código de exemplo
Se você já tiver seu próprio repositório, vá para a próxima etapa. Caso contrário, importe o repositório de exemplo a seguir para o Azure Repo.
Entre na sua organização do Azure DevOps e navegue até seu projeto.
Selecione Repositórios e, em seguida, selecione Importar. Insira a URL do repositório a seguir e selecione Importar.
https://github.com/MicrosoftDocs/pipelines-dotnet-core
Criar um Cofre de chaves do Azure
Entre no portal do Azure e pressione o botão Cloud Shell no canto superior direito.
Se você tiver mais de uma assinatura do Azure associada à sua conta, use o comando abaixo para especificar uma assinatura padrão. Você pode usar
az account list
para gerar uma lista das suas assinaturas.az account set --subscription <YOUR_SUBSCRIPTION_NAME_OR_ID>
Defina sua região do Azure padrão. Você pode usar
az account list-locations
para gerar uma lista de regiões disponíveis.az config set defaults.location=<YOUR_REGION>
Crie um novo grupo de recursos.
az group create --name <YOUR_RESOURCE_GROUP_NAME>
Crie um novo Azure Key Vault.
az keyvault create \ --name <YOUR_KEY_VAULT_NAME> \ --resource-group <YOUR_RESOURCE_GROUP_NAME>
Crie um segredo no cofre de chaves do Azure.
az keyvault secret set \ --name <YOUR_SECRET_NAME> \ --value <YOUR_ACTUAL_SECRET> \ --vault-name <YOUR_KEY_VAULT_NAME>
Configurar a autenticação
Criar uma identidade gerenciada atribuída ao usuário
Entre no portal do Azure e pesquise o serviço Identidades Gerenciadas na barra de pesquisa.
Selecione Criar e preencha os campos obrigatórios da seguinte maneira:
- Assinatura: selecione sua assinatura no menu suspenso.
- Grupo de recursos: Selecione um grupo de recursos existente ou crie um novo.
- Região: Selecione uma região no menu suspenso.
- Nome: insira um nome para sua identidade gerenciada atribuída pelo usuário.
Selecione Examinar + criar quando terminar.
Quando a implantação for concluída, selecione Ir para o recurso e copie os valores de Assinatura e ID do Cliente a serem usados nas próximas etapas.
Navegue até Propriedades de Configurações>e copie o valor da ID do locatário da identidade gerenciada para uso posterior.
Configurar políticas de acesso do cofre de chaves
Navegue até o portal do Azure e use a barra de pesquisa para localizar o cofre de chaves que você criou anteriormente.
Selecione Políticas de acesso e, em seguida, selecione Criar para adicionar uma nova política.
Em Permissões secretas, marque as caixas de seleção Obter e Listar .
Selecione Avançar e cole a ID do cliente da identidade gerenciada que você criou anteriormente na barra de pesquisa. Selecione sua identidade gerenciada.
Selecione Avançar e, em seguida , Avançar mais uma vez.
Examine suas novas políticas e selecione Criar quando terminar.
Criar uma conexão de serviço
Entre na sua organização do Azure DevOps e navegue até seu projeto.
Selecione Configurações do projeto>Conexões de serviço e selecione Nova conexão de serviço para criar uma conexão de serviço.
Selecione Azure Resource Manager e, em seguida, selecione Avançar.
Para Tipo de identidade, selecione Identidade gerenciada no menu suspenso.
Para Etapa 1: Detalhes da identidade gerenciada, preencha os campos da seguinte maneira:
Assinatura para identidade gerenciada: selecione a assinatura que contém sua identidade gerenciada.
Grupo de recursos para identidade gerenciada: selecione o grupo de recursos que hospeda sua identidade gerenciada.
Identidade gerenciada: selecione sua identidade gerenciada no menu suspenso.
Para Etapa 2: Escopo do Azure, preencha os campos da seguinte maneira:
Nível de escopo para conexão de serviço: selecione Assinatura.
Assinatura para conexão de serviço: selecione a assinatura que sua identidade gerenciada acessará.
Grupo de recursos para conexão de serviço: (opcional) especifique para limitar o acesso de identidade gerenciada a um grupo de recursos.
Para a Etapa 3: Detalhes da conexão de serviço:
Nome da conexão de serviço: forneça um nome para sua conexão de serviço.
Referência de Gerenciamento de Serviços: (Opcional) Informações de contexto de um banco de dados ITSM.
Descrição: (Opcional) Adicione uma descrição.
Em Segurança, 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. Se você não selecionar essa opção, deverá conceder acesso manualmente a cada pipeline que usa essa conexão de serviço.
Selecione Salvar para validar e criar a conexão de serviço.
Acessar segredos do cofre de chaves do pipeline
Entre na sua organização do Azure DevOps e navegue até seu projeto.
Selecione Pipelines e escolha Novo Pipeline.
Selecione Azure Repos Git (YAML) e, em seguida, selecione seu repositório.
Selecione o modelo Pipeline inicial.
O pipeline padrão incluirá um script que executa comandos echo. Eles não serão necessários, logo podemos excluí-los.
Adicione a tarefa AzureKeyVault, substituindo os espaços reservados pelo nome da conexão de serviço criada anteriormente e pelo nome do Cofre de chaves. O arquivo YAML deverá ser parecido com o seguinte snippet:
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
Vamos adicionar as seguintes tarefas para copiar e publicar nosso segredo. O exemplo é apenas para fins de demonstração e não deve ser implementado em um 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'
Selecione Salvar e executar e, em seguida, selecione mais uma vez para confirmar suas alterações e acionar o pipeline. Talvez seja solicitado que você permita o acesso do pipeline aos recursos do Azure, se solicitado, selecione Permitir. Você só precisará aprovar uma vez o pipeline.
Selecione a tarefa CmdLine para exibir os logs.
Quando a execução do pipeline estiver concluída, retorne ao resumo do pipeline e selecione o artefato publicado.
Selecione soltar>secret.txt para baixá-lo.
Abra o arquivo de texto que você acabou de baixar; o arquivo de texto deve conter o segredo do Cofre de chaves do Azure.
Aviso
Este tutorial é somente para fins educacionais. Para obter as melhores práticas de segurança e como trabalhar em segurança com segredos, confira Gerenciar segredos em seus aplicativos de servidor com o Azure Key Vault.
Limpar os recursos
Siga as etapas abaixo para excluir os recursos que você criou:
Se você criou uma organização para hospedar o projeto, veja como excluir a organização ou excluir o projeto.
Todos os recursos do Azure criados durante o tutorial são hospedados em um único grupo de recursos. Execute o seguinte comando para excluir o grupo de recursos e todos os recursos pertinentes.
az group delete --name <YOUR_RESOURCE_GROUP_NAME>
Perguntas frequentes
P: Estou recebendo o seguinte erro: "O usuário ou grupo não tem permissão de lista de segredos". O que devo fazer?
R: Se você encontrar um erro indicando que o usuário ou grupo não tem a permissão de lista de segredos no cofre de chaves, execute os seguintes comandos para autorizar seu aplicativo a acessar a chave ou o segredo no Azure Key Vault:
az account set --subscription <YOUR_SUBSCRIPTION_ID>
az login
$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