Entfernen von Nur-Text-Geheimnissen

Abgeschlossen

Die Offenlegung vertraulicher Informationen wie Kennwörter, API-Schlüssel oder Datenbankverbindungszeichenfolgen kann zu schwerwiegenden Sicherheitsrisiken wie Datenverletzungen, unbefugtem Zugriff auf Systeme oder sogar finanziellen Verlusten führen. Daher muss unbedingt sichergestellt werden, dass Nur-Text-Geheimnisse nicht unsicher gespeichert oder übertragen werden.

Das Entfernen von Nur-Text-Geheimnissen und das Ersetzen durch Variablen oder Token ist eine bewährte Methode, die es Teams ermöglicht, ihre vertraulichen Informationen sicher zu speichern und zu verwalten, während sie weiterhin in ihren Pipelines oder Anwendungen verwendet werden können.

Mithilfe sicherer Methoden wie FileTransform, Azure Key Vault oder anderer Tools können Teams gewährleisten, dass Pipelines und Anwendungen sicher und zuverlässig erstellt und bereitgestellt werden, während ihre vertraulichen Informationen vor neugierigen Blicken geschützt sind.

Es gibt viele Möglichkeiten, mit Azure Pipelines für jede Technologie und jeden Anwendungstyp eine sichere Anwendung zu erstellen.

In dieser Lerneinheit erfahren Sie, wie Sie Azure Pipelines verwenden, um eine sichere .NET-Anwendung zu erstellen. Sie erstellen Token für Datenbankverbindungen oder Variablen, erstellen eine YAML-Pipeline und entfernen Nur-Text-Geheimnisse.

Voraussetzungen

  • Eine Azure DevOps-Organisation.
  • Eine .NET-Anwendung oder eShopOnWeb aus Schritt 1.
  • Visual Studio Community, VS Code oder eine andere IDE, die .NET Core unterstützt.
  • Ein Azure-Abonnement.

Importieren von eShopOnWeb in Ihr Azure DevOps-Repository

Das Repository ist wie folgt organisiert:

  • Der Ordner „.ado“ enthält Azure DevOps-YAML-Pipelines.
  • Der Ordner „.devcontainer“ enthält ein Containersetup für die Entwicklung mithilfe von Containern (entweder lokal in VS Code oder über GitHub Codespaces).
  • Der Ordner „.Azure“ enthält eine Bicep- und ARM-Vorlageninfrastruktur als Codevorlagen.
  • Der Ordner „src“ enthält die .NET 6-Website, die in den Labszenarien verwendet wird.

Führen Sie die folgenden Schritte aus, um das Repository in Ihre Azure DevOps-Organisation zu importieren:

  1. Wählen Sie in Ihrer Azure DevOps-Organisation das Projekt aus, in das Sie die eShopOnWeb-Anwendung importieren möchten.

  2. Öffnen Sie die Registerkarte „Repositorys“, und klicken Sie auf „Repository importieren“.

  3. Klicken Sie auf der Seite „Repository importieren“ auf den Link „Repository importieren“ (unter dem Seitentitel).

  4. Fügen Sie die folgenden Informationen hinzu: „Repositorytyp: Git“, „Klon-URL: https://github.com/MicrosoftLearning/eShopOnWeb.git„, „Name: eShopOnWeb“

    Screenshot of Azure Pipelines showing how to import a git repository from GitHub.

  5. Klicken Sie auf „Importieren“, und warten Sie, bis Ihr Repository bereit ist.

Hinweis

Weitere Informationen zum Importieren eines Git-Repositorys finden Sie unter Importieren eines Git-Repositorys.

Erstellen von Tokens für Datenbankverbindungen oder Variablen

Der erste Schritt beim Erstellen einer sicheren Anwendung besteht darin, alle Geheimnisse aufzulisten, die Sie ersetzen möchten, z. B. Datenbankverbindungen oder Variablen mit vertraulichen Informationen, die sicher gespeichert sind und in Ihrem Code oder Ihrer Pipeline referenziert werden.

  1. Öffnen Sie Ihre .NET-Anwendung in VS Code oder Visual Studio.

  2. Suchen Sie die Geheimnisse, die Sie ersetzen möchten. Beispielsweise finden Sie die Datenbankverbindungszeichenfolge in der Datei appsettings.json im Webprojekt im Ordner „src“.

    Screenshot of Visual Studio with eShopOnWeb project showing the appsettings.json file.

  3. Fügen Sie der JSON-Datei ihre Datenbankverbindungszeichenfolge oder andere vertrauliche Informationen im folgenden Format hinzu:

    {
        "ConnectionStrings": {
            "CatalogConnection": "Server=(localdb)\\mssqllocaldb;Integrated Security=true;Initial Catalog=Microsoft.eShopOnWeb.CatalogDb;",
            "IdentityConnection": "Server=(localdb)\\mssqllocaldb;Integrated Security=true;Initial Catalog=Microsoft.eShopOnWeb.Identity;"
          },
        "ReleaseVersion":  "1.0"
    }
    
  4. Ersetzen Sie die vertraulichen Informationen durch Platzhalter.

    {
        "ConnectionStrings": {
            "CatalogConnection": "CatalogConnectionToken",
            "IdentityConnection": "IdentityConnectionToken"
          },
        "ReleaseVersion":  "ReleaseVersionToken"
    }
    

    Wichtig

    Sie können die tatsächlichen Informationen oder ein Token wie ConnectionToken oder ReleaseVersion als Wert verwenden. Dieser wird dann in der Pipeline ersetzt.

  5. Speichern Sie die Änderungen an der JSON-Datei, und übertragen Sie Ihre Änderungen per Commit oder Push in das Repository.

Erstellen einer neuen Variablengruppe

