Zabezpieczanie dostępu do danych w usłudze Azure Cosmos DB

DOTYCZY: NoSQL

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

Usługa Azure Cosmos DB oferuje trzy sposoby kontrolowania dostępu do danych.

Typ kontroli dostępu Charakterystyki
Klucze podstawowe/pomocnicze Wspólny wpis tajny zezwalający na dowolne operacje zarządzania lub danych. Jest dostępny zarówno w wariantach odczytu i zapisu, jak i tylko do odczytu.
Kontrola dostępu oparta na rolach (RBAC) Szczegółowe, oparte na rolach model uprawnień przy użyciu tożsamości firmy Microsoft entra na potrzeby uwierzytelniania.
Tokeny zasobów Precyzyjny model uprawnień oparty na natywnych użytkownikach i uprawnieniach usługi Azure Cosmos DB.

Klucze podstawowe/pomocnicze

Klucze podstawowe/pomocnicze zapewniają dostęp do wszystkich zasobów administracyjnych dla konta bazy danych. Każde konto składa się z dwóch kluczy: klucza podstawowego i klucza pomocniczego. Celem dwóch kluczy jest ponowne wygenerowanie lub wycofanie kluczy, zapewniając ciągły dostęp do konta i danych. Aby dowiedzieć się więcej na temat kluczy podstawowych/pomocniczych, zobacz Omówienie zabezpieczeń bazy danych w usłudze Azure Cosmos DB.

Aby wyświetlić klucze konta, w menu po lewej stronie wybierz pozycję Klucze. Następnie wybierz ikonę Widok po prawej stronie każdego klucza. Wybierz przycisk Kopiuj, aby skopiować wybrany klucz. Następnie możesz je ukryć, wybierając tę samą ikonę na klucz, która aktualizuje ikonę do przycisku Ukryj .

Screenshot of the View account key for Azure Cosmos DB.

Rotacja i regenerowanie kluczy

Uwaga

W poniższej sekcji opisano kroki rotacji i ponownego generowania kluczy dla interfejsu API dla noSQL. Jeśli używasz innego interfejsu API, zobacz sekcje interfejsu API dla bazy danych MongoDB, interfejsu API dla bazy danych Cassandra, interfejsu API dla języka Gremlin lub interfejsu API dla tabel .

Aby monitorować konto pod kątem aktualizacji kluczy i ponownego tworzenia kluczy, zobacz Monitorowanie konta usługi Azure Cosmos DB pod kątem aktualizacji kluczy i ponownego tworzenia klucza.

Proces rotacji kluczy i rewitalizacji jest prosty. Najpierw upewnij się, że aplikacja stale używa klucza podstawowego lub klucza pomocniczego w celu uzyskania dostępu do konta usługi Azure Cosmos DB. Następnie wykonaj kroki opisane w następnej sekcji.

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

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

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

  3. Sprawdź, czy nowy klucz pomocniczy działa spójnie względem konta usługi Azure Cosmos DB. Regenerowanie klucza może potrwać od jednej minuty do wielu godzin w zależności od rozmiaru konta usługi Azure Cosmos DB.

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

  5. Wróć do witryny Azure Portal i wyzwól ponowne uruchomienie klucza podstawowego.

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

Przykładowy kod do użycia klucza podstawowego

Poniższy przykładowy kod ilustruje sposób użycia punktu końcowego konta usługi Azure Cosmos DB i klucza podstawowego do utworzenia wystąpienia elementu CosmosClient:

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

Usługa Azure Cosmos DB uwidacznia wbudowany system RBAC, który umożliwia:

  • Uwierzytelnianie żądań danych za pomocą tożsamości firmy Microsoft Entra.
  • Autoryzowanie żądań danych za pomocą szczegółowego, opartego na rolach modelu uprawnień.

Kontrola dostępu oparta na rolach usługi Azure Cosmos DB to idealna metoda kontroli dostępu w sytuacjach, w których:

  • Nie chcesz używać wspólnego klucza tajnego, takiego jak klucz podstawowy i preferować korzystanie z mechanizmu uwierzytelniania opartego na tokenach.
  • Chcesz użyć tożsamości entra firmy Microsoft do uwierzytelniania żądań.
  • Potrzebujesz szczegółowego modelu uprawnień, aby ściśle ograniczyć operacje bazy danych, które mogą wykonywać tożsamości.
  • Chcesz zmaterializować zasady kontroli dostępu jako "role", które można przypisać do wielu tożsamości.

Aby dowiedzieć się więcej na temat kontroli dostępu opartej na rolach usługi Azure Cosmos DB, zobacz Konfigurowanie kontroli dostępu opartej na rolach dla konta usługi Azure Cosmos DB.

Aby uzyskać informacje i przykładowy kod konfigurowania kontroli dostępu opartej na rolach dla usługi Azure Cosmos DB dla bazy danych MongoDB, zobacz Konfigurowanie kontroli dostępu opartej na rolach dla usługi Azure Cosmos DB dla bazy danych MongoDB.

