Compartilhar via


Utilizar variáveis e parâmetros de pipeline de forma segura

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

No Azure Pipelines, você pode permitir que os usuários personalizem a execução do pipeline coletando suas entradas com variáveis e parâmetros. No entanto, aceitar a entrada do usuário também pode introduzir riscos de segurança se não for tratado corretamente. Neste artigo, você aprenderá a usar com segurança variáveis e parâmetros em seu pipeline.

Este artigo faz parte de uma série que ajuda você a implementar medidas de segurança para o Azure Pipelines. Para obter mais informações, consulte Secure Azure Pipelines.

Pré-requisitos

Categoria Requisitos
Azure DevOps – Implemente as recomendações em Torne o Azure DevOps Seguro e Proteja o Azure Pipelines.
– Conhecimento básico do YAML e do Azure Pipelines. Para obter mais informações, consulte Criar seu primeiro pipeline.
Permissões – Para modificar permissões de pipelines: Membro do grupo Administradores do Projeto.
– Para modificar as permissões da organização: membro do grupo Administradores de Coleção de Projetos.

Variáveis

As variáveis são uma maneira conveniente de coletar a entrada do usuário com antecedência e facilitar a transferência de dados entre as etapas do pipeline. No entanto, variáveis definidas em tarefas ou scripts YAML são leitura e gravação por padrão. Valores definidos em etapas anteriores podem modificar valores subsequentes inesperadamente.

Por exemplo, o snippet de script a seguir chama uma variável chamada MyConfig.

msbuild.exe myproj.proj -property:Configuration=$(MyConfig)

Se uma etapa anterior definir o valor da MyConfig variável como Debug & deltree /y c:, executar esse script excluirá o conteúdo do agente de build e poderá levar a consequências não intencionais. Este exemplo destaca o perigo potencial dessas configurações.

Variáveis de sistema como Build.SourcesDirectory e variáveis de saída de tarefa são sempre de somente leitura. Você também pode designar uma variável criada em um script ou tarefa YAML como somente leitura passando a flag isReadonly=true em seu comando de log.

Em uma definição de variável YAML, você pode especificar uma variável somente leitura usando a chave específica readonly :

variables:
- name: myReadOnlyVar
  value: myValue
  readonly: true

Tenha cuidado especial com variáveis secretas. Os métodos recomendados para definir variáveis secretas incluem o uso da interface do usuário, a criação de um grupo de variáveis ou o uso de um grupo de variáveis proveniente do Azure Key Vault. Para obter mais informações, consulte Definir variáveis secretas.

Variáveis de tempo de espera

Ao definir uma variável na interface do usuário do Azure Pipelines, você pode selecionar se deseja permitir que os usuários substituam o valor durante a execução do pipeline. Variáveis que permitem que os usuários definam seu valor no tempo de fila são chamadas de variáveis de tempo de fila e só podem ser definidas na interface do usuário das Variáveis do Azure Pipelines .

No editor de pipeline Clássico, você define a variável de tempo de fila selecionando a caixa de seleção para Settable no momento da fila. Em pipelines YAML, você os designa selecionando Permitir que os usuários substituam esse valor ao executar esse pipeline.

Observação

Em um pipeline de liberação, selecione Definível no momento da liberação. Para obter mais informações, consulte Como posso editar variáveis no momento do lançamento?

Captura de tela da definição de uma variável de tempo de fila.

Quando um usuário executa manualmente o pipeline, ele pode selecionar variáveis de tempo de fila e alterar os valores.

Captura de tela da atualização do valor de uma variável de tempo de fila.

Os usuários devem ter a permissão editar configuração de build de fila em um pipeline para poder definir variáveis definidas no momento da fila.

Limitar as variáveis que podem ser definidas no momento da colocação na fila

A interface do usuário do Azure Pipelines e a API REST que executa um pipeline fornecem maneiras para os usuários adicionarem novas variáveis no tempo de fila. Essa capacidade permite que os usuários criem variáveis que o autor do pipeline não definiu, substitua as variáveis do sistema e defina valores para variáveis existentes no momento da fila.

Captura de tela da adição de uma variável de tempo de espera pouco antes de executar o pipeline.

Para evitar problemas causados por essas habilidades, você pode limitar variáveis que podem ser definidas no momento da fila. Você pode habilitar a configuração Limitar as variáveis que podem ser definidas em tempo de fila para que os usuários possam definir apenas variáveis que são explicitamente marcadas como Definível em tempo de fila ou permitir que os usuários substituam esse valor ao executar este pipeline em tempo de fila.

