Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 Task-Ausgabevariablen sind immer schreibgeschützt. 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 klassischen Pipeline-Editor definieren Sie die Variable für die Warteschlangenzeit, indem Sie das Kontrollkästchen für "Zur Warteschlangenzeit festlegen" 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?
Wenn ein Benutzer die Pipeline manuell ausführt, kann er Variablen für die Warteschlangenzeit auswählen und die Werte ändern.
Benutzer müssen über die Berechtigung "Warteschlangenbuildkonfiguration bearbeiten" für eine Pipeline verfügen, um zur Warteschlangenzeit festgelegte Variablen zu definieren.
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.
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.
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.
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.
Das folgende Beispiel zeigt die Variablen für eine klassische Pipeline, wobei einige von ihnen als "zur Warteschlangenzeit gesetzt werden können" gekennzeichnet sind. Die BuildPlatform Variable kann zur Warteschlangenzeit festgelegt werden, dies ist jedoch BuildConfiguration nicht möglich.
Wenn Sie diese Pipeline ausführen, sind nur die Variablen, die zur Warteschlangenzeit festlegbar sind, auf dem Bildschirm Variablen sichtbar, um ausgewählt zu werden.
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.
Verwenden der Builds – Warteschlange oder Läufe – Pipeline ausführen APIs, um einen Pipelineablauf in die Warteschlange zu stellen, und der Versuch, den Wert einer Variablen festzulegen, die nicht als zur Warteschlangenzeit setzbar gekennzeichnet ist, schlägt mit einem Fehler wie dem 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 argument 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 (BatchScript)
- Schlagen
- SSH
- AzureFileCopy (Azure-Dateikopie)
- WindowsMachineFileKopieren
Sie können die Überprüfung von Shellaufgabenargumenten 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 Fehlermeldung angegeben entfernen.