Változók és paraméterek biztonságos használata a folyamatban

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

Ez a cikk azt ismerteti, hogyan használhatja biztonságosan a változókat és paramétereket a folyamat felhasználóitól származó bemenetek gyűjtéséhez. Ha szeretne többet megtudni a változók és paraméterek használatáról, tekintse meg a következőt:

Körültekintően használja a titkos változókat. A titkos változók beállításának ajánlott módjai a felhasználói felületen, egy változócsoportban és az Azure Key Vault változócsoportjában találhatók. További információ: titkos kódváltozók beállítása.

Változók

A változók kényelmesen gyűjthetnek információkat a felhasználó elől. Változókkal is továbbíthat adatokat lépésről lépésre a folyamaton belül.

De körültekintően használja a változókat. Az újonnan létrehozott változók, függetlenül attól, hogy YAML-ben vannak definiálva vagy szkripttel vannak megírva, alapértelmezés szerint írás-olvasás. Az alsóbb rétegbeli lépések nem várt módon módosíthatják a változók értékét.

A szkript például a következőt olvassa:

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

Az előző lépés a következőre állítható be MyConfigDebug & deltree /y c:: . Bár ez a példa csak a buildügynök tartalmát törli, el tudja képzelni, hogyan válhat ez a beállítás sokkal veszélyesebbé.

A változókat írásvédetté teheti. A rendszerváltozók, például Build.SourcesDirectorya feladatkimeneti változók és az üzenetsor-idő változók mindig írásvédettek. A YAML-ben létrehozott vagy szkript által futtatott időben létrehozott változók írásvédettként jelölhetők ki. Amikor egy szkript vagy feladat létrehoz egy új változót, a naplózási parancsban átadhatja a isReadonly=true jelölőt, hogy a változó írásvédett legyen.

A YAML-ben megadhat írásvédett változókat egy adott kulccsal:

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

Várólista-idő változók

Amikor változót határoz meg a Pipelines felhasználói felület szerkesztőjében, engedélyezheti, hogy a felhasználók felülbírálják annak értékét a folyamat futtatásakor. Az ilyen változót üzenetsor-idő változónak nevezzük. Az üzenetsor-idő változók mindig a Pipelines felhasználói felület szerkesztőjében vannak definiálva.

Képernyőkép egy üzenetsor-idő változó definiálásáról.

Az üzenetsor-idő változók a folyamat manuális futtatásakor jelennek meg a végfelhasználó számára, és módosíthatják az értékeiket. Képernyőkép egy üzenetsor-idő változó értékének frissítéséről.

A felhasználóknak szerkesztési várólista-összeállítási konfigurációs engedélyre van szükségük a folyamaton a várólistán beállított változók megadásához.

Az üzenetsor idején beállítható változók korlátozása

A folyamat futtatásához használt felhasználói felület és REST API azt jelenti, hogy a felhasználók új változókat definiálhatnak az üzenetsorok idején.

Képernyőkép egy üzenetsor-idő változó hozzáadásáról a folyamat futtatása előtt.

Az Azure Pipelines korai időszakában ezzel a funkcióval adódtak problémák:

  • Lehetővé tette, hogy a felhasználók olyan új változókat definiáljanak, amelyeket a folyamat szerzője nem definiál explicit módon a definícióban.
  • A felhasználók felülírhatták a rendszerváltozókat.

A problémák megoldásához meghatároztunk egy beállítást, amely megszabja, mely változók állíthatók be várakozási időben. Ha ez a beállítás engedélyezve van, csak azok a változók állíthatók be, amelyeknél kifejezetten meg van jelölve a „Beállítható várakozási időben” beállítás. Más szóval, ha ez a beállítás nincs engedélyezve, minden változó beállítható várakozási időben.