Tokeny zasobów

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

  • Zapewnianie dostępu do określonych kontenerów, kluczy partycji, dokumentów i załączników.
  • Są tworzone, gdy użytkownik ma przyznane uprawnienia do określonego zasobu.
  • Są tworzone ponownie, gdy zasób uprawnień jest wywoływany przez wywołanie POST, GET lub PUT.
  • Użyj tokenu zasobu skrótu specjalnie skonstruowanego dla użytkownika, zasobu i uprawnienia.
  • Czy czas jest powiązany z dostosowywalnym okresem ważności. Domyślny prawidłowy przedział czasu to jedna godzina. Okres istnienia tokenu może być jednak jawnie określony, maksymalnie 24 godziny.
  • Zapewnij bezpieczną alternatywę dla rozdania klucza podstawowego.
  • Umożliwia klientom odczytywanie, zapisywanie i usuwanie zasobów na koncie usługi Azure Cosmos DB zgodnie z udzielonymi uprawnieniami.

Możesz użyć tokenu zasobu (tworząc użytkowników i uprawnienia usługi Azure Cosmos DB), gdy chcesz zapewnić dostęp do zasobów na koncie usługi Azure Cosmos DB klientowi, któremu nie można ufać za pomocą klucza podstawowego.

Tokeny zasobów usługi Azure Cosmos DB zapewniają bezpieczną alternatywę, która umożliwia klientom odczytywanie, zapisywanie i usuwanie zasobów na koncie usługi Azure Cosmos DB zgodnie z udzielonymi uprawnieniami i bez konieczności używania klucza podstawowego lub tylko do odczytu.

Oto typowy wzorzec projektowy, w którym tokeny zasobów można żądać, wygenerować i dostarczyć do klientów:

  1. Usługa warstwy średniej jest skonfigurowana do udostępniania aplikacji mobilnej w celu udostępniania zdjęć użytkowników.

  2. Usługa środkowa posiada klucz podstawowy konta usługi Azure Cosmos DB.

  3. Aplikacja photo jest zainstalowana na urządzeniach przenośnych użytkownika.

  4. Po zalogowaniu aplikacja fotograficzna ustanawia tożsamość użytkownika z usługą warstwy średniej. Ten mechanizm tworzenia tożsamości jest wyłącznie do aplikacji.

  5. Po ustanowieniu tożsamości usługa w połowie warstwy żąda uprawnień na podstawie tożsamości.

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

  7. Aplikacja telefoniczna może nadal używać tokenu zasobu do bezpośredniego uzyskiwania dostępu do zasobów usługi Azure Cosmos DB z uprawnieniami zdefiniowanymi przez token zasobu i interwałem dozwolonym przez token zasobu.

  8. Po wygaśnięciu tokenu zasobu kolejne żądania otrzymają 401 nieautoryzowany wyjątek. W tym momencie aplikacja na telefon ponownie publikuje tożsamość i żąda nowego tokenu zasobu.

    Screenshot that shows an Azure Cosmos DB resource tokens workflow.

Generowanie tokenów zasobów i zarządzanie nimi są obsługiwane przez natywne biblioteki klienckie usługi Azure Cosmos DB. Jeśli jednak używasz interfejsu REST, musisz skonstruować nagłówki żądań/uwierzytelniania. Aby uzyskać więcej informacji na temat tworzenia nagłówków uwierzytelniania dla interfejsu REST, zobacz Kontrola dostępu w zasobach usługi Azure Cosmos DB lub kod źródłowy dla naszego zestawu SDK platformy .NET lub zestawu Node.js SDK.

Aby zapoznać się z przykładem usługi warstwy środkowej używanej do generowania tokenów zasobów lub brokera, zobacz aplikację ResourceTokenBroker.

Użytkowników

Użytkownicy usługi Azure Cosmos DB są skojarzeni z bazą danych usługi Azure Cosmos DB. Każda baza danych może zawierać zero lub więcej użytkowników usługi Azure Cosmos DB. Poniższy przykładowy kod pokazuje, jak utworzyć użytkownika usługi Azure Cosmos DB przy użyciu zestawu .NET SDK platformy .NET usługi Azure Cosmos DB w wersji 3.

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

Uwaga

Każdy użytkownik usługi Azure Cosmos DB ma metodęReadAsync(), której można użyć do pobrania listy uprawnień skojarzonych z użytkownikiem.

Uprawnienia

Zasób uprawnień jest skojarzony z użytkownikiem i przypisany do określonego zasobu. Każdy użytkownik może zawierać zero lub więcej uprawnień. Zasób uprawnień zapewnia dostęp do tokenu zabezpieczającego, którego użytkownik potrzebuje podczas próby uzyskania dostępu do określonego kontenera lub danych w określonym kluczu partycji. Istnieją dwa dostępne poziomy dostępu, które mogą być udostępniane przez zasób uprawnień:

  • Wszystko: użytkownik ma pełne uprawnienia do zasobu.
  • Odczyt: użytkownik może odczytywać tylko zawartość zasobu, ale nie może wykonywać operacji zapisu, aktualizacji ani usuwania zasobu.

Uwaga

