Sdílet prostřednictvím


Bezpečné použití proměnných a parametrů v kanálu

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

Naučte se bezpečně využívat proměnné a parametry ke shromažďování vstupu od uživatelů kanálu. Další informace najdete v následujících článcích:

Buďte opatrní pomocí tajných proměnných. Mezi doporučené metody nastavení tajných proměnných patří použití uživatelského rozhraní, vytvoření skupiny proměnných nebo využití skupiny proměnných ze služby Azure Key Vault. Další informace najdete v tématu nastavení tajných proměnných.

Proměnné

Proměnné slouží jako praktická metoda shromažďování uživatelských vstupů předem a usnadnění přenosu dat mezi kroky kanálu. Při práci s proměnnými ale buďte opatrní. Nově vytvořené proměnné, ať už definované v JAZYCE YAML nebo skriptované, jsou ve výchozím nastavení pro čtení i zápis. Podřízené kroky mohou neočekávaně měnit hodnoty proměnných.

Představte si například následující fragment kódu skriptu:

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

Pokud se předchozí krok nastaví MyConfig na Debug & deltree /y c:, může to vést k nezamýšleným důsledkům. I když tento příklad pouze odstraní obsah agenta sestavení, zvýrazní potenciální nebezpečí těchto nastavení.

Proměnné můžete nastavit jen pro čtení. Systémové proměnné jako Build.SourcesDirectory, výstupní proměnné úkolů a proměnné fronty jsou vždy jen pro čtení. Proměnné vytvořené v YAML nebo vytvořené v době běhu pomocí skriptu lze určit jako jen pro čtení. Když skript nebo úloha vytvoří novou proměnnou, může isReadonly=true předat příznak v příkazu protokolování, aby proměnná byla jen pro čtení.

V YAML můžete zadat proměnné jen pro čtení pomocí následujícího konkrétního klíče:

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

Proměnné fronty a času

Při definování proměnné v editoru uživatelského rozhraní Pipelines můžete uživatelům povolit přepsání jeho hodnoty během provádění kanálu. Tyto proměnné se označují jako proměnné fronty a jsou vždy definovány v editoru uživatelského rozhraní Pipelines.

Snímek obrazovky s definováním proměnné fronty a času

Proměnné fronty jsou koncovému uživateli zpřístupněny při ručním spuštění kanálu a můžou změnit jejich hodnoty. Snímek obrazovky s aktualizací hodnoty proměnné fronty a času

Uživatelé potřebují oprávnění upravit konfiguraci sestavení fronty v kanálu k určení proměnných nastavených v době fronty.

Omezení proměnných, které je možné nastavit v době fronty

Uživatelské rozhraní a rozhraní REST API používané ke spuštění kanálu poskytují uživatelům možnost definovat nové proměnné v době fronty.

Snímek obrazovky s přidáním proměnné fronty těsně před spuštěním kanálu

V prvních dnech služby Azure Pipelines měla tato funkce následující problémy:

  • Umožňuje uživatelům definovat nové proměnné, které ještě nedefinuje autor kanálu v definici.
  • Umožňovala uživatelům přepsat systémové proměnné.

Abychom tyto problémy vyřešili, definovali jsme nastavení pro omezení proměnných, které je možné nastavit v době fronty. Když je toto nastavení zapnuté, je možné nastavit pouze tyto proměnné, které jsou explicitně označené jako Settable at queue time (Nastavitelné v době fronty). Jinými slovy, můžete nastavit jakékoli proměnné v době fronty, pokud není toto nastavení zapnuté.

Nastavení je navržené tak, aby fungovalo na úrovni organizace a projektu.

  • Úroveň organizace:
    • Když je nastavení zapnuté, vynucuje, aby se pro všechny kanály ve všech projektech v organizaci explicitně označené jako Settable at queue time (Nastavitelné v době fronty) explicitně označovaly jenom proměnné.
    • Správci kolekce projektů můžou toto nastavení povolit nebo zakázat.
    • Přístup k tomuto nastavení najdete v části Nastavení> kanálů>organizace. Snímek obrazovky s omezením proměnných, které je možné nastavit v době fronty na úrovni organizace
  • Úroveň projektu:
    • Podobně jako na úrovni organizace je povolením tohoto nastavení zajištěno, že u všech kanálů v rámci konkrétního projektu je možné upravit pouze proměnné označené jako Settable at queue time (Nastavit v době fronty).
    • Pokud je nastavení na úrovni organizace povolené, platí pro všechny projekty a nejde ho vypnout.
    • Správci projektů můžou toto nastavení povolit nebo zakázat.
    • Přístup k tomuto nastavení v části Nastavení> kanálů projectu.> Snímek obrazovky s omezením proměnných, které je možné nastavit v době fronty na úrovni projektu

Následující příklad ukazuje, že je nastavení zapnuté a váš kanál definuje proměnnou, my_variable která není v době fronty nastavená. Snímek obrazovky s definováním proměnné v klasickém kanálu

Dále předpokládejme, že chcete kanál spustit. Panel Proměnné nezobrazuje žádné proměnné a chybí tlačítko Přidat proměnnou .

Snímek obrazovky s panelem proměnných s nastavením

Použití sestavení – Fronta a Spuštění – Volání rozhraní REST API kanálu pro frontu spuštění kanálu a nastavení hodnoty my_variable nebo nové proměnné selže s chybou podobnou následující.

{
  "$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
}

Parametry

Na rozdíl od proměnných nemůže spuštěný kanál upravovat parametry kanálu. Parametry mají datové typy, například number a stringa mohou být omezeny na konkrétní podmnožinu hodnot. Toto omezení je užitečné, když by uživatel konfigurovatelný aspekt kanálu měl přijímat pouze hodnoty z předdefinovaného seznamu a zajistit, aby kanál nepřijme libovolná data.

Povolení ověření parametru argumentů úloh prostředí

Kanály můžou odkazovat na úlohy spuštěné v rámci kanálu. Některé úkoly zahrnují arguments parametr, který umožňuje zadat další možnosti úkolu.

Pokud je povolené nastavení Povolit ověření argumentů úkolů prostředí, projde parametr argumentů kontrolou, aby se zajistilo, že prostředí správně spouští znaky, jako jsou středníky, uvozovky a závorky. Podobně jako u proměnných limitu, které je možné nastavit v době fronty, můžete v části Nastavení> kanálu>kanálu nakonfigurovat ověření parametru povolit argumenty úkolů prostředí na úrovni organizace nebo projektu.

Pokud je tato funkce zapnutá, všechny problémy s ověřením související s parametrem arguments aktivují chybovou zprávu, například následující:

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

Chcete-li tento problém vyřešit, upravte argumenty tak, že uvozíte speciální znaky, jak je uvedeno v chybové zprávě. Toto ověření se vztahuje na arguments parametr v následujících konkrétních úlohách:

  • PowerShell
  • BatchScript
  • Bash
  • SSH
  • AzureFileCopy
  • WindowsMachineFileCopy

Další kroky