Empfehlungen zum Schutz von Anwendungsgeheimnissen

Gilt für diese Empfehlung für die Azure Well-Architected Framework-Sicherheitsprüfliste:

SE:09 Schützen Sie Anwendungsgeheimnisse, indem Sie deren Speicher härten und den Zugriff und die Bearbeitung einschränken und diese Aktionen überwachen. Führen Sie einen zuverlässigen und regelmäßigen Rotationsprozess aus, der Drehungen für Notfälle improvisieren kann.

In diesem Leitfaden werden die Empfehlungen zum Schützen vertraulicher Informationen in Anwendungen beschrieben. Die ordnungsgemäße Verwaltung von Geheimnissen ist für die Aufrechterhaltung der Sicherheit und Integrität Ihrer Anwendung, Workload und zugehörigen Daten von entscheidender Bedeutung. Ein unsachgemäßer Umgang mit Geheimnissen kann zu Datenschutzverletzungen, Dienstunterbrechungen, Verstößen gegen Gesetzliche Bestimmungen und anderen Problemen führen.

Anmeldeinformationen, z. B. API-Schlüssel, OAuth-Token (Open Authorization) und SSH-Schlüssel (Secure Shell) sind Geheimnisse. Einige Anmeldeinformationen, z. B. clientseitige OAuth-Token, können zur Laufzeit dynamisch erstellt werden. Dynamische Geheimnisse müssen trotz ihrer vorübergehenden Natur geschützt werden. Nicht anmeldeinformationen, z. B. Zertifikate und digitale Signaturschlüssel, können ebenfalls vertraulich sein. Complianceanforderungen können dazu führen, dass Konfigurationseinstellungen, die in der Regel nicht als geheim gelten, als Anwendungsgeheimnisse behandelt werden.

Definitionen 

Begriff Definition
Zertifikate Digitale Dateien, die die öffentlichen Schlüssel für die Verschlüsselung oder Entschlüsselung enthalten.
Leistungsnachweis Informationen, die verwendet werden, um die Identität des Herausgebers oder Consumers in einem Kommunikationskanal zu überprüfen.
Überprüfung von Anmeldeinformationen Der Prozess der Überprüfung des Quellcodes, um sicherzustellen, dass Geheimnisse nicht enthalten sind.
Verschlüsselung Der Prozess, bei dem Daten unlesbar gemacht und mit einem geheimen Code gesperrt werden.
Schlüssel Ein Geheimcode, der zum Sperren oder Entsperren verschlüsselter Daten verwendet wird.
Zugriff mit den geringsten Rechten Ein Zero Trust Prinzip, das darauf abzielt, eine Reihe von Berechtigungen zum Abschließen einer Auftragsfunktion zu minimieren.
Verwaltete Identität Eine Identität, die Ressourcen zugewiesen und von Azure verwaltet wird.
Nonsecret Informationen, die den Sicherheitsstatus der Workload nicht gefährden, wenn sie geleakt wird.
Drehung Der Prozess der regelmäßigen Aktualisierung von Geheimnissen, sodass sie, wenn sie kompromittiert werden, nur für einen begrenzten Zeitraum verfügbar sind.
`Secret` Eine vertrauliche Komponente des Systems, die die Kommunikation zwischen Workloadkomponenten erleichtert. Wenn Geheimnisse geleakt werden, können sie zu einer Sicherheitsverletzung führen.
X.509 Ein Standard, der das Format von Zertifikaten für öffentliche Schlüssel definiert.

Wichtig

Behandeln Sie Nonsecrets nicht wie Geheimnisse. Geheimnisse erfordern betriebstechnische Strenge, die für Nichtsecrets unnötig ist und die zu zusätzlichen Kosten führen kann.

Anwendungskonfigurationseinstellungen, z. B. URLs für APIs, die die Anwendung verwendet, sind ein Beispiel für Nonsecrets. Diese Informationen sollten nicht mit dem Anwendungscode oder den Anwendungsgeheimnissen gespeichert werden. Erwägen Sie, ein dediziertes Konfigurationsverwaltungssystem wie Azure App Configuration zu verwenden, um diese Einstellungen zu verwalten. Weitere Informationen finden Sie unter Was ist Azure App Configuration?.

Wichtige Entwurfsstrategien

Ihre Strategie für die Geheimverwaltung sollte Geheimnisse so weit wie möglich minimieren und in die Umgebung integrieren, indem Sie die Plattformfeatures nutzen. Wenn Sie beispielsweise eine verwaltete Identität für Ihre Anwendung verwenden, werden Zugriffsinformationen nicht in Verbindungszeichenfolgen eingebettet, und es ist sicher, die Informationen in einer Konfigurationsdatei zu speichern. Berücksichtigen Sie die folgenden Problembereiche, bevor Sie Geheimnisse speichern und verwalten:

  • Erstellte Geheimnisse sollten in einem sicheren Speicher mit strengen Zugriffskontrollen aufbewahrt werden.

  • Die Geheimnisrotation ist ein proaktiver Vorgang, während die Sperrung reaktiv ist.

  • Nur vertrauenswürdige Identitäten sollten Zugriff auf Geheimnisse haben.

  • Sie sollten einen Überwachungspfad verwalten, um den Zugriff auf Geheimnisse zu überprüfen und zu überprüfen.

