Como usar variáveis e parâmetros com segurança em seu pipeline
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Este artigo discute como usar variáveis e parâmetros com segurança para coletar entradas de usuários de pipeline. Se você quiser saber mais sobre como usar variáveis e parâmetros, confira:
- Definir variáveis
- Definir variáveis secretas
- Usar variáveis predefinidas
- Usar parâmetros de runtime
- Tipos de modelo e uso
Tenha cuidado com as variáveis secretas. As maneiras recomendadas de definir variáveis secretas estão na interface do usuário, em um grupo de variáveis e em um grupo de variáveis do Azure Key Vault. Para obter mais informações, consulte definir variáveis de ambiente.
Variáveis
As variáveis podem ser uma maneira conveniente de coletar informações do usuário antecipadamente. Você também pode usar variáveis para passar dados de etapa em etapa em um pipeline.
Mas use variáveis com cuidado. As variáveis recém-criadas, sejam elas definidas em YAML ou escritas por um script, são de leitura/gravação por padrão. Uma etapa downstream pode alterar o valor de uma variável de uma maneira que você não espera.
Por exemplo, seu script diz:
msbuild.exe myproj.proj -property:Configuration=$(MyConfig)
Uma etapa anterior poderia definir MyConfig
como Debug & deltree /y c:
.
Embora este exemplo exclua apenas o conteúdo do agente de build, você pode imaginar como essa configuração poderia facilmente se tornar muito mais perigosa.
Você pode tornar as variáveis somente leitura.
Variáveis do sistema como Build.SourcesDirectory
, variáveis de saída de tarefa e variáveis de tempo de espera são sempre somente leitura.
Variáveis criadas no YAML ou criadas em tempo de execução por um script podem ser designadas como somente leitura.
Quando um script ou tarefa cria uma variável, ele pode passar o sinalizador isReadonly=true
no próprio comando de registro em log para tornar a variável somente leitura.
No YAML, você pode especificar variáveis somente leitura usando uma chave específica:
variables:
- name: myReadOnlyVar
value: myValue
readonly: true
Variáveis de tempo de espera
Ao definir uma variável no editor de interface do usuário do Pipelines, você pode optar por permitir que os usuários substituam o valor dela ao executar o pipeline. Chamamos essa variável de tempo de espera. As variáveis de tempo de espera são sempre definidas no editor de interface do usuário de Pipelines.
As variáveis de tempo de espera são expostas ao usuário final quando executam manualmente um pipeline e podem alterar seus valores.
Os usuários precisam de permissão para editar a configuração de enfileiramento de builds no pipeline e especificar as variáveis definidas de tempo de espera.
Limitar as variáveis que podem ser definidas no momento da colocação na fila
A interface do usuário e a API REST usadas para executar um pipeline fornecem meios para os usuários definirem novas variáveis durante o tempo de espera.
Nos primeiros dias do Azure Pipelines, essa funcionalidade tinha alguns problemas:
- Ela permitia que os usuários definissem novas variáveis que não são explicitamente definidas pelo autor do pipeline na definição.
- Ela permitia que os usuários substituíssem as variáveis do sistema.
Para corrigir esses problemas, definimos uma configuração para limitar as variáveis que podem ser definidas no momento da fila. Com essa configuração habilitada, somente as variáveis que são explicitamente marcadas como "Configuráveis no tempo de fila" podem ser definidas. Em outras palavras, você pode definir todas as variáveis no momento da fila, a menos que essa configuração esteja habilitada.
A configuração foi projetada para funcionar nos níveis de organização e projeto.
- Nível de organização Quando a configuração está ativada, ela impõe que, para todos os pipelines em todos os projetos da organização, somente as variáveis que são explicitamente marcadas como "Definível no tempo de espera" podem ser definidas. Quando a configuração está desativada, cada projeto pode optar por restringir ou não as variáveis definidas no tempo de espera. A configuração é uma alternância em Configurações da Organização – > Pipelines –> Configurações. Somente administradores de coleção de projetos podem habilitar ou desabilitar essa configuração.
- Nível de projeto. Quando a configuração está ativada, ela impõe que, para todos os pipelines do projeto, somente as variáveis marcadas explicitamente como "Definíveis no tempo de espera" podem ser definidas. Se a configuração estiver ativada no nível da organização, ela estará ativada para todos os projetos e não poderá ser desativada. A configuração é uma alternância em Configurações da organização –> Pipelines –> Configurações. Somente os administradores do projeto podem habilitar ou desabilitar essa configuração.
Vejamos um exemplo. Digamos que a configuração esteja ativada e que o pipeline defina uma variável chamada my_variable
que não é configurável em tempo de espera.
Em seguida, suponha que você deseja executar o pipeline. O painel Variáveis não mostra nenhuma variável e o botão Adicionar variável está ausente.
O uso das chamadas à API REST Builds – Fila e Execuções – Executar Pipeline para enfileirar uma execução de pipeline e definir o valor de my_variable
ou de uma nova variável falhará com um erro semelhante ao mostrado a seguir.
{
"$id": "1",
"innerException": null,
"message": "You can't set the following variables (my_variable). 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
Ao contrário das variáveis, os parâmetros do pipeline não podem ser alterados por um pipeline durante a execução.
Os parâmetros têm tipos de dados como number
e string
e podem ser restritos a um subconjunto de valores.
Restringir os parâmetros é útil quando uma parte do pipeline configurável pelo usuário deve obter um valor somente de uma lista restrita. A configuração garante que o pipeline não receba dados arbitrários.
Habilitar a validação de parâmetros de argumentos de tarefas do shell
Pipelines podem fazer referência a tarefas executadas no pipeline. Várias tarefas incluídas no Azure DevOps têm um parâmetro arguments que permite especificar mais opções para a tarefa.
Quando a configuração Habilitar validação de parâmetro de argumentos de tarefas do shell está habilitada, o parâmetro arguments é revisado em busca de quaisquer caracteres que possam não ser executados corretamente pelo shell. Caracteres de exemplo incluem ponto-e-vírgula, aspas e parênteses.
Semelhante à opção Limitar variáveis que podem ser definidas no tempo de espera, a opção Habilitar validação do parâmetro de argumentos de tarefas do shell pode ser configurada no nível da organização em Configurações>Pipelines>Configurações ou no nível do projeto em Configurações>Pipelines>Configurações.
Quando habilitado, há um problema de validação detectado, uma mensagem de erro como a seguinte é registrada: Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).
Para resolver o problema, ajuste os argumentos escapando caracteres especiais, conforme indicado na mensagem de erro.
Quando a oopção Habilitar validação do parâmetro de argumentos de tarefas do shell está habilitada, a validação é aplicada ao parâmetro arguments nas tarefas a seguir.
- PowerShell
- BatchScript
- Bash
- SSH
- AzureFileCopy
- WindowsMachineFileCopy
Próximas etapas
Depois de proteger suas entradas, você também precisa proteger sua infraestrutura compartilhada.