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 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.
Warteschlangenzeitvariablen sind für Endbenutzer verfügbar, wenn eine Pipeline manuell ausgeführt wird. Sie können ihre Werte ändern.
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.
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.
- 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.
Das folgende Beispiel zeigt, dass die Einstellung aktiviert ist und Ihre Pipeline eine Variable my_variable
definiert, die zur Warteschlangenzeit nicht festgelegt ist.
Angenommen, Sie möchten die Pipeline ausführen. Im Bereich Variablen werden keine Variablen angezeigt und die Schaltfläche Variable hinzufügen fehlt.
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