Erstellen Sie eine Strategie um diese Punkte, um Identitätsdiebstahl zu verhindern, Zurückweisungen zu vermeiden und unnötige Informationen zu minimieren.

Sichere Methoden für die Verwaltung von Geheimnissen

Vermeiden Sie nach Möglichkeit das Erstellen von Geheimnissen. Finden Sie Möglichkeiten, die Verantwortung an die Plattform zu delegieren. Verwenden Sie beispielsweise die integrierten verwalteten Identitäten der Plattform, um Anmeldeinformationen zu verarbeiten. Weniger Geheimnisse führen zu einer geringeren Oberfläche und weniger Zeit, die für die Verwaltung von Geheimnissen aufgewendet wird.

Es wird empfohlen, dass Schlüssel über drei unterschiedliche Rollen verfügen: Benutzer, Administrator und Prüfer. Die Rollenunterschiede sorgen dafür, dass nur vertrauenswürdige Identitäten Zugriff auf Geheimnisse mit der entsprechenden Berechtigungsebene haben. Informieren Sie Entwickler, Administratoren und andere relevante Mitarbeiter über die Bedeutung von bewährten Methoden für die Verwaltung von Geheimnissen und Sicherheit.

Vorab freigegebene Schlüssel

Sie können den Zugriff steuern, indem Sie für jeden Consumer separate Schlüssel erstellen. Beispielsweise kommuniziert ein Client mithilfe eines vorab freigegebenen Schlüssels mit einer Drittanbieter-API. Wenn ein anderer Client auf dieselbe API zugreifen muss, muss er einen anderen Schlüssel verwenden. Verwenden Sie keine Schlüssel, auch wenn zwei Consumer über die gleichen Zugriffsmuster oder Rollen verfügen. Consumerbereiche können sich im Laufe der Zeit ändern, und Sie können Berechtigungen nicht unabhängig aktualisieren oder Nutzungsmuster unterscheiden, nachdem ein Schlüssel freigegeben wurde. Der eindeutige Zugriff erleichtert auch die Sperrung. Wenn der Schlüssel eines Consumers kompromittiert wird, ist es einfacher, diesen Schlüssel zu widerrufen oder zu rotieren, ohne dass sich dies auf andere Verbraucher auswirkt.

Diese Anleitung gilt für verschiedene Umgebungen. Derselbe Schlüssel sollte nicht sowohl für Vorproduktions- als auch für Produktionsumgebungen verwendet werden. Wenn Sie für die Erstellung vorab freigegebener Schlüssel verantwortlich sind, stellen Sie sicher, dass Sie mehrere Schlüssel erstellen, um mehrere Clients zu unterstützen.

Weitere Informationen finden Sie unter Empfehlungen für die Identitäts- und Zugriffsverwaltung.

Geheimer Speicher

Verwenden Sie ein Geheimnisverwaltungssystem wie Azure Key Vault, um Geheimnisse in einer gehärteten Umgebung zu speichern, ruhende und während der Übertragung zu verschlüsseln und den Zugriff und Änderungen an Geheimnissen zu überwachen. Wenn Sie Anwendungsgeheimnisse speichern müssen, behalten Sie sie außerhalb des Quellcodes auf, um eine einfache Rotation zu ermöglichen.

Zertifikate sollten nur in Key Vault oder im Zertifikatspeicher des Betriebssystems gespeichert werden. Das Speichern eines X.509-Zertifikats in einer PFX-Datei oder auf einem Datenträger wird beispielsweise nicht empfohlen. Wenn Sie ein höheres Sicherheitsniveau benötigen, wählen Sie Systeme mit HSM-Funktionen (Hardware Security Module) anstelle von softwarebasierten Geheimspeichern aus.

Kompromiss: HSM-Lösungen werden zu höheren Kosten angeboten. Möglicherweise sehen Sie auch auswirkungen auf die Anwendungsleistung aufgrund zusätzlicher Sicherheitsebenen.

Ein dediziertes Geheimnisverwaltungssystem erleichtert das Speichern, Verteilen und Steuern des Zugriffs auf Anwendungsgeheimnisse. Nur autorisierte Identitäten und Dienste sollten Zugriff auf Geheimspeicher haben. Der Zugriff auf das System kann über Berechtigungen eingeschränkt werden. Wenden Sie beim Zuweisen von Berechtigungen immer den Ansatz mit den geringsten Rechten an.

Außerdem müssen Sie den Zugriff auf Geheimebene steuern. Jedes Geheimnis sollte nur Zugriff auf einen einzelnen Ressourcenbereich haben. Erstellen Sie Isolationsgrenzen, sodass eine Komponente nur geheimnisse verwenden kann, die sie benötigt. Wenn eine isolierte Komponente kompromittiert ist, kann sie keine Kontrolle über andere Geheimnisse und möglicherweise die gesamte Workload erlangen. Eine Möglichkeit zum Isolieren von Geheimnissen besteht darin, mehrere Schlüsseltresore zu verwenden. Es fallen keine zusätzlichen Kosten für das Erstellen zusätzlicher Schlüsseltresore an.

Implementieren Sie Die Überwachung und Überwachung für den geheimen Zugriff. Protokollieren Sie, wer auf Geheimnisse zugreift und wann nicht autorisierte oder verdächtige Aktivitäten identifiziert werden sollen. Informationen zur Protokollierung aus Sicherheitssicht finden Sie unter Empfehlungen zur Sicherheitsüberwachung und Bedrohungserkennung.

Rotation für Geheimnisse

Verfügen Sie über einen Prozess, der die geheime Hygiene aufrechterhält. Die Langlebigkeit eines Geheimnisses beeinflusst die Verwaltung dieses Geheimnisses. Um Angriffsvektoren zu reduzieren, sollten Geheimnisse so häufig wie möglich eingestellt und durch neue Geheimnisse ersetzt werden.

Behandeln Sie OAuth-Zugriffstoken sorgfältig unter Berücksichtigung ihrer Lebenszeit. Überlegen Sie, ob das Belichtungsfenster auf einen kürzeren Zeitraum angepasst werden muss. Aktualisierungstoken müssen sicher gespeichert werden, wobei die Anwendung nur eingeschränkt verfügbar ist. Bei erneuerten Zertifikaten sollte auch ein neuer Schlüssel verwendet werden. Informationen zu Aktualisierungstoken finden Sie unter Secure OAuth 2.0 On-Behalf-Of-Aktualisierungstoken.

Ersetzen Sie Geheimnisse, nachdem sie ihr Lebenszyklusende erreicht haben, nicht mehr von der Workload verwendet werden oder wenn sie kompromittiert wurden. Umgekehrt sollten Sie aktive Geheimnisse nicht außer Kraft setzen, es sei denn, es handelt sich um einen Notfall. Sie können die status eines Geheimnisses ermitteln, indem Sie Zugriffsprotokolle anzeigen. Geheimrotationsprozesse sollten sich nicht auf die Zuverlässigkeit oder Leistung der Workload auswirken. Verwenden Sie Strategien, die Redundanz in Geheimnissen, Consumern und Zugriffsmethoden für eine reibungslose Rotation schaffen.

Weitere Informationen zur Verarbeitung der Rotation in Azure Storage finden Sie unter Verwalten von Kontozugriffsschlüsseln.

Rotationsprozesse sollten automatisiert und ohne menschliche Interaktion bereitgestellt werden. Das Speichern von Geheimnissen in einem Geheimverwaltungsspeicher, der nativ Rotationskonzepte unterstützt, kann diese operative Aufgabe vereinfachen.

Sichere Methoden für die Verwendung von Geheimnissen

Als Geheimnisgenerator oder -operator sollten Sie geheimnisse sicher verteilen können. Viele Organisationen verwenden Tools, um Geheimnisse sowohl innerhalb der organization als auch extern an Partner weiterzugeben. Wenn kein Tool vorhanden ist, verwenden Sie einen Prozess zum ordnungsgemäßen Übergeben von Anmeldeinformationen an autorisierte Empfänger. Ihre Notfallwiederherstellungspläne sollten geheime Wiederherstellungsprozeduren enthalten. Verfügen Sie über einen Prozess für Situationen, in denen ein Schlüssel kompromittiert oder geleakt wird und bei Bedarf neu generiert werden muss. Berücksichtigen Sie die folgenden bewährten Methoden für die Sicherheit bei der Verwendung von Geheimnissen:

Verhindern der Hardcodierung

Programmieren Sie Geheimnisse nicht als statischen Text in Codeartefakten wie Anwendungscode, Konfigurationsdateien und Buildbereitstellungspipelines. Diese Methode mit hohem Risiko macht den Code anfällig, da Geheimnisse für alle Benutzer mit Lesezugriff verfügbar gemacht werden.

Sie können diese Situation vermeiden, indem Sie verwaltete Identitäten verwenden, um die Notwendigkeit zu vermeiden, Anmeldeinformationen zu speichern. Ihre Anwendung verwendet die zugewiesene Identität, um sich über den Identitätsanbieter (IdP) bei anderen Ressourcen zu authentifizieren. Testen Sie während der Entwicklung in Nichtproduktionsumgebungen mit gefälschten Geheimnissen, um eine versehentliche Offenlegung echter Geheimnisse zu verhindern.

Verwenden Sie Tools, die in regelmäßigen Abständen offengelegte Geheimnisse in Ihrem Anwendungscode erkennen und Artefakte erstellen. Sie können diese Tools als Git-Precommit-Hooks hinzufügen, die vor der Bereitstellung des Quellcodes nach Anmeldeinformationen suchen. Überprüfen und bereinigen Sie Anwendungsprotokolle regelmäßig, um sicherzustellen, dass keine Geheimnisse versehentlich aufgezeichnet werden. Sie können die Erkennung auch über Peer Reviews verstärken.

Hinweis

Wenn die Überprüfungstools ein Geheimnis entdecken, muss dieses Geheimnis als kompromittiert betrachtet werden. Sie sollte widerrufen werden.

Reagieren auf Geheimnisrotation

Als Workloadbesitzer müssen Sie den Geheimnisrotationsplan und die Richtlinien verstehen, damit Sie neue Geheimnisse mit minimaler Unterbrechung für Benutzer integrieren können. Wenn ein Geheimnis gedreht wird, gibt es möglicherweise ein Fenster, in dem das alte Geheimnis nicht gültig ist, das neue Geheimnis jedoch nicht platziert wurde. Während dieses Fensters bestätigt die Komponente, die die Anwendung erreichen möchte, Anforderungen nicht. Sie können diese Probleme minimieren, indem Sie Wiederholungslogik im Code erstellen. Sie können auch gleichzeitige Zugriffsmuster verwenden, die es Ihnen ermöglichen, über mehrere Anmeldeinformationen zu verfügen, die sicher geändert werden können, ohne sich gegenseitig zu beeinträchtigen.

Arbeiten Sie mit dem Betriebsteam zusammen und werden Sie Teil des Change Management-Prozesses. Sie sollten Besitzer von Anmeldeinformationen darüber informieren, wenn Sie einen Teil der Anwendung außer Betrieb nehmen, der nicht mehr benötigte Anmeldeinformationen verwendet.

Integrieren Sie den Geheimabruf und die Konfiguration in Ihre automatisierte Bereitstellungspipeline. Das Abrufen von Geheimnissen hilft, sicherzustellen, dass Geheimnisse während der Bereitstellung automatisch abgerufen werden. Sie können auch geheime Einschleusmuster verwenden, um Geheimnisse zur Laufzeit in Den Anwendungscode oder die Konfiguration einzufügen, wodurch verhindert wird, dass Geheimnisse versehentlich für Protokolle oder die Versionskontrolle verfügbar gemacht werden.

Azure-Erleichterung

Speichern Sie Geheimnisse mithilfe von Key Vault. Speichern Sie Geheimnisse im Azure-Geheimnisverwaltungssystem, Key Vault, Azure Managed HSM und an anderen Standorten. Weitere Informationen finden Sie unter Auswählen der richtigen Schlüsselverwaltungslösung.

Integrieren Sie die identitätsbasierte Zugriffssteuerung. Microsoft Entra ID und verwaltete Identitäten minimieren die Notwendigkeit von Geheimnissen. Microsoft Entra ID bietet eine hochsichere und nutzbare Benutzeroberfläche für die Zugriffssteuerung mit integrierten Mechanismen für die Behandlung der Schlüsselrotation, für Anomalien und vieles mehr.

Verwenden Sie die rollenbasierte Zugriffssteuerung (Role-Based Access Control, RBAC) von Azure, um Benutzern, Gruppen und Anwendungen Berechtigungen in einem bestimmten Bereich zuzuweisen.

Verwenden Sie ein Zugriffsmodell, um Schlüsseltresore, Berechtigungen und Geheimnisse zu steuern. Weitere Informationen finden Sie in der Übersicht über Zugriffsmodelle.

Implementieren Sie die Erkennung von Geheimnisbelichtungen. Integrieren Sie Prozesse in Ihre Workload, die verdächtige Aktivitäten erkennen und regelmäßig nach verfügbar gemachten Schlüsseln im Anwendungscode suchen. Beispiele für Optionen sind:

Speichern Sie keine Schlüssel und Geheimnisse für einen Umgebungstyp in Anwendungskonfigurationsdateien oder CI/CD-Pipelines (Continuous Integration and Continuous Delivery). Entwickler sollten verbundene Visual Studio-Dienste oder nur lokale Dateien verwenden, um auf Anmeldeinformationen zuzugreifen.

Checkliste für die Sicherheit

Weitere Informationen finden Sie im vollständigen Satz von Empfehlungen.