Freigeben über


Sicheres Verwenden von Variablen und Parametern in Ihrer Pipeline

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

In Azure-Pipelines können Sie Variablen und Parameter verwenden, um Eingaben von Benutzern zu sammeln. Diese Funktion ist nützlich, wenn Sie Benutzern das Anpassen der Pipelineausführung ermöglichen möchten. Das Akzeptieren von Benutzereingaben kann jedoch auch Sicherheitsrisiken darstellen, wenn sie nicht ordnungsgemäß behandelt werden. In diesem Artikel erfahren Sie, wie Sie Variablen und Parameter in Ihrer Pipeline sicher verwenden.

Dieser Artikel ist Teil einer Reihe, mit der Sie Sicherheitsmaßnahmen für Azure-Pipelines implementieren können. Weitere Informationen finden Sie unter Secure Azure Pipelines.

Voraussetzungen

Kategorie Anforderungen
Azure DevOps – Implementieren von Empfehlungen in Secure Your Azure DevOps and Secure Azure Pipelines.
- Grundkenntnisse in YAML und Azure Pipelines. Weitere Informationen finden Sie unter Erstellen Sie Ihre erste Pipeline.
Berechtigungen – So ändern Sie Pipelineberechtigungen: Mitglied der Gruppe "Projektadministratoren".
- Ändern von Berechtigungen für Organisationen: Mitglied der Gruppe der Projekt-Sammlungsadministratoren.

Variablen

Variablen dienen als bequeme Methode, um Benutzereingaben vorab zu sammeln und die Datenübertragung zwischen Pipelineschritten zu erleichtern. Seien Sie beim Arbeiten mit Variablen jedoch vorsichtig. Standardmäßig sind neu erstellte Variablen, unabhängig davon, ob sie in YAML oder in Skripts definiert sind, lesbar und schreibbar. Nachgeschaltete Schritte können Variablenwerte auf unerwartete Weise ändern.

Betrachten Sie beispielsweise den folgenden Skriptausschnitt:

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

Wenn ein vorangehender Schritt MyConfig auf Debug & deltree /y c: setzt, könnte dies zu unbeabsichtigten Konsequenzen führen. Dieses Beispiel löscht zwar lediglich den Inhalt Ihres Build-Agents, hebt jedoch die potenzielle Gefahr solcher Einstellungen hervor.

Sie können Variablen schreibgeschützt machen. Systemvariablen wie Build.SourcesDirectory, Aufgabenausgabevariablen und Warteschlangenzeitvariablen sind immer schreibgeschützt. Variablen, die in YAML oder zur Laufzeit von einem Skript erstellt werden, können als schreibgeschützt festgelegt werden. Wenn ein Skript oder eine Aufgabe eine neue Variable erstellt, kann dabei das isReadonly=true-Flag im Protokollierungsbefehl übergeben werden, um die Variable schreibgeschützt zu machen.

In YAML können Sie schreibgeschützte Variablen mithilfe des folgenden spezifischen Schlüssels angeben:

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

Verwenden Sie Vorsicht bei geheimen Variablen. Die empfohlenen Methoden zum Festlegen geheimer Variablen umfassen die Verwendung der Benutzeroberfläche, das Erstellen einer Variablengruppe oder das Verwenden einer Variablengruppe, die aus Azure Key Vault stammt. Weitere Informationen finden Sie unter Festlegen von geheimen Variablen.

Warteschlangenzeitvariablen

Beim Definieren einer Variablen im Pipelines-UI-Editor können Sie Benutzern erlauben, den Wert während der Pipelineausführung außer Kraft zu setzen. Diese Variablen werden als Warteschlangenzeitvariablen bezeichnet und werden immer im Pipelines-UI-Editor definiert.

Screenshot: Definieren einer Warteschlangenzeitvariable.

Warteschlangenzeitvariablen sind für Endbenutzer verfügbar, wenn eine Pipeline manuell ausgeführt wird. Sie können ihre Werte ändern. Screenshot: Aktualisieren des Werts einer Warteschlangenzeitvariable.

Benutzer benötigen die Berechtigung zum Bearbeiten der Warteschlangenbuildkonfiguration in der Pipeline, um Variablen anzugeben, die zur Warteschlangenzeit festgelegt werden.

Einschränken von Variablen, die während der Warteschlangenzeit festgelegt werden können

Benutzeroberfläche und REST-API, die zum Ausführen einer Pipeline verwendet wird, bieten Benutzern die Möglichkeit, neue Variablen zur Warteschlangenzeit zu definieren.

Screenshot: Hinzufügen einer Variable für die Warteschlangenzeit direkt vor dem Ausführen der Pipeline.