Der nächste Schritt besteht darin, eine neue Variablengruppe in Azure DevOps zu erstellen, um die Token zu speichern, die Sie in Schritt 1 erstellt haben.

  1. Öffnen Sie Azure DevOps, und wechseln Sie zu Ihrem Projekt.
  2. Klicken Sie auf „Bibliothek“ und dann auf „Variablengruppen“.
  3. Klicken Sie auf „Variablengruppe erstellen“, und fügen Sie die Variablen hinzu, die Sie sicher speichern und in Ihrer Datei appsettings.json ersetzen möchten:
    • Name: eShopOnWeb
    • Variables:
      • CatalogConnectionToken: Server=MYSERVER;Integrated Security=true;Initial Catalog=Microsoft.eShopOnWeb.CatalogDb;
      • IdentityConnectionToken: Server=MYSERVER;Integrated Security=true;Initial Catalog=Microsoft.eShopOnWeb.Identity;
      • ReleaseVersionToken: 1.1 Screenshot of Azure DevOps showing the creation of a new variable group.
  4. Klicken Sie unbedingt auf das Symbol „Sperren“, um die Variable zu sichern.
  5. Klicken Sie auf „Speichern“, um die Variablengruppe zu erstellen.

Erstellen einer YAML-Pipeline und Importieren der Variablengruppe

Der nächste Schritt besteht darin, eine YAML-Pipeline in Azure Pipelines zu erstellen oder vorhandene Definitionen zu verwenden. Diese Pipeline erstellt Ihre Anwendung und verweist auf die Token, die Sie in Schritt 1 erstellt haben.

  1. Öffnen Sie Azure DevOps, und wechseln Sie zu Ihrem Projekt.

  2. Klicken Sie auf „Pipelines“ und dann auf „Neue Pipeline“.

  3. Wählen Sie Azure Repos Git als Quelle des Codes aus, und wählen Sie das Repository aus, das die Anwendung enthält. Sie können das in Schritt 1 importierte Repository „eShopOnWeb“ auswählen. Screenshot of Azure DevOps with eShopOnWeb project showing the appsettings.json file.

  4. Wählen Sie „Vorhandene Azure Pipelines-YAML-Datei“ aus, wählen Sie im Ordner .ado die vorhandene Datei eshoponweb-ci.yml aus, und klicken Sie auf „Weiter“. Screenshot of Azure DevOps showing the import of existing eshoponweb-ci.yml file.

  5. Importieren Sie im YAML-Editor die in Schritt 2 erstellte Variablengruppe, indem Sie am Anfang der Datei den folgenden Code hinzufügen:

    variables:
    - group: eShopOnWeb
    - name: ConnectionStrings.CatalogConnection
      value: '$(CatalogConnectionToken)'
    - name: ConnectionStrings.IdentityConnection
      value: '$(IdentityConnectionToken)'
    - name: ReleaseVersion
      value: '$(ReleaseVersionToken)'
    

    Wichtig

    Sie müssen die richtigen Variablennamen beginnend mit dem Stammknotennamen angeben, in diesem Beispiel ConnectionStrings.CatalogConnection und ConnectionStrings.IdentityConnection. Sie finden die richtigen Namen in der Datei appsettings.json.

  6. Fügen Sie den Schritten den Code der FileTransform-Aufgabe hinzu:

    variables:
    - group: eShopOnWeb
    
    - task: FileTransform@1
      inputs:
        folderPath: '$(System.DefaultWorkingDirectory)/src/web'
        fileType: 'json'
        targetFiles: 'appsettings.json'
    

    Screenshot of Azure DevOps showing the new task File Transform in the eshoponweb-ci.yml file.

  7. Klicken Sie auf „Speichern“, um die Pipelinedatei mit der neuen Aufgabe zu speichern, und führen Sie einen Commit aus.

Ausführen der Releasepipeline

Der letzte Schritt besteht darin, Ihre Releasepipeline auszuführen, um Ihre Anwendung zu erstellen und die Token durch die Werte zu ersetzen, die Sie in der Variablengruppe gespeichert haben.

  1. Klicken Sie auf der Registerkarte „Pipelines“ auf „Pipelines“, und klicken Sie dann auf die Pipeline, die Sie in Schritt 3 erstellt haben.

  2. Klicken Sie auf „Pipeline ausführen“, und klicken Sie dann auf „Ausführen“.

  3. Sobald die Pipeline abgeschlossen ist, sehen Sie, dass die Token durch die Werte ersetzt wurden, die Sie in der Variablengruppe in der Datei appsettings.json gespeichert haben. Überprüfen Sie die Pipelineprotokollergebnisse, um zu sehen, dass die Token ersetzt wurden:

    Screenshot of Azure DevOps showing the pipeline log with tokens replaced.

    Wichtig

    In diesem Beispiel wurde die Variable CatalogConnectionToken nicht verschlüsselt, damit der Wert im Protokoll angezeigt wird. In einem realen Szenario müssen Sie die Variable verschlüsseln, um zu vermeiden, dass der Wert im Protokoll offengelegt wird.

  4. Öffnen Sie die Artefakte aus Ihren Pipelineausführungsergebnissen, und laden Sie die Datei Web.zip herunter.

    Screenshot of Azure DevOps showing the pipeline results artifacts download.

  5. Entzippen Sie die Datei, und öffnen Sie die Datei appsettings.json. Sie können sehen, dass die Token durch die Werte ersetzt wurden, die Sie in der Variablengruppe gespeichert haben.

    Screenshot of Azure DevOps showing the appsettings.json with tokens replaced.

Weitere Informationen zur Dateitransformation und zur Variablenersetzung in YAML-Pipelines finden Sie unter: