Sicherer Zugriff auf Daten in Azure Cosmos DB

GILT FÜR: NoSQL

Dieser Artikel bietet eine Übersicht über die Datenzugriffssteuerung in Azure Cosmos DB.

Azure Cosmos DB bietet drei Möglichkeiten, den Zugriff auf Ihre Daten zu steuern.

Zugriffssteuerungstyp Merkmale
Primäre/sekundäre Schlüssel Gemeinsamer geheimer Schlüssel, der jeden Verwaltungs- oder Datenvorgang zulässt. Dieser ist sowohl als Variante für Lese-/Schreibvorgänge als auch schreibgeschützte Variante verfügbar.
Rollenbasierte Zugriffssteuerung (Role-Based Access Control, RBAC) Differenziertes, rollenbasiertes Berechtigungsmodell, bei dem Microsoft Entra-Identitäten für die Authentifizierung verwendet werden.
Ressourcentoken Differenziertes Berechtigungsmodell, das auf nativen Azure Cosmos DB-Benutzern und -Berechtigungen basiert.

Primäre/sekundäre Schlüssel

Primäre/sekundäre Schlüssel ermöglichen den Zugriff auf alle Verwaltungsressourcen für das Datenbankkonto. Jedes Konto umfasst zwei Schlüssel: einen primären und einen sekundären Schlüssel. Dank der Verwendung von zwei Schlüsseln können Sie Schlüssel neu generieren oder ersetzen und trotzdem ohne Unterbrechung auf Ihr Konto und Ihre Daten zugreifen. Weitere Informationen zu primären/sekundären Schlüsseln finden Sie in der Übersicht über Datenbanksicherheit in Azure Cosmos DB.

Wählen Sie zum Anzeigen Ihrer Kontoschlüssel im linken Menü die Option Schlüssel aus. Wählen Sie dann rechts neben dem jeweiligen Schlüssel das Symbol Anzeigen aus. Wählen Sie die Schaltfläche Kopieren aus, um den ausgewählten Schlüssel zu kopieren. Sie können ihn anschließend wieder ausblenden, indem Sie für den jeweiligen Schlüssel das gleiche Symbol auswählen, das dann zur Schaltfläche Ausblenden wird.

Screenshot of the View account key for Azure Cosmos DB.

Schlüsselrotation und Neugenerierung

Hinweis

Im folgenden Abschnitt werden die Schritte zum Rotieren und erneuten Generieren von Schlüsseln für die API für NoSQL beschrieben. Wenn Sie eine andere API verwenden, finden Sie weitere Informationen in den Abschnitten zur API für MongoDB, API für Cassandra, API für Gremlin und API für Table.

Informationen zur Überwachung Ihres Kontos auf die Aktualisierung und Neugenerierung von Schlüsseln finden Sie unter Überwachen Ihres Azure Cosmos DB-Kontos auf Updates und Erneuerungen von Schlüsseln.

Der Prozess der Schlüsselrotation und -neugenerierung ist einfach. Stellen Sie zunächst sicher, dass Ihre Anwendung konsistent entweder den Primärschlüssel oder den Sekundärschlüssel verwendet, um auf Ihr Azure Cosmos DB-Konto zuzugreifen. Führen Sie anschließend die Schritte aus dem nächsten Abschnitt aus.

  1. Navigieren Sie im Azure-Portal zu Ihrem Azure Cosmos DB-Konto.

  2. Wählen Sie im linken Menü die Option Schlüssel und anschließend über die Auslassungspunkte rechts neben Ihrem Sekundärschlüssel die Option Sekundärschlüssel neu generieren aus.

    Screenshot that shows the Azure portal showing how to regenerate the secondary key.

  3. Überprüfen Sie, ob der neue Sekundärschlüssel konsistent mit Ihrem Azure Cosmos DB-Konto funktioniert. Der Vorgang der Schlüsselregenerierung kann je nach Größe des Azure Cosmos DB-Kontos unterschiedlich lange dauern – von einer Minute bis hin zu mehreren Stunden.

  4. Ersetzen Sie den Primärschlüssel in Ihrer Anwendung durch den Sekundärschlüssel.

  5. Wechseln Sie zurück zum Azure-Portal und lösen Sie die Neugenerierung des Primärschlüssels aus.

    Screenshot that shows the Azure portal showing how to regenerate the primary key.

Codebeispiel für die Verwendung eines Primärschlüssels

Das folgende Codebeispiel veranschaulicht, wie mit einem Azure Cosmos DB-Kontoendpunkt und dem Primärschlüssel ein Cosmos-Client (CosmosClient) instanziiert wird:

// Read the Azure Cosmos DB endpointUrl and authorization keys from config.
// These values are available from the Azure portal on the Azure Cosmos DB account blade under "Keys".
// Keep these values in a safe and secure location. Together they provide Administrative access to your Azure Cosmos DB account.

private static readonly string endpointUrl = ConfigurationManager.AppSettings["EndPointUrl"];
private static readonly string authorizationKey = ConfigurationManager.AppSettings["AuthorizationKey"];

CosmosClient client = new CosmosClient(endpointUrl, authorizationKey);

Rollenbasierte Zugriffssteuerung

Azure Cosmos DB bietet ein integriertes RBAC-System, das Folgendes ermöglicht:

  • Authentifizieren Sie Ihre Datenanforderungen mit einer Microsoft Entra-Identität.
  • Autorisieren Ihrer Datenanforderungen mit einem differenzierten, rollenbasierten Berechtigungsmodell

Azure Cosmos DB-RBAC ist die ideale Zugriffssteuerungsmethode in folgenden Situationen:

  • Sie möchten keinen gemeinsamen geheimen Schlüssel wie den Primärschlüssel verwenden und bevorzugen einen tokenbasierten Authentifizierungsmechanismus.
  • Sie möchten Microsoft Entra-Identitäten zum Authentifizieren Ihrer Anforderungen verwenden.
  • Sie benötigen ein differenziertes Berechtigungsmodell, um strikt einzuschränken, welche Datenbankvorgänge Ihre Identitäten ausführen dürfen.
  • Sie möchten Ihre Zugriffssteuerungsrichtlinien in Form von Rollen umsetzen, die Sie mehreren Identitäten zuweisen können.

Weitere Informationen zur rollenbasierten Zugriffssteuerung von Azure Cosmos DB finden Sie unter Konfigurieren der rollenbasierten Zugriffssteuerung mit Microsoft Entra ID für Ihr Azure Cosmos DB-Konto.

Informationen und Beispielcode zum Konfigurieren von RBAC für Azure Cosmos DB for MongoDB finden Sie unter Konfigurieren von rollenbasierter Zugriffssteuerung für Azure Cosmos DB for MongoDB.

Ressourcentoken

Ressourcentoken ermöglichen den Zugriff auf die Anwendungsressourcen in einer Datenbank. Ressourcentoken:

  • Ermöglichen den Zugriff auf bestimmte Container, Partitionsschlüssel, Dokumente und Anlagen.
  • Werden erstellt, wenn einem BenutzerBerechtigungen für eine bestimmte Ressource gewährt werden.
  • Werden neu erstellt, wenn durch einen POST-, GET- oder PUT-Aufruf eine Aktion für eine Berechtigungsressource ausgeführt wird.
  • Verwenden ein Hashressourcentoken, das speziell für den Benutzer, die Ressource und die Berechtigung erstellt wird.
  • Verfügen über einen anpassbaren Gültigkeitszeitraum. Die Gültigkeitsdauer beträgt standardmäßig eine Stunde. Die Tokengültigkeitsdauer kann aber explizit auf bis zu 24 Stunden festgelegt werden.
  • Stellen eine sichere Alternative zur Weitergabe des Primärschlüssels dar.
  • Ermöglichen Clients das Lesen, Schreiben und Löschen von Ressourcen im Azure Cosmos DB-Konto gemäß den gewährten Berechtigungen.

Mit einem Ressourcentoken können Sie (durch Erstellung von Azure Cosmos DB-Benutzer*innen und -Berechtigungen) einem Client, dem Sie den Primärschlüssel nicht anvertrauen können, Zugriff auf Ressourcen in Ihrem Azure Cosmos DB-Konto gewähren.

Azure Cosmos DB-Ressourcentoken stellen eine sichere Alternative dar, um Clients das Lesen, Schreiben und Löschen von Ressourcen in einem Azure Cosmos DB-Konto gemäß den gewährten Berechtigungen und ohne Primärschlüssel oder schreibgeschützten Schlüssel zu ermöglichen.

Hier sehen Sie einen typischen Entwurf, bei dem Ressourcentoken angefordert, generiert und an Clients übermittelt werden können:

  1. Ein Mid-Tier-Dienst dient zum Freigeben von Benutzerfotos für eine mobile Anwendung.

  2. Der Mid-Tier-Dienst verfügt über den Primärschlüssel des Azure Cosmos DB-Kontos.

  3. Die Foto-App ist auf mobilen Benutzergeräten installiert.

  4. Bei der Anmeldung weist die Foto-App die Benutzeridentität gegenüber dem Mid-Tier-Dienst nach. Dieser Mechanismus der Identitätseinrichtung hängt nur von der Anwendung ab.

  5. Nach dem Identitätsnachweis fordert der Mid-Tier-Dienst Berechtigungen auf der Grundlage der Identität an.

  6. Der Mid-Tier-Dienst sendet einen Ressourcentoken an die Phoneapp zurück.

  7. Die Phoneapp kann weiterhin den Ressourcentoken für direkten Zugriff auf Azure Cosmos DB-Ressourcen mit den Berechtigungen verwenden, die durch das Ressourcentoken für einen bestimmten Zeitraum definiert sind.

  8. Wenn das Ressourcentoken abläuft, tritt bei anschließenden Anforderungen die Ausnahme 401 (nicht autorisierter Zugriff) auf. An diesem Punkt weist die Telefon-App die Identität erneut nach und fordert ein neues Ressourcentoken an.

    Screenshot that shows an Azure Cosmos DB resource tokens workflow.

Die Ressourcentokengenerierung und -verwaltung wird von den nativen Azure Cosmos DB-Clientbibliotheken behandelt. Bei Verwendung von REST müssen Sie dagegen die Anforderungs-/Authentifizierungsheader erstellen. Weitere Informationen zum Erstellen von Authentifizierungsheadern für REST finden Sie unter Zugriffssteuerung in der SQL-API von Azure Cosmos DB oder im Quellcode für unser .NET SDK oder Node.js SDK.

Ein Beispiel für einen Mid-Tier-Dienst zum Generieren oder Vermitteln von Ressourcentoken finden Sie unter der ResourceTokenBroker-App.

Benutzer

Azure Cosmos DB-Benutzer werden einer Azure Cosmos DB-Datenbank zugeordnet. Jede Datenbank kann null oder mehr Azure Cosmos DB-Benutzer enthalten. Das folgende Codebeispiel veranschaulicht das Erstellen von Azure Cosmos DB-Benutzer*innen mit dem Azure Cosmos DB .NET SDK v3.

// Create a user.
Database database = client.GetDatabase("SalesDatabase");
User user = await database.CreateUserAsync("User 1");

Hinweis

Azure Cosmos DB-Benutzer*innen verfügen jeweils über eine ReadAsync()-Methode, mit deren Hilfe die Liste mit den Berechtigungen abgerufen werden kann, die dem jeweiligen Benutzer bzw. der jeweiligen Benutzerin zugeordnet sind.

Berechtigungen

Eine Berechtigungsressource ist einem Benutzer zugeordnet und einer bestimmten Ressource zugewiesen. Benutzer*innen können jeweils über null oder mehr Berechtigungen verfügen. Eine Berechtigungsressource ermöglicht den Zugriff auf ein Sicherheitstoken, das der Benutzer beim Zugriff auf einen bestimmten Container oder bestimmte Daten in einem speziellen Partitionsschlüssel benötigt. Über eine Berechtigungsressource können zwei Zugriffsebenen bereitgestellt werden:

  • Alle: Der Benutzer bzw. die Benutzerin verfügt über Vollzugriff auf die Ressource.
  • Lesen: Der Benutzer bzw. die Benutzerin kann die Inhalte der Ressource nur lesen und keine Schreib-, Aktualisierungs- oder Löschvorgänge für die Ressource ausführen.

Hinweis

Zum Ausführen von gespeicherten Prozeduren müssen Benutzer*innen für den Container, in dem die gespeicherte Prozedur ausgeführt wird, über die Berechtigung Alle verfügen.

Wenn Sie die Diagnoseprotokolle für Anforderungen auf Datenebene aktivieren, werden die beiden folgenden Eigenschaften entsprechend der Berechtigung protokolliert:

  • resourceTokenPermissionId: Diese Eigenschaft gibt die von Ihnen angegebene Ressourcentokenberechtigungs-ID an.

  • resourceTokenPermissionMode: Diese Eigenschaft gibt den Berechtigungsmodus an, den Sie beim Erstellen des Ressourcentokens festgelegt haben. Der Berechtigungsmodus kann Werte wie Alle oder Lesen haben.

Codebeispiel für die Berechtigungserstellung

Das folgende Codebeispiel veranschaulicht das Erstellen einer Berechtigungsressource, das Lesen des Ressourcentokens der Berechtigungsressource sowie das Zuordnen der Berechtigungen zum soeben erstellten Benutzer bzw. zur soeben erstellten Benutzerin.

// Create a permission on a container and specific partition key value
Container container = client.GetContainer("SalesDatabase", "OrdersContainer");
await user.CreatePermissionAsync(
    new PermissionProperties(
        id: "permissionUser1Orders", 
        permissionMode: PermissionMode.All, 
        container: container,
        resourcePartitionKey: new PartitionKey("012345")));

Codebeispiel für das Lesen von Berechtigungen für einen Benutzer

Der folgende Codeschnipsel zeigt, wie Sie die Berechtigung abrufen, die Sie dem erstellten Benutzer bzw. der erstellten Benutzerin zugeordnet haben, und für den Benutzer bzw. für die Benutzerin einen neuen Cosmos-Client (CosmosClient) mit Ausrichtung auf einen einzelnen Partitionsschlüssel instanziieren.

// Read a permission, create user client session.
Permission permission = await user.GetPermission("permissionUser1Orders").ReadAsync();

CosmosClient client = new CosmosClient(accountEndpoint: "MyEndpoint", authKeyOrResourceToken: permission.Resource.Token);

Unterschiede zwischen RBAC und Ressourcentoken

Subject RBAC Ressourcentoken
Authentifizierung Mit Microsoft Entra ID. Basieren auf nativen Azure Cosmos DB-Benutzer*innen.
Die Integration von Ressourcentoken in Microsoft Entra ID erfordert zusätzliche Arbeit, um Microsoft Entra-Identitäten und Azure Cosmos DB-Benutzer*innen zu verbinden.
Autorisierung Rollenbasiert: Rollendefinitionen ordnen zulässige Aktionen zu und können mehreren Identitäten zugewiesen werden. Berechtigungsbasiert: Für die Azure Cosmos DB-Benutzer*innen müssen jeweils Datenzugriffsberechtigungen zugewiesen werden.
Tokenbereich Ein Microsoft Entra-Token trägt die Identität des Anforderers. Diese Identität wird mit allen zugewiesenen Rollendefinitionen abgeglichen, um die Autorisierung durchzuführen. Ein Ressourcentoken trägt die Berechtigung, die einem bestimmten Azure Cosmos DB-Benutzer für eine bestimmte Azure Cosmos DB-Ressource erteilt wurde. Autorisierungsanforderungen für unterschiedliche Ressourcen können unterschiedliche Token erfordern.
Tokenaktualisierung Das Microsoft Entra-Token wird bei Ablauf automatisch von den Azure Cosmos DB-SDKs aktualisiert. Das Aktualisieren von Ressourcentoken wird nicht unterstützt. Wenn ein Ressourcentoken abläuft, muss ein neues ausgegeben werden.

Hinzufügen von Benutzern und Zuweisen von Rollen

Um Ihrem Benutzerkonto Azure Cosmos DB-Kontoleserzugriff hinzuzufügen, lassen Sie den Besitzer eines Abonnements die folgenden Schritte im Azure-Portal ausführen.

  1. Öffnen Sie das Azure-Portal, und wählen Sie Ihr Azure Cosmos DB-Konto aus.

  2. Wählen Sie die Option Zugriffssteuerung (IAM) aus.

  3. Wählen Sie Hinzufügen>Rollenzuweisung hinzufügen aus, um die Seite Rollenzuweisung hinzufügen zu öffnen.

  4. Weisen Sie die folgende Rolle zu. Ausführliche Informationen finden Sie unter Zuweisen von Azure-Rollen über das Azure-Portal.

    Einstellung Wert
    Rolle Cosmos DB-Kontoleser
    Zugriff zuweisen zu Benutzer, Gruppe oder Dienstprinzipal.
    Member Der Benutzer/die Benutzerin, die Gruppe oder die Anwendung in Ihrem Verzeichnis, dem bzw. der Sie Zugriff gewähren möchten

    Screenshot that shows the Add role assignment page in the Azure portal.

Die Entität kann jetzt Azure Cosmos DB-Ressourcen lesen.

Löschen oder Exportieren von Benutzerdaten

Mithilfe des Azure Cosmos DB-Datenbankdiensts können Sie alle Daten, die sich in einer Datenbank oder in Containern befinden, durchsuchen, auswählen, ändern und löschen. Es liegt in Ihrer Verantwortung, mithilfe der bereitgestellten APIs die Logik zu definieren, die erforderlich ist, um personenbezogene Daten zu finden und ggf. zu löschen.

Jede API für mehrere Modelle (SQL, MongoDB, Gremlin, Cassandra oder Tabelle) stellt SDKs für verschiedene Sprachen bereit, die Methoden zum Durchsuchen und Löschen von Daten basierend auf benutzerdefinierten Prädikaten bieten. Sie können auch das TTL-Feature (Time To Live, Gültigkeitsdauer) aktivieren, um Daten nach einem festgelegten Zeitraum automatisch zu löschen, damit keine weiteren Kosten anfallen.

Hinweis

Informationen über Anzeigen oder Löschen von personenbezogenen Daten finden Sie unter Anträge betroffener Personen für Azure im Rahmen der DSGVO. Weitere Informationen zur DSGVO finden Sie im Abschnitt zur DSGVO im Microsoft Trust Center und im Abschnitt zur DSGVO im Service Trust Portal.

Nächste Schritte