In den frühen Tagen von Azure-Pipelines hatte diese Funktionalität die folgenden Probleme:

  • Benutzer konnten neue Variablen definieren, die nicht bereits vom Pipelineautor in der Definition definiert wurden.
  • Benutzer*innen konnten Systemvariablen überschreiben.

Um diese Probleme zu beheben, haben wir eine Einstellung zum Einschränken von Variablen definiert, die zur Warteschlangenzeit festgelegt werden können. Wenn diese Einstellung aktiviert ist, können nur diese Variablen festgelegt werden, die explizit als "Settable at queue time" gekennzeichnet sind. Mit anderen Worten: Sie können alle Variablen in der Warteschlange setzen, wenn diese Einstellung nicht aktiviert ist.

Die Konfiguration ist für die Arbeit auf Organisations- und Projektebene konzipiert.

  • Organisationsebene:
    • Wenn die Einstellung aktiviert ist, erzwingt sie, dass nur Variablen, die explizit als „Zur Queue-Zeit festlegbar“ gekennzeichnet sind, für alle Pipelines in allen Projekten innerhalb der Organisation geändert werden können.
    • Project-Sammlungsadministratoren können diese Einstellung aktivieren oder deaktivieren.
    • Greifen Sie auf diese Einstellung unter Organisationseinstellungen>Pipeline>Einstellungen zu. Screenshot: Einschränken von Variablen auf Organisationsebene, die zur Warteschlangenzeit festgelegt werden können
  • Projektebene:
    • Ähnlich wie auf Organisationsebene stellt die Aktivierung dieser Einstellung sicher, dass nur Variablen, die als "Zur Queue-Zeit festlegbar" gekennzeichnet sind, für alle Pipelines innerhalb eines bestimmten Projekts geändert werden können.
    • Wenn die Einstellung auf Organisationsebene aktiviert ist, gilt sie für alle Projekte und kann nicht deaktiviert werden.
    • Project-Administratoren können diese Einstellung aktivieren oder deaktivieren.
    • Greifen Sie unter Projekteinstellungen>Pipelines>Einstellungen auf diese Einstellung zu. Screenshot: Einschränken von Variablen, die auf Projektebene zur Warteschlangenzeit festgelegt werden können.

Das folgende Beispiel zeigt, dass die Einstellung aktiviert ist und Ihre Pipeline eine Variable my_variable definiert, die zur Warteschlangenzeit nicht festgelegt ist. Screenshot: Definieren einer Variable in einer klassischen Pipeline.

Angenommen, Sie möchten die Pipeline ausführen. Im Bereich Variablen werden keine Variablen angezeigt und die Schaltfläche Variable hinzufügen fehlt.

Screenshot: Variablenbereich mit aktivierter Einstellung.

Die Verwendung der REST-API-Aufrufe Builds - Queue und Runs - Run Pipeline , um einen Pipeline-Lauf in die Warteschlange zu stellen und den Wert von my_variable oder einer neuen Variable zu setzen, schlägt mit einem Fehler ähnlich dem folgenden fehl.

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

Parameter

Im Gegensatz zu Variablen kann eine ausgeführte Pipeline keine Pipelineparameter ändern. Parameter haben Datentypen wie number und string und können auf bestimmte Wertuntermengen beschränkt werden. Diese Einschränkung ist nützlich, wenn ein vom Benutzer konfigurierbarer Aspekt der Pipeline nur Werte aus einer vordefinierten Liste akzeptieren sollte, um sicherzustellen, dass die Pipeline keine beliebigen Daten akzeptiert.

Aktivierung der Parameterüberprüfung von Shellaufgabenargumenten

Pipelines können auf Aufgaben verweisen, die innerhalb der Pipeline ausgeführt werden. Einige Aufgaben enthalten einen arguments Parameter, mit dem Sie weitere Optionen für den Vorgang angeben können.

Wenn die Einstellung Enable shell tasks arguments parameter validationd aktiviert ist, wird der Argumentparameter überprüft, um sicherzustellen, dass die Shell Ordnungsgemäß Zeichen wie Semikolons, Anführungszeichen und Klammern ausführt. Ähnlich wie bei der Option 'Grenzwerte für Variablen festlegen', die zum Zeitpunkt der Warteschlange gesetzt werden können, können Sie die Überprüfung von Shell-Aufgaben-Argumenten auf Organisations- oder Projektebene unter Einstellungen>Pipelines>Einstellungen konfigurieren.

Wenn dieses Feature aktiviert ist, lösen alle Überprüfungsprobleme im Zusammenhang mit dem arguments Parameter eine Fehlermeldung wie die folgende aus:

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

Um dieses Problem zu beheben, passen Sie die Argumente an, indem Sie Sonderzeichen wie in der Fehlermeldung angegeben ausblenden. Diese Überprüfung gilt für den arguments Parameter in den folgenden spezifischen Aufgaben:

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