Sicherheitsüberlegungen für DevOps-Plattformen
Die Sicherheit sollte bei cloudbasierten Entwicklungsplattformen wie Azure DevOps und GitHub immer hohe Priorität haben. Microsoft aktualisiert und verwaltet die Sicherheit der zugrunde liegenden Cloudinfrastruktur, es ist aber Ihre Aufgabe, die bewährten Sicherheitsmethoden für Ihre eigenen Azure DevOps-Organisationen und GitHub-Instanzen zu überprüfen und zu konfigurieren.
Berücksichtigen Sie die folgenden kritischen Sicherheitsbereiche unabhängig davon, ob Sie Umgebungen über Infrastructure-as-Code (IaS) in CI/CD-Pipelines (Continuous Integration und Continuous Delivery) bereitstellen oder Code für Ihre in Azure gehosteten Anwendungen bereitstellen.
Einschränken des Zugriffs auf DevOps-Tools
Befolgen Sie das Prinzip der geringsten Rechte, indem Sie die rollenbasierte Zugriffssteuerung (RBAC) über Microsoft Entra IDverwenden. Weisen Sie Benutzer*innen und Diensten den geringstmöglichen Zugriff auf Ihre DevOps-Plattformen zu, die sie für ihre Geschäftsfunktionen benötigen. Weitere Informationen finden Sie in den folgenden Artikeln:
- Verbinden Ihrer Organisation mit Microsoft Entra ID
- Integration des einmaligen Anmeldens von Microsoft Entra (Single Sign-On, SSO) mit GitHub Enterprise Cloud
- Azure DevOps: Best Practices für die Sicherheit
Nachdem Sie Microsoft Entra ID als Identitätsverwaltungsebene einrichtet haben, befolgen Sie bewährte Methoden zum Verwalten von Azure DevOps-Rollenzuweisungen über Microsoft Entra-Gruppenmitgliedschaften. Sie können Azure DevOps-Rollen Microsoft Entra-Gruppen zuweisen und die Microsoft Entra-Mitgliedschaft der Benutzer*innen anpassen, um ihren Azure DevOps-Zugriff zu ändern oder aufzuheben.
Verwenden Sie die Berechtigungsverwaltung von Microsoft Entra ID, um Zugriffspakete zu erstellen, die Microsoft Entra-Benutzer*innen zeitlich beschränkten Zugriff auf erforderliche Ressourcen ermöglichen, damit sie ihre Aufgaben erledigen können.
Sie können auch Microsoft Entra Privileged Identity Management für den Just-In-Time-Zugriff verwenden, um Einzelpersonen für einen bestimmten Zeitraum auf Azure DevOps-Administratorrollen hochzustufen.
Verwalten Sie die Sicherheit in Azure DevOps über Sicherheitsgruppen, Richtlinien und Einstellungen auf Organisations-, Projekt- oder Objektebene in Azure DevOps. Deaktivieren Sie nach Möglichkeit die Berechtigungsvererbung in Azure DevOps.
Einschränken des Repository- und Branchzugriffs
Schränken Sie den Repositoryzugriff, die Berechtigungen und die Brancherstellung ein, um Ihren Code und Ihre Umgebungen vor unerwünschten oder böswilligen Änderungen zu schützen. Verwenden Sie für das Einschränken des Zugriffs auf Repositorys Sicherheitsgruppen in Azure DevOps. Schränken Sie den Personenkreis ein, der Code in Ihren Branches lesen und aktualisieren kann, indem Sie Branchberechtigungen festlegen.
Einschränken von Pipelinezugriff und -berechtigungen
Über böswilligen Code können Unternehmensdaten und Geheimnisse gestohlen oder Produktionsumgebungen beschädigt werden. Implementieren Sie Schutzmaßnahmen, die das Bereitstellen von böswilligem Code in Pipelines verhindern. Durch das Einschränken des Zugriffs und die Implementierung von Schutzmaßnahmen können Sie auch Lateralbewegungen zu anderen Projekten, Pipelines und Repositorys aus kompromittierten Pipelines verhindern.
Wenden Sie einen inkrementellen Ansatz zum Schutz Ihrer YAML-Pipelines an. Weitere Informationen finden Sie unter Planen des Schutzes Ihrer YAML-Pipelines.
Auswählen des DevOps-Agent basierend auf Sicherheitsanforderungen
Sie können von Microsoft gehostete oder selbstgehostete Agents verwenden, um Azure DevOps- und GitHub-Pipelines zu verwenden. Sie müssen bei jedem Agenttyp bestimmte Kompromisse eingehen.
Bei von Microsoft gehosteten Agents müssen Sie sich nicht um Upgrades oder die Wartung kümmern. Selbstgehostete Agents bieten mehr Flexibilität beim Implementieren von Sicherheitsmaßnahmen. Sie steuern die Agenthardware, das Betriebssystem und die installierten Tools.
Unter Azure Pipelines-Agents finden Sie die Unterschiede zwischen den verschiedenen Agenttypen und mögliche Sicherheitsaspekte.
Verwenden von sicheren und bereichsbezogenen Dienstverbindungen
Verwenden Sie, wann immer es möglich ist, eine Dienstverbindung zum Bereitstellen von Infrastrukturen oder Anwendungscode in einer Azure-Umgebung. Die Dienstverbindung sollte über eingeschränkten Bereitstellungszugriff auf bestimmte Azure-Ressourcen oder Ressourcengruppen verfügen, um die potenzielle Angriffsoberfläche zu verringern. Erwägen Sie außerdem das Erstellen separater Dienstverbindungen für Entwicklungs-, Test-, QA- und Produktionsumgebungen.
Verwenden eines Geheimnisspeichers
Niemals sollten Geheimnisse hartcodiert im Code oder der zugehörigen Dokumentation in Ihren Repositorys stehen. Angreifer*innen scannen Repositorys auf der Suche nach offengelegten vertraulichen Daten, die sie für einen Exploit nutzen können. Richten Sie einen Geheimnisspeicher wie Azure Key Vault ein, und verweisen Sie in Azure-Pipelines auf den Speicher, um Schlüssel, Geheimnisse oder Zertifikate sicher abzurufen. Weitere Informationen finden Sie unter Schützen von Pipeline und CI/CD-Workflow. Sie können auch Key Vault-Geheimnissen in GitHub Actions-Workflows verwenden.
Verwenden von gehärteten DevOps-Arbeitsstationen zum Erstellen und Bereitstellen von Code
Plattform- und Entwicklungsteams verfügen häufig über erhöhte Rechte auf der Azure-Plattform oder in anderen Diensten wie Azure DevOps und GitHub. Dieser Zugriff führt zu einer potenziell größeren Angriffsfläche. Implementieren Sie Sicherheitsmaßnahmen, um alle Endpunkte und Arbeitsstationen zu schützen, die Sie zum Entwickeln und Bereitstellen von Code verwenden.
Verwenden Sie gehärtete sichere Administratorarbeitsstationen zum Bereitstellen von Änderungen in Hochrisiko- und Produktionsumgebungen. Weitere Informationen finden Sie unter Sichere Endpunkte mit Zero Trust.
Durchführen von Sicherheitsüberprüfungen und -tests
Unabhängig davon, ob Sie Anwendungscode oder Infrastructure-as-Code bereitstellen, sollten Sie die bewährten Methoden und Kontrollen für DevSecOps in Ihren Pipelines implementieren. Integrieren Sie Sicherheit schon früh in Ihrer CI/CD-Journey, um spätere kostspielige Sicherheitsverletzungen zu verhindern. Entwickeln Sie eine Strategie zum Implementieren statischer Codeanalysen, Komponententests, Geheimnisüberprüfungen und Paket-/Abhängigkeitsüberprüfungen in Ihren Pipelines.
Sicherheitstools für Unternehmen wie Microsoft Defender für Cloud können mit DevOps-Tools integriert werden. So kann Defender für Cloud beispielsweise anfällige Containerimages in Ihren CI/CD-Workflows identifizieren. Verwenden Sie für GitHub Actions und Repositorys GitHub Advanced Security, um Code, Geheimnisse und Abhängigkeiten zu überprüfen.
Überprüfen Sie regelmäßig die Überwachungsereignisse, um unerwartete Verwendungsmuster von Administrator*innen und anderen Benutzer*innen zu überwachen und darauf zu reagieren. Sie können auf die Überwachungsprotokolle für Ihre Azure DevOps-Organisation zugreifen, sie filtern und exportieren. Erstellen Sie für die langfristige Speicherung und detaillierte Protokollabfragen einen Überwachungsdatenstrom zu einem Azure Monitor Log Analytics-Arbeitsbereich oder einem SIEM-System (Security Information & Event Management) wie Microsoft Sentinel.