Einschränken der Agentprotokollierung

Abgeschlossen

Beim Erstellen und Bereitstellen von Anwendungen mit Azure Pipelines muss unbedingt sichergestellt werden, dass Pipeline-Agents vertrauliche Informationen wie Kennwörter, API-Schlüssel oder andere Geheimnisse nicht versehentlich protokollieren. Dies kann vorkommen, wenn vertrauliche Informationen während des Build- oder Bereitstellungsprozesses an der Konsole ausgegeben werden, was zu schwerwiegenden Sicherheitsrisiken führt.

In dieser Lerneinheit erfahren Sie, wie Sie Azure Pipelines und YAML-Pipelines konfigurieren, um die Agentprotokollierung von Geheimnissen mithilfe von Best Practices und sicheren Methoden einzuschränken.

Geheimnisse und Protokolle

Azure Pipelines versucht, Geheimnisse nach Möglichkeit aus Protokollen zu bereinigen. Diese Filterung erfolgt nach bestem Bemühen und kann nicht alle Wege abfangen, auf denen Geheimnisse kompromittiert können. Geheimnisse sollten nicht an der Konsole ausgegeben, in Befehlszeilenparametern verwendet oder in Dateien protokolliert werden.

Verwenden des Überwachungsdiensts

Viele Pipelineereignisse werden im Überwachungsdienst aufgezeichnet. Überprüfen Sie das Überwachungsprotokoll in regelmäßigen Abständen, um sicherzustellen, dass keine schädlichen Änderungen übersehen wurden. Hier finden Sie Informationen zum Einstieg: https://dev.azure.com/ORG-NAME/_settings/audit.

Möglichkeiten zum Einschränken der Agentprotokollierung von Geheimnissen

Bei der Arbeit mit Azure Pipelines ist es gängige Praxis, Dienstverbindungen zu verwenden, die eine neue Sicherheitsebene für vertrauliche Informationen wie Benutzernamen, Kennwörter und API-Schlüssel hinzufügen. Wenn Sie keine Dienstverbindungen oder andere Best Practices einsetzen, sind Pipelines ungeschützt, und es kann leicht passieren, dass auf deren Informationen zugegriffen und sie in Pipelineprotokollen offengelegt werden, was zu potenziellen Datenschutzverletzungen und Sicherheitsrisiken führt.

Indem Sie diese Empfehlungen sowie die Empfehlungen in unseren anderen Lerneinheiten befolgen, können Sie sicherstellen, dass Ihre vertraulichen Informationen sicher gespeichert werden und Ihre Pipeline jederzeit ein vertrauenswürdiges und zuverlässiges Tool für Ihre Organisation ist.

  • Verwenden von Azure Key Vault: In Azure Key Vault können Sie vertrauliche Informationen wie Kennwörter und API-Schlüssel getrennt von Ihrer Pipeline speichern. Sie können in Ihrer Pipeline auf diese Geheimnisse verweisen, ohne dass sie in den Pipelineprotokollen angezeigt werden. Zur Verwendung von Azure Key Vault können Sie eine neue Azure Key Vault-Instanz erstellen, Ihre Geheimnisse dem Tresor hinzufügen und dann mithilfe der Azure Key Vault-Aufgabe in Ihrer Pipeline darauf verweisen.
  • Verwenden von Variablengruppen: Variablengruppen sind eine praktische Methode zum Speichern und Verwalten von Variablen über mehrere Pipelines hinweg. Sie können eine neue Variablengruppe erstellen, vertrauliche Informationen als Variablen hinzufügen und dann in Ihrer Pipeline darauf verweisen. Indem Sie diese Variablen als „Geheimnis“ markieren, können Sie sicherstellen, dass sie nicht in den Pipelineprotokollen angezeigt werden.
  • Verwenden von Umgebungsvariablen: Sie können auch Umgebungsvariablen verwenden, um vertrauliche Informationen zu speichern. Umgebungsvariablen sind eine Möglichkeit zum Speichern von Daten, auf die von Prozessen zugegriffen werden kann, die auf demselben Computer ausgeführt werden. In Azure Pipelines können Sie Umgebungsvariablen für Pipelines, Aufträge oder Aufgaben definieren. Indem Sie diese Variablen als „Geheimnis“ markieren, können Sie sicherstellen, dass sie nicht in den Pipelineprotokollen angezeigt werden.

Unabhängig von der gewählten Methode muss unbedingt sichergestellt werden, dass in den Pipelineprotokollen nicht ohne Weiteres auf Ihre vertraulichen Informationen zugegriffen werden kann.

Verwenden von Protokollierungseinschränkungen auf Agentebene

Eine weitere Möglichkeit zum Einschränken der Agentprotokollierung von Geheimnissen ist die Verwendung von Protokollierungseinschränkungen auf Agentebene. Diese Einschränkungen können verhindern, dass bestimmte Befehle oder Protokollebenen an der Konsole ausgegeben werden, wodurch das Risiko der Offenlegung vertraulicher Informationen weiter verringert werden kann.

Führen Sie die folgenden Schritte aus, um Protokollierungseinschränkungen auf Agentebene zu verwenden:

  1. Bearbeiten Sie Ihre Pipeline.
  2. Wählen Sie Variablen aus.
  3. Fügen Sie eine neue Variable mit dem Namen System.Debug und dem Wert „true“ hinzu. Screenshot of Azure Pipelines showing how to add a new system.debug=true variable.
  4. Speichern Sie die neue Variable.
  5. Führen Sie Ihre Pipeline aus, um die Protokolle anzuzeigen.

Die Einstellung System.Debug=False deaktiviert ausführliche Protokolle für alle Ausführungen. Mit dem Kontrollkästchen „System Diagnose aktivieren“ können Sie auch ausführliche Protokolle für eine einzelne Ausführung konfigurieren. Weitere Informationen finden Sie unter Überprüfen von Protokollen zur Diagnose von Pipelineproblemen.

Verwenden des Parameters „issecret“

Mit dem Parameter issecret können Sie Geheimnisse in den Agentprotokollen maskieren.

Um diese Variable als Skript mit einem Protokollierungsbefehl festzulegen, müssen Sie das Flag issecret übergeben.

Wenn issecret auf „true“ festgelegt ist, wird der Wert der Variable als Geheimnis gespeichert und im Protokoll maskiert.

Legen Sie die Geheimnisvariable mySecretVal fest:

- powershell: |
    Write-Host "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"

Rufen Sie die Geheimnisvariable „mySecretVal“ ab:

- powershell: |
    Write-Host "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
- powershell: |
    Write-Host $(mySecretVal)

Ausgabe der PowerShell-Variable:

***
Finishing: Powershell

Probieren Sie es aus!

Erstellen Sie eine neue YAML-Pipeline mit einer Aufgabe, die eine Geheimnisvariable in den Agentprotokollen protokolliert. Konfigurieren Sie die Pipeline mithilfe des Parameters issecret so, dass das Geheimnis in den Protokollen maskiert wird.

Weitere Informationen finden Sie unter: