Bezpieczny dostęp do danych w usłudze Azure Cosmos DB

DOTYCZY: SQL API

Ten artykuł zawiera omówienie kontroli dostępu do danych w usłudze Azure Cosmos DB.

Baza danych usługi Azure Cosmos zapewnia trzy sposoby kontrolowania dostępu do danych.

Typ kontrolki programu Access Cechy
Klucze podstawowe/pomocnicze Tajna współużytkowania umożliwiająca zarządzanie lub operację danych. Są to warianty zarówno do odczytu, jak i tylko do odczytu.
Kontrola dostępu oparta na rolach Model uprawnień oparty na rolach oparty na rolach z zastosowaniem tożsamości Azure Active Directory (AAD) na AAD uwierzytelniania.
Tokeny zasobów Model uprawnień precyzyjnie oparty na natywnym modelu uprawnień usługi Azure Cosmos użytkowników i uprawnień bazy danych.

Klucze podstawowe/pomocnicze

Klucze podstawowe/pomocnicze zapewniają dostęp do wszystkich zasobów administracyjnych konta bazy danych. Każde konto składa się z dwóch kluczy: klucza podstawowego i klucza pomocniczego. Celem dwóch kluczy jest zapewnienie ciągłego dostępu do konta i danych. Aby dowiedzieć się więcej o kluczach podstawowych/pomocniczych, zobacz artykuł Zabezpieczenia bazy danych.

Obrót klucza i schowek

Uwaga

W poniższej sekcji opisano kroki obracania i ponownego generowania kluczy dla SQL API. Jeśli używasz innego interfejsu API, zobacz sekcje Interfejs API bazy danych Azure Cosmos dla bazy danych Mongo DB,interfejs API Cassandra,Gremlin APIlub Interfejs API tabeli.

Aby monitorować konto pod względu na kluczowe aktualizacje i kluczowe czynniki, zobacz artykuł Monitorowanie kluczowych aktualizacji za pomocą metryk i alertów.

Proces obracania i przetwarzania klucza jest prosty. Najpierw upewnij się, że aplikacja używa spójnego klucza podstawowego lub pomocniczego w celu uzyskania dostępu do konta usługi Azure Cosmos DB. Następnie wykonaj czynności opisane poniżej.

  1. Przejdź do konta usługi Azure Cosmos DB w portalu Azure Portal.

  2. Wybierz pozycję Klucze z menu po lewej stronie, a następnie wybierz pozycję Generuj ponownie klucz pomocniczy z wielokropka po prawej stronie klucza pomocniczego.

    Zrzut ekranu przedstawiający portal Azure Portal pokazujący, jak ponownie wygenerować klucz pomocniczy

  3. Sprawdź, czy nowy klucz pomocniczy działa spójnie w stosunku do konta usługi Azure Cosmos DB. Schowania kluczy mogą trwać od jednej minuty do kilku godzin w zależności od rozmiaru Cosmos db.

  4. Zastąp klucz podstawowy kluczem pomocniczym w aplikacji.

  5. Wróć do portalu Azure Portal i wyzwolij uruchomienie kopii klucza podstawowego.

    Zrzut ekranu przedstawiający portal Azure Portal pokazujący, jak ponownie wygenerować klucz podstawowy

Przykładowy kod do użycia klucza podstawowego

Poniższy przykładowy kod ilustruje sposób używania punktu końcowego Cosmos konta bazy danych i klucza podstawowego do wystąpienia DostawcyClienta:

// 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);

Kontrola dostępu oparta na rolach

Baza Cosmos Azure udostępnia wbudowany system kontroli dostępu oparty na rolach (RBAC, role based access control), który umożliwia:

  • Uwierzytelniaj żądania danych przy użyciu Azure Active Directory danych (AAD).
  • Autoryzuj żądania danych za pomocą modelu uprawnień opartych na rolach.

