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 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?
Wenn ein Benutzer die Pipeline manuell ausführt, kann er Variablen für die Warteschlangenzeit auswählen und die Werte ändern.
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.
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 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.
Wenn Sie diese Pipeline ausführen, sind auf der Seite Variablen nur die mit Bei der Warteschlangenzeit einstellbar gekennzeichneten Variablen zur Auswahl sichtbar.
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.
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.