A beállítás úgy lett kialakítva, hogy szervezeti és projektszinten is működjön.

  1. Szervezeti szint. Ha a beállítás be van kapcsolva, kényszeríti, hogy a szervezet összes projektjének összes folyamatához csak azok a változók állíthatók be, amelyek explicit módon "Settable at queue time". Ha a beállítás ki van kapcsolva, minden projekt eldöntheti, hogy korlátozza-e a várólistán beállított változókat. A beállítás egy kapcsoló a Szervezeti Gépház – Folyamatok –>> Gépház alatt. Csak a Project Collection Rendszergazda istratorok engedélyezhetik vagy tilthatják le. Képernyőkép a szervezet szintjén beállítható változók korlátozásáról.
  2. Projektszint. Ha a beállítás be van kapcsolva, a projekt összes folyamatához csak azok a változók állíthatók be, amelyek explicit módon "Settable at queue time". Ha a beállítás szervezeti szinten van bekapcsolva, akkor minden projektnél be van kapcsolva, és nem kapcsolható ki. A beállítás a Project Gépház - Pipelines ->> Gépház alatt található kapcsoló. Csak a Project Rendszergazda istratorok engedélyezhetik vagy tilthatják le. Képernyőkép az üzenetsor-időpontban projektszinten beállítható változók korlátozásáról.

Tekintsünk meg egy példát. Tegyük fel, hogy a beállítás be van kapcsolva, és a folyamat egy olyan változót my_variable határoz meg, amely nem állítható be az üzenetsor idején. Képernyőkép egy változó klasszikus folyamatban való definiálásáról.

Ezután tegyük fel, hogy futtatni szeretné a folyamatot. A Változók panelen nem jelennek meg változók, és hiányzik a Változó hozzáadása gomb.

Képernyőkép a változók panelről, amelyen be van kapcsolva a beállítás.

A Buildek – Üzenetsor és a Futtatások – Folyamat REST API-hívásainak futtatása a folyamatfuttatás várólistára helyezéséhez és egy új változó értékének my_variable beállításához az alábbihoz hasonló hibával meghiúsul.

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

Paraméterek

A változókkal ellentétben a folyamatparaméterek futás közben nem módosíthatók. A paraméterek olyan adattípusokkal rendelkeznek, mint az number és string, és az értékek egy részhalmazára korlátozhatók. A paraméterek korlátozása akkor hasznos, ha a folyamat felhasználó által konfigurálható része csak korlátozott listából vehet fel értéket. A beállítás biztosítja, hogy a folyamat ne vegyen fel tetszőleges adatokat.

A rendszerhéj-tevékenységek argumentumainak paraméterérvényesítésének engedélyezése

A folyamatok hivatkozhatnak a folyamatban végrehajtott tevékenységekre. Az Azure DevOps számos tevékenységének argumentumparamétere lehetővé teszi, hogy további lehetőségeket adjon meg a feladathoz.

Ha engedélyezve van a rendszerhéj-feladatok argumentumainak paraméterérvényesítése beállítás, a rendszer minden olyan karakternél áttekinti az argumentumparamétert, amelyet a rendszerhéj nem hajt végre megfelelően. A példakarakterek közé tartoznak a pontosvesszők, az idézőjelek és a zárójelek.

Az üzenetsor-időpontban beállítható Korlát változókhoz hasonlóan a rendszerhéj-tevékenységek engedélyezése argumentumok paraméterérvényesítése szervezeti szinten is konfigurálható Gépház> Pipelines> Gépház vagy projektszinten Gépház> Pipelines> Gépház.

Ha engedélyezve van, észlelt érvényesítési probléma lépett fel, a rendszer az alábbihoz hasonló hibaüzenetet naplóz: Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).

A probléma megoldásához módosítsa az argumentumokat úgy, hogy a hibaüzenetben jelzett speciális karaktereket menekül.

Ha engedélyezve van a rendszerhéj-tevékenységek argumentumainak paraméterérvényesítése , az ellenőrzés az alábbi tevékenységek argumentumparaméterére lesz alkalmazva.

  • PowerShell
  • BatchScript
  • Bash
  • Ssh
  • AzureFileCopy
  • WindowsMachineFileCopy

Következő lépések

A bemenetek védelme után a megosztott infrastruktúrát is biztonságossá kell tenni.