Usługa Azure Cosmos DB RBAC to idealna metoda kontroli dostępu w sytuacjach, w których:

  • Nie chcesz używać współużytkowania klucza tajnego, takiego jak klucz podstawowy, i wolisz polegać na mechanizmie uwierzytelniania opartego na tokenie.
  • Chcesz uwierzytelnić żądania za pomocą tożsamości usługi Azure AD.
  • Aby ściśle ograniczyć operacje bazy danych, które mogą wykonywać tożsamości w Twojej bazie danych, potrzebujesz modelu uprawnień bardziej precyzyjnego.
  • Chcesz z materializować zasady kontroli dostępu jako "role", które możesz przypisywać do wielu tożsamości.

Zobacz Konfigurowanie kontroli dostępu opartej na rolach dla konta bazy danych usługi Azure Cosmos, aby dowiedzieć się więcej o usłudze Azure Cosmos DB RBAC.

Tokeny zasobów

Tokeny zasobów zapewniają dostęp do zasobów aplikacji w bazie danych. Tokeny zasobów:

  • Zapewnij dostęp do określonych kontenerów, kluczy partycji, dokumentów, załączników, procedur składowanych, wyzwalaczy i plików UDF.
  • Są tworzone w przypadku, gdy użytkownikowi zostaną udzielone uprawnienia do określonego zasobu.
  • Są ponownie tworzone, gdy zasób uprawnień zostanie utworzony na podstawie połączenia POST, GET lub PUT.
  • Użyj tokenu zasobu z hasztagiem skonstruowanego specjalnie dla użytkownika, zasobu i uprawnienia.
  • Są powiązane z okresem ważności, który można dostosowywać. Domyślny prawidłowy zakres czasu to jedna godzina. Można jednak jawnie określić okres istnienia tokenu (maksymalnie pięć godzin).
  • Udostępnij bezpieczną alternatywę dla podania klucza podstawowego.
  • Umożliwia klientom odczytywanie, pisanie i usuwanie zasobów na koncie bazy Cosmos db zgodnie z przyznanymi przez nich uprawnieniami.

Tokenu zasobu można użyć (tworząc użytkowników i uprawnienia bazy danych programu Cosmos) w celu zapewnienia dostępu do zasobów na koncie bazy danych usługi Cosmos klientowi, którego nie można ufać kluczowi podstawoweowi.

Cosmos tokenów zasobów bazy danych stanowią bezpieczną alternatywę umożliwiającą klientom odczytywanie, pisanie i usuwanie zasobów na koncie bazy danych usługi Cosmos zgodnie z przyznanymi przez Ciebie uprawnieniami i bez konieczności użycia klucza podstawowego lub tylko do odczytu.

Oto typowy wzorzec projektu, w którym można żądać, generować i dostarczać tokeny zasobów do klientów:

  1. Usługa klasy średniej jest tak ustawiona, że do udostępniania zdjęć użytkowników służy aplikacja mobilna.

  2. Usługa średniej warstwy posiada klucz podstawowy konta bazy danych usługi Cosmos db.

  3. Aplikacja do obsługi zdjęć jest instalowana na urządzeniach przenośnych użytkowników końcowych.

  4. Podczas logowania aplikacja do obsługi zdjęć ustala tożsamość użytkownika, który korzysta z usługi dla średnich poziomów. Ten mechanizm tożsamości jest tylko tylko aplikacją.

  5. Po na poziomie tożsamości usługa środkowa żąda uprawnień na podstawie tożsamości.

  6. Usługa średniej warstwy wysyła token zasobu z powrotem do aplikacji telefonicznej.

  7. Aplikacja telefoniczna może nadal używać tokenu zasobu w celu bezpośredniego dostępu do Cosmos zasobów DB przy użyciu uprawnień zdefiniowanych przez token zasobu i dla interwału dozwolonego przez token zasobu.

  8. Gdy token zasobu wygasa, kolejne żądania otrzymują 401 nieautoryzowany wyjątek. W tym momencie aplikacja telefoniczna ponownie ustanawia tożsamość i żąda nowego tokenu zasobu.

    Przepływ pracy Cosmos tokenów zasobów usługi Azure Cosmos DB

