Sichere Verwendung von Pipelinevariablen und -parametern

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

In Azure-Pipelines können Sie Es Benutzern ermöglichen, die Pipelineausführung anzupassen, indem Sie ihre Eingaben mit Variablen und Parametern erfassen. 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 Sie die Empfehlungen in Make your Azure DevOps secure und 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 sind eine bequeme Möglichkeit, benutzereingaben im Voraus zu sammeln und die Datenübertragung zwischen Pipelineschritten zu erleichtern. Variablen, die in YAML-Aufgaben oder Skripten definiert sind, sind jedoch standardmäßig lese-schreibbar. Werte, die in vorgelagerten Schritten festgelegt werden, können nachgeschaltete Werte unerwartet ändern.

Der folgende Skriptausschnitt ruft z. B. eine Variable mit dem Namen MyConfig.

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

Wenn ein vorheriger Schritt den MyConfig Variablenwert Debug & deltree /y c:auf festgelegt hat, löscht das Ausführen dieses Skripts den Inhalt des Build-Agents und kann zu unbeabsichtigten Folgen führen. In diesem Beispiel wird die potenzielle Gefahr solcher Einstellungen hervorgehoben.

Systemvariablen wie Build.SourcesDirectory und Aufgabenausgabevariablen sind stets nur-lesend. Sie können eine variable, die in einem Skript oder einer YAML-Aufgabe erstellt wurde, auch als schreibgeschützt festlegen, indem Sie das isReadonly=true Flag im Protokollierungsbefehl übergeben.

In einer YAML-Variablendefinition können Sie eine schreibgeschützte Variable mithilfe des spezifischen readonly Schlüssels angeben:

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

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

Warteschlangenzeitvariablen

Wenn Sie eine Variable in der Azure Pipelines-Benutzeroberfläche definieren, können Sie auswählen, ob Benutzer den Wert während der Pipelineausführung außer Kraft setzen können. Variablen, mit denen Benutzer ihren Wert zur Warteschlangenzeit festlegen können, werden als Warteschlangenzeitvariablen bezeichnet und können nur in der Benutzeroberfläche von Azure Pipelines Variables definiert werden.

Im Editor der Classic-Pipeline definieren Sie eine zum Zeitpunkt der Warteschlange festlegbare Variable, indem Sie das Kontrollkästchen für „Zum Zeitpunkt der Warteschlange festlegbar“ aktivieren. In YAML-Pipelines legen Sie sie fest, indem Sie "Zulassen" auswählen, dass Benutzer diesen Wert beim Ausführen dieser Pipeline außer Kraft setzen.

Hinweis

Wählen Sie in einer Releasepipeline die Option Zum Zeitpunkt der Freigabe festlegbar aus. Weitere Informationen finden Sie unter Wie kann ich Variablen zur Veröffentlichungszeit bearbeiten?

Screenshot: Definieren einer Warteschlangenzeitvariable.

Wenn ein Benutzer die Pipeline manuell ausführt, kann er Variablen für die Warteschlangenzeit auswählen und die Werte ändern.

Screenshot: Aktualisieren des Werts einer Warteschlangenzeitvariable.

Benutzende müssen über die Berechtigung „Konfiguration des Warteschlangenaufbaus bearbeiten“ für eine Pipeline verfügen, um Variablen definieren zu können, die zum Zeitpunkt der Warteschlange festgelegt werden.

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

Die Benutzeroberfläche von Azure Pipelines und die REST-API, die eine Pipeline ausführt, bieten Benutzern Möglichkeiten, neue Variablen zur Warteschlangenzeit hinzuzufügen. Mit dieser Möglichkeit können Benutzer Variablen erstellen, die der Pipelineautor nicht definiert hat, Systemvariablen außer Kraft setzen und Werte für vorhandene Variablen zur Warteschlangenzeit festlegen.

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

Um Probleme zu vermeiden, die durch diese Fähigkeiten verursacht werden, können Sie Variablen einschränken, die zur Warteschlangenzeit festgelegt werden können. Sie können die Einstellung Variablen einschränken, die zur Warteschlangenzeit festgelegt werden können aktivieren, sodass Benutzer nur Variablen festlegen können, die explizit zur Warteschlangenzeit als "festlegbar" gekennzeichnet sind, oder Benutzer können diesen Wert außer Kraft setzen, wenn diese Pipeline zur Warteschlangenzeit ausgeführt wird.

Diese Einstellung kann auf Organisations- und Projektebene angewendet werden.

Screenshot der Option, Variablen zu begrenzen, die zur Warteschlangenzeit auf Organisationsebene festgelegt werden können.