Aby uruchomić procedury składowane, użytkownik musi mieć uprawnienie Wszystkie w kontenerze, w którym zostanie uruchomiona procedura składowana.

Jeśli włączysz dzienniki diagnostyczne w żądaniach płaszczyzny danych, rejestrowane są następujące dwie właściwości odpowiadające uprawnieniem:

  • resourceTokenPermissionId: ta właściwość wskazuje określony identyfikator uprawnień tokenu zasobu.

  • resourceTokenPermissionMode: ta właściwość wskazuje tryb uprawnień ustawiony podczas tworzenia tokenu zasobu. Tryb uprawnień może mieć wartości, takie jak Wszystkie lub Odczyt.

Przykładowy kod do tworzenia uprawnień

Poniższy przykładowy kod pokazuje, jak utworzyć zasób uprawnień, odczytać token zasobu uprawnień i skojarzyć uprawnienia z właśnie utworzonym użytkownikiem .

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

Przykładowy kod umożliwiający odczyt uprawnień użytkownika

Poniższy fragment kodu pokazuje, jak pobrać uprawnienie skojarzone z utworzonym użytkownikiem i utworzyć wystąpienie nowego CosmosClient dla użytkownika z zakresem pojedynczego klucza partycji.

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

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

Różnice między kontrolą dostępu opartą na rolach a tokenami zasobów

Temat RBAC Tokeny zasobów
Uwierzytelnianie Za pomocą identyfikatora Entra firmy Microsoft. Na podstawie natywnych użytkowników usługi Azure Cosmos DB.
Integrowanie tokenów zasobów z identyfikatorem Entra firmy Microsoft wymaga dodatkowej pracy w celu mostka tożsamości firmy Microsoft i użytkowników usługi Azure Cosmos DB.
Autoryzacja Oparte na rolach: definicje ról mapować dozwolone akcje i można je przypisać do wielu tożsamości. Oparte na uprawnieniach: dla każdego użytkownika usługi Azure Cosmos DB musisz przypisać uprawnienia dostępu do danych.
Zakres tokenu Token Entra firmy Microsoft niesie tożsamość obiektu żądającego. Ta tożsamość jest dopasowywana do wszystkich przypisanych definicji ról w celu wykonania autoryzacji. Token zasobu niesie uprawnienie przyznane określonemu użytkownikowi usługi Azure Cosmos DB w określonym zasobie usługi Azure Cosmos DB. Żądania autoryzacji dla różnych zasobów mogą wymagać różnych tokenów.
Odświeżanie tokenu Token Entra firmy Microsoft jest automatycznie odświeżany przez zestawy SDK usługi Azure Cosmos DB po wygaśnięciu. Odświeżanie tokenu zasobu nie jest obsługiwane. Po wygaśnięciu tokenu zasobu należy wydać nowy token.

Dodawanie użytkowników i przypisywanie ról

Aby dodać dostęp czytelnika konta usługi Azure Cosmos DB do konta użytkownika, właściciel subskrypcji wykonaj następujące kroki w witrynie Azure Portal.

  1. Otwórz witrynę Azure Portal i wybierz swoje konto usługi Azure Cosmos DB.

  2. Wybierz pozycję Kontrola dostępu (IAM) .

  3. Wybierz pozycję Dodaj>przypisanie roli, aby otworzyć stronę Dodawanie przypisania roli.

  4. Przypisz następującą rolę. Aby uzyskać szczegółowe instrukcje, zobacz Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal.

    Ustawienie Wartość
    Rola Czytelnik konta usługi Cosmos DB.
    Przypisz dostęp do Użytkownik, grupa lub jednostka usługi.
    Członkowie Użytkownik, grupa lub aplikacja w katalogu, do którego chcesz udzielić dostępu.

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

Jednostka może teraz odczytywać zasoby usługi Azure Cosmos DB.

Usuwanie lub eksportowanie danych użytkownika

Jako usługa bazy danych usługa Azure Cosmos DB umożliwia wyszukiwanie, wybieranie, modyfikowanie i usuwanie wszystkich danych znajdujących się w bazie danych lub kontenerach. Twoim zadaniem jest użycie podanych interfejsów API i zdefiniowanie logiki wymaganej do znalezienia i wymazywania wszelkich danych osobowych w razie potrzeby.

Każdy wielomodelowy interfejs API (SQL, MongoDB, Gremlin, Cassandra lub Table) udostępnia różne zestawy SDK języka zawierające metody wyszukiwania i usuwania danych na podstawie niestandardowych predykatów. Możesz również włączyć funkcję czasu wygaśnięcia (TTL), aby automatycznie usuwać dane po określonym przedziale czasu bez ponoszenia dodatkowych kosztów.

Uwaga

Aby uzyskać informacje dotyczące wyświetlania lub usuwania danych osobowych, zobacz Azure Data Subject Requests for the GDPR (Żądania podmiotów danych dotyczące RODO na platformie Azure). Aby uzyskać więcej informacji na temat RODO, zobacz sekcję RODO centrum zaufania firmy Microsoft i sekcję RODO w portalu zaufania usług.

Następne kroki