Generowanie tokenu zasobu i zarządzanie nim są obsługiwane przez natywne biblioteki Cosmos klienckie bazy danych. Jeśli jednak używasz protokołu REST, musisz skonstruować nagłówki żądania/uwierzytelniania. Aby uzyskać więcej informacji na temat tworzenia nagłówków uwierzytelniania dla protokołu REST, zobacz Kontrola dostępu w zasobach bazy danych programu Cosmos lub kod źródłowy zestawu SDK programu .NET lub zestawuNode.js SDK.

Aby uzyskać przykład usługi warstwy środkowej używanej do generowania tokenów zasobów tokenów tokenów brokera, zobacz aplikację ResourceTokenBroker.

Użytkownicy

Użytkownicy Cosmos bazy danych Azure Cosmos db. Każda baza danych może zawierać zero lub więcej Cosmos użytkowników bazy danych. W poniższym przykładowym kodzie pokazano, jak utworzyć Cosmos bazy danych przy użyciu zestawu SDK azure Cosmos DB .NET SDK w wersji 3.

//Create a user.
Database database = benchmark.client.GetDatabase("SalesDatabase");

User user = await database.CreateUserAsync("User 1");

Uwaga

Każdy Cosmos bazy danych korzysta z metody ReadAsync(), za pomocą którego można pobrać listę uprawnień skojarzonych z tym użytkownikiem.

Uprawnienia

Zasób uprawnień jest skojarzony z użytkownikiem i przydzielony do określonego zasobu. Każdy użytkownik może mieć co najmniej zero uprawnień. Zasób uprawnień zapewnia dostęp do tokenu zabezpieczającego potrzebnego użytkownikowi podczas próby uzyskania dostępu do określonego kontenera lub danych na określonym kluczu partycji. Istnieją dwa dostępne poziomy dostępu, które może zapewniać zasób uprawnień:

  • Wszystkie: Użytkownik ma pełne uprawnienia do zasobu.
  • Odczyt: Użytkownik może jedynie odczytywać zawartość zasobu, ale nie może wykonywać operacji zapisu, aktualizowania ani usuwania zasobu.

Uwaga

Aby można było uruchamiać procedury składowane, użytkownik musi mieć uprawnienie Wszystkie do kontenera, w którym zostanie uruchamiana procedura składowana.

Jeśli włączysz dzienniki diagnostyczne żądań samolotudanych, rejestrowane są dwie następujące właściwości odpowiadające uprawnienia:

  • resourceTokenPermissionId — ta właściwość wskazuje identyfikator uprawnień tokenu zasobu określony przez użytkownika.

  • resourceTokenPermissionMode — ta właściwość wskazuje tryb uprawnień ustawiony podczas tworzenia tokenu zasobu. Tryb uprawnień może mieć wartości takie jak "all" lub "read".

Przykład kodu w celu utworzenia uprawnienia

W poniższym przykładzie kodu pokazano, jak utworzyć zasób uprawnień, odczytać token zasobu uprawnień i skojarzyć uprawnienia z użytkownikiem utworzonym powyżej.

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

Przykładowy kod do odczytania uprawnienia użytkownika

W poniższym fragmencie kodu pokazano, jak pobrać uprawnienie skojarzone z użytkownikiem utworzonym powyżej i utworzyć w imieniu użytkownika nowe źródło Htmlient z zakresem jednego klucza partycji.

//Read a permission, create user client session.
PermissionProperties permissionProperties = await user.GetPermission("permissionUser1Orders")

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

Różnice między tokenami RBAC i zasobów

