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.
Serviços de DevOps do Azure | 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 variáveis e parâmetros com segurança 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 Pipelines Seguros do Azure.
Pré-requisitos
| Categoria | Requerimentos |
|---|---|
| Azure DevOps | - Implemente recomendações em Tornar seu Azure DevOps seguro e Secure Azure Pipelines. - Conhecimentos básicos de YAML e Azure Pipelines. Para obter mais informações, consulte Criar seu primeiro pipeline. |
| Permissões | - Para modificar permissões de pipelines: Membro do grupo Administradores de Projeto. - Para modificar as permissões da organização: Membro do grupo Administradores da Coleção de Projetos. |
Variáveis
As variáveis são uma maneira conveniente de coletar informações do usuário com antecedência e facilitar a transferência de dados entre as etapas do pipeline. No entanto, as variáveis definidas em tarefas ou scripts YAML são de leitura e gravação por padrão. Os valores definidos nas etapas anteriores podem modificar valores nas etapas posteriores inesperadamente.
Por exemplo, o trecho 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:, a execução desse script excluirá o conteúdo do agente de compilação e poderá levar a consequências indesejadas. Este exemplo destaca o perigo potencial de tais configurações.
As variáveis do sistema, como Build.SourcesDirectory e as variáveis de saída da tarefa, são sempre somente leitura. Você também pode designar uma variável criada em um script ou tarefa YAML como apenas leitura ao incluir o indicador isReadonly=true no comando de registo.
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 especial cuidado 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 originado do Cofre de Chaves do Azure. Para obter mais informações, consulte Definir variáveis secretas.
Variáveis de tempo de fila
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. As variáveis que permitem que os usuários definam seu valor no momento da fila são chamadas variáveis de tempo de fila e podem ser definidas somente na interface do usuário de Variáveis de Pipelines do Azure.
No editor de pipeline clássico, define uma variável para tempo de fila ao selecionar a opção de caixa de seleção Definível no tempo de fila. Em pipelines YAML, você designa-os selecionando Permita que os utilizadores substituam este valor ao executar este pipeline.
Observação
Em um pipeline de lançamento, selecione Definível no momento da implantação. Para obter mais informações, consulte Como posso editar variáveis no momento do lançamento?
Quando um usuário executa manualmente o pipeline, ele pode selecionar variáveis de tempo de fila e alterar os valores.
Os utilizadores devem ter permissão Editar configuração de fila de compilação num pipeline para poder definir variáveis na altura da colocação em fila.
Limitar variáveis que podem ser definidas no momento da 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 momento da fila. Essa capacidade permite que os usuários criem variáveis que o autor do pipeline não definiu, substituam variáveis do sistema e definam valores para variáveis existentes no momento da fila.
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 variáveis que podem ser definidas no horário da fila para que os usuários possam definir apenas variáveis que são explicitamente marcadas como Configurável no momento da fila ou Permitir que os usuários substituam esse valor ao executar esse pipeline no horário da fila.
Essa configuração pode ser aplicada nos níveis da organização e do projeto.
Os Administradores de Coleção de Projetos podem aplicar esta configuração no nível da organização em Configurações da organização>Pipelines>Configurações. Quando a configuração está Ativada, somente as variáveis explicitamente marcadas como Configuráveis no momento da fila podem ser definidas no momento da fila para todos os pipelines em todos os projetos na organização.
Os Administradores de Projeto podem aplicar esta configuração ao nível do projeto em Configurações do projeto>Pipelines>Configurações. Quando a configuração está Ativada, apenas variáveis explicitamente marcadas como Definíveis no tempo de fila podem ser definidas 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 na organização e não poderá ser desativada no nível do projeto.
O exemplo a seguir mostra as variáveis para um pipeline Classic, com algumas delas marcadas configuráveis durante o tempo de fila. A BuildPlatform variável pode ser definida no momento da fila, mas BuildConfiguration não pode.
Quando executa este pipeline, somente as variáveis marcadas como Configuráveis no momento da fila são visíveis no ecrã de Variáveis para serem selecionadas.
Se Limitar variáveis que podem ser definidas no momento da fila estiver habilitado no nível do projeto ou da organização, o botão Adicionar variável não aparecerá.
Usar as APIs Builds - Queue ou Runs - Run 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 do enfileiramento resulta num 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 os seus parâmetros, ao contrário do que acontece com as variáveis. Os parâmetros têm tipos de dados como number e string, e podem ser restritos a subconjuntos de valores específicos. Essa restrição é valiosa quando um aspeto configurável pelo usuário do pipeline só deve aceitar 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 dentro do pipeline. Algumas tarefas incluem um arguments parâmetro que permite aos usuários especificar mais opções para a tarefa.
A ativação da configuração Habilitar validação de argumentos das tarefas do shell valida os argument parâmetros de tarefas internas do shell para verificar entradas que possam 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
- BatchScript
- Bash
- Shh
- AzureFileCopy
- CópiaDeFicheirosDoComputadorWindows
Você pode aplicar Habilitar validação de argumentos de tarefas do shell no nível da organização em Configurações da Organização>Configurações de Pipelines> ou no nível do projeto em Configurações de Projeto>. Se a configuração no nível da organização estiver habilitada, ela se aplicará a todos os projetos na 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 caracteres especiais, conforme indicado na mensagem de erro.