Projektsammlungsadministratoren können diese Einstellung auf Organisationsebene in den Organisationseinstellungen>Pipelines>Einstellungen anwenden. Wenn die Einstellung aktiviert ist, können nur Variablen, die explizit als Settable at queue time gekennzeichnet sind, während der Warteschlangenzeit für alle Pipelines in allen Projekten in der Organisation festgelegt werden.

Screenshot der aktivierten Option zur Einschränkung der Variablen, die zur Warteschlangenzeit auf Organisationsebene festgelegt werden können.

Project-Administratoren können diese Einstellung auf Projektebene in den Einstellungen von Project-Einstellungen>für Pipelines>anwenden. Wenn die Einstellung aktiviert ist, können nur Variablen, die explizit als "Settable at queue time " gekennzeichnet sind, für alle Pipelines in diesem Projekt zur Warteschlangenzeit festgelegt werden. Wenn die Einstellung nicht auf Organisationsebene aktiviert ist, kann sie für einzelne Projekte aktiviert oder deaktiviert werden.

Wenn die Einstellung auf Organisationsebene aktiviert ist, gilt sie für alle Projekte in der Organisation und kann nicht auf Projektebene deaktiviert werden.

Screenshot der Option zur Einschränkung der Variablen, die bei der Warteschlangenzeit festgelegt werden können – auf Projektebene nicht verfügbar.

Das folgende Beispiel zeigt die Variablen für eine Classic-Pipeline, wobei einige davon mit Bei der Warteschlangenzeit einstellbar gekennzeichnet sind. Die BuildPlatform Variable kann zur Warteschlangenzeit festgelegt werden, dies ist jedoch BuildConfiguration nicht möglich.

Screenshot der Definition einer Variablen in einer klassischen Pipeline.

Wenn Sie diese Pipeline ausführen, sind auf der Seite Variablen nur die mit Bei der Warteschlangenzeit einstellbar gekennzeichneten Variablen zur Auswahl sichtbar.

Screenshot: Variablenbereich mit aktivierter Einstellung.

Wenn Limit-Variablen, die zur Warteschlangenzeit festgelegt werden können , auf Projekt- oder Organisationsebene aktiviert sind, wird die Schaltfläche " Variable hinzufügen " nicht angezeigt.

Screenshot, der zeigt, dass bei aktivierter Einstellung keine Variablen zur Laufzeit hinzugefügt werden können.

Wenn Sie die APIs Builds – Queue oder Runs – Run Pipeline verwenden, um eine Pipeline-Ausführung in die Warteschlange zu stellen und versuchen, den Wert einer Variablen festzulegen, die nicht mit Zur Zeit der Einreihung in die Warteschlange festlegbar gekennzeichnet ist, schlägt dies mit einer Fehlermeldung ähnlich der folgenden fehl:

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

Parameter

Eine ausgeführte Pipeline kann im Gegensatz zu Variablen keine Pipelineparameter ändern. Parameter haben Datentypen wie number und string und können auf spezifische Wertemengen 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 Validierung von Shell-Aufgabenargumenten

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

Durch Anwenden der Überprüfungseinstellung "Shellaufgaben aktivieren" werden arguments Parameter für integrierte Shellaufgaben überprüft, um nach Eingaben zu suchen, die Befehle in Skripts einfügen können. Die Überprüfung stellt sicher, dass die Shell Zeichen wie Semikolons, Anführungszeichen und Klammern in den folgenden Pipelineaufgaben korrekt ausführt.

  • PowerShell
  • BatchScript
  • Bash
  • SSH
  • AzureFileCopy (Azure-Dateikopie)
  • WindowsComputerDateiKopieren
  • PowerShellOnTargetMachines
  • SqlAzureDacpacDeployment
  • SqlDacpacDeploymentOnMachineGroup
  • AzureCLI
  • AzurePowerShell
  • ServiceFabricPowerShell

Sie können die Option Validierung von Shell-Aufgaben-Argumenten aktivieren auf Organisationsebene unter Organisationseinstellungen>Pipelines>Einstellungen oder auf Projektebene unter Projekteinstellungen>Pipelines>Einstellungen anwenden. Wenn die Einstellung auf Organisationsebene aktiviert ist, gilt sie für alle Projekte in der Organisation und kann nicht auf Projektebene deaktiviert werden.

Wenn diese Einstellung aktiviert ist, löst jedes Überprüfungsproblem im Zusammenhang mit einem arguments Parameter die folgende Fehlermeldung aus:

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

Um das Problem zu beheben, passen Sie das Argument an, indem Sie Sonderzeichen wie in der Fehlernachricht angegeben mit Maskierungszeichen maskieren.