Essa configuração pode ser aplicada nos níveis de organização e projeto.

Captura de tela da opção que limita variáveis que podem ser definidas no tempo da fila no nível da organização.

Os Administradores de Coleção de Projetos podem aplicar essa configuração no nível da organização em Configurações de > da Organização. Quando a configuração está Ativada, somente variáveis que são explicitamente marcadas como Configuráveis no tempo de fila podem ser configuradas no tempo de fila para todos os pipelines em todos os projetos da organização.

Captura de tela da opção habilitada que limita variáveis que podem ser definidas no tempo da fila no nível da organização.

Os Administradores de Projeto podem aplicar essa configuração no nível do projeto em Configurações do Projeto de Pipelines. Quando a configuração está Ativada, somente variáveis que são explicitamente marcadas como Configurável no tempo de fila podem ser configuradas no tempo de fila para todos os pipelines neste projeto. Se a configuração não estiver habilitada no nível da organização, ela poderá ser habilitada ou desabilitada para projetos individuais.

Se a configuração no nível da organização estiver habilitada, ela se aplicará a todos os projetos da organização e não poderá ser desativada no nível do projeto.

Captura de tela da opção que limita variáveis que podem ser definidas no tempo de fila indisponível no nível do projeto.

O exemplo a seguir mostra as variáveis de um pipeline clássico, com algumas delas marcadas como definíveis no momento do enfileiramento. A variável BuildPlatform pode ser definida no momento da fila, mas a BuildConfiguration não pode.

Captura de tela da definição de uma variável em um pipeline Clássico.

Quando você executa esse pipeline, somente as variáveis marcadas como configuráveis no tempo de fila ficam visíveis na tela Variáveis a serem selecionadas.

Captura de tela do painel variáveis com a configuração ativada.

Se a opção Limitar variáveis que podem ser definidas durante o tempo de execução da fila estiver habilitada no nível do projeto ou da organização, o botão Adicionar variável não será exibido.

Captura de tela de não ser capaz de adicionar variáveis em tempo de execução com a configuração ativada.

Usar as APIs Builds - Fila ou Execuções - Executar Pipeline para enfileirar uma execução de pipeline e tentar definir o valor de uma variável não marcada como definível no momento da fila falha com um erro semelhante ao seguinte:

{
  "$id": "1",
  "innerException": null,
  "message": "You can't set the following variables (BuildConfiguration). If you want to be able to set these variables, then edit the pipeline and select Settable at queue time on the variables tab of the pipeline editor.",
  "typeName": "Microsoft.Azure.Pipelines.WebApi.PipelineValidationException, Microsoft.Azure.Pipelines.WebApi",
  "typeKey": "PipelineValidationException",
  "errorCode": 0,
  "eventId": 3000
}

Parâmetros

Um pipeline em execução não pode modificar parâmetros de pipeline, ao contrário das variáveis. Os parâmetros têm tipos de dados, como number e string, e podem ser restritos a subconjuntos de valor específicos. Essa restrição é valiosa quando um aspecto configurável pelo usuário do pipeline deve aceitar apenas valores de uma lista predefinida, garantindo que o pipeline não aceite dados arbitrários.

Habilitar a validação de argumentos de tarefas do shell

Os pipelines podem fazer referência a tarefas executadas no pipeline. Algumas tarefas incluem um arguments parâmetro que permite que os usuários especifiquem mais opções para a tarefa.

A aplicação da configuração Habilitar validação de argumentos de tarefas do shell valida os argument parâmetros para tarefas de shell integradas, verificando se há entradas que podem injetar comandos em scripts. A verificação garante que o shell execute corretamente caracteres como ponto-e-vírgula, aspas e parênteses nas seguintes tarefas de pipeline:

  • PowerShell
  • Script em lote
  • Bash
  • SSH
  • AzureFileCopy
  • WindowsMachineFileCopy

Você pode aplicar a Habilitar validação de argumentos de tarefas de shell no nível da organização em Configurações da Organização>Pipelines>Configurações ou no nível do projeto em Configurações do Projeto>Pipelines>Configurações. Se a configuração no nível da organização estiver habilitada, ela se aplicará a todos os projetos da organização e não poderá ser desativada no nível do projeto.

Quando essa configuração está habilitada, qualquer problema de validação relacionado a um arguments parâmetro dispara a seguinte mensagem de erro:

Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).

Para resolver o problema, ajuste o argumento escapando de caracteres especiais, conforme indicado na mensagem de erro.