Temat RBAC Tokeny zasobów
Uwierzytelnianie Za Azure Active Directory (Azure AD). Oparte na natywnych użytkownikach usługi Azure Cosmos DB
Integracja tokenów zasobów z usługą Azure AD wymaga dodatkowej pracy przy mostkowania tożsamości usługi Azure AD i użytkowników usługi Azure Cosmos DB.
Autoryzacja Na podstawie ról: definicje ról mapują dozwolone akcje i można je przypisywać do wielu tożsamości. Oparte na uprawnieniach: dla każdego użytkownika bazy danych Cosmos Azure musisz przypisać uprawnienia dostępu do danych.
Zakres tokenu Token AAD przechowywuje tożsamość żądacego. Ta tożsamość jest do dopasowana do wszystkich przypisanych definicji ról w celu wykonania autoryzacji. Token zasobu przenosi uprawnienia przyznane określoneowi użytkownikowi bazy danych usługi Azure Cosmos dla określonego zasobu bazy danych usługi Azure Cosmos DB. Żądania autoryzacji w różnych zasobach mogą wymagać innych tokenów.
Odświeżanie tokenu Token AAD jest automatycznie odświeżany przez narzędzie Azure Cosmos DB SDKs po jego wygaśnięciu. Odświeżanie tokenu zasobu nie jest obsługiwane. Gdy token zasobu wygasa, trzeba wystawić nowy.

Dodawanie użytkowników i przypisywanie ról

Aby dodać dostęp czytnika kont usługi Azure Cosmos DB do swojego konta użytkownika, właściciel subskrypcji powinien wykonać następujące czynności w portalu Azure Portal.

  1. Otwórz Portal Azure i wybierz swoje konto usługi Azure Cosmos DB.
  2. Kliknij kartę Kontrola dostępu (IAM), a następnie kliknij pozycję + Dodaj przypisanie roli.
  3. W okienku Dodawanie przypisań ról w polu Rola wybierz pozycję Cosmos roli czytnika kont bazy danych.
  4. W polu Przypisz dostęp do wybierzpozycję Użytkownik, grupa lub aplikacjausługi Azure AD.
  5. W katalogu wybierz użytkownika, grupę lub aplikację, której chcesz udzielić dostępu. Możesz przeszukiwać katalog według nazwy wyświetlanej, adresu e-mail lub identyfikatorów obiektów. Wybrany użytkownik, grupa lub aplikacja zostanie wyświetlona na liście wybranych członków.
  6. Kliknij przycisk Zapisz.

Jednostka może teraz odczytywać zasoby bazy Cosmos Azure.

Usuwanie lub eksportowanie danych użytkownika

Jako usługa bazy danych usługa Azure Cosmos DB umożliwia przeszukiwanie, zaznaczanie, modyfikowanie i usuwanie dowolnych danych znajdujących się w bazie danych lub kontenerach. Jednak na Twoim obowiązkówu jest używanie podanych interfejsów API i definiowanie logiki wymaganej do znalezienia i wymazania wszelkich danych osobistych, jeśli będzie to konieczne. Każdy wielowymiarowy interfejs API (SQL, MongoDB, Gremlin, Cassandra, Table) udostępnia różne zestawy SDK języka zawierające metody wyszukiwania i usuwania danych na podstawie odpowiedzialności niestandardowej. Możesz również włączyć funkcję czasu wygaśnięcia (TTL) w celu automatycznego usuwania danych po określonym okresie bez ponoszenia dodatkowych kosztów.

Uwaga

Aby uzyskać informacje na temat wyświetlania lub usuwania danych osobowych, zobacz Azure Data Subject Requests for the GDPR (Wnioski osób, których dane dotyczą w usłudze Azure Data Requests for the GDPR). Aby uzyskać więcej informacji na temat RODO, zobacz sekcję RODO w Centrum zaufania firmy Microsoft i sekcji RODO Portalu zaufania usług.

Następne kroki

  • Aby dowiedzieć się więcej o zabezpieczeniach Cosmos baz danych, zobacz Zabezpieczenia Cosmos bazy danych DB.
  • Aby dowiedzieć się, jak konstruować tokeny autoryzacji bazy danych Cosmos Azure, zobacz Kontrola dostępu w usłudze Azure Cosmos zasobów bazy danych.
  • Przykłady zarządzania użytkownikami z użytkownikami i uprawnieniami, przykłady zarządzania użytkownikami przy użyciu zestawu .NET SDK w wersji 3