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 udostępnia trzy sposoby kontrolowania dostępu do danych.

Typ kontroli dostępu Właściwości
Klucze podstawowe/pomocnicze Wspólny wpis tajny zezwalający na wszelkie operacje zarządzania lub danych. Jest dostępny zarówno w wariantach tylko do odczytu, jak i do odczytu.
Kontrola dostępu oparta na rolach Szczegółowe, oparte na rolach model uprawnień przy użyciu tożsamości usługi Azure Active Directory (Azure AD) 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 kluczy podwójnych jest umożliwienie ponownego generowania lub wprowadzania kluczy, zapewniając ciągły dostęp do konta i danych. Aby dowiedzieć się więcej na temat kluczy podstawowych/pomocniczych, zobacz artykuł Zabezpieczenia bazy danych .

Rotacja i regenerowanie kluczy

Uwaga

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

Aby monitorować konto pod kątem kluczowych aktualizacji i regeneracji kluczy, zobacz artykuł Monitorowanie aktualizacji kluczy za pomocą metryk i alertów .

Proces rotacji i regeneracji kluczy 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 poniżej.

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

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

    Zrzut ekranu witryny Azure Portal przedstawiający sposób ponownego generowania klucza pomocniczego.

  3. Sprawdź, czy nowy klucz pomocniczy działa spójnie względem konta usługi Azure Cosmos DB. Odzyskiwanie 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.

    Zrzut ekranu witryny Azure Portal przedstawiający sposób ponownego generowania klucza podstawowego.

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 obiektu 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 kontroli dostępu opartej na rolach (RBAC), który umożliwia:

  • Uwierzytelnianie żądań danych przy użyciu tożsamości usługi Azure Active Directory.
  • Autoryzuj żądania danych za pomocą szczegółowego modelu uprawnień opartego na rolach.

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ć udostępnionego wpisu tajnego, takiego jak klucz podstawowy, i wolisz polegać na mechanizmie uwierzytelniania opartego na tokenach,
  • Chcesz użyć tożsamości usługi Azure AD do uwierzytelniania żądań,
  • Potrzebujesz szczegółowego modelu uprawnień, aby ściśle ograniczyć operacje bazy danych, które tożsamości mogą wykonywać,
  • Chcesz zmaterializować zasady kontroli dostępu jako "role", które można przypisać do wielu tożsamości.

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

Aby uzyskać informacje i przykładowy kod umożliwiający skonfigurowanie 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, załączników, procedur składowanych, wyzwalaczy i funkcji zdefiniowanych przez użytkownika.
  • Są tworzone, gdy użytkownik ma przyznane uprawnienia do określonego zasobu.
  • Są tworzone ponownie, gdy zasób uprawnień jest uruchamiany na podstawie wywołania 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 przyznanymi przez nich 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 przyznanymi uprawnieniami i bez konieczności używania klucza podstawowego lub tylko do odczytu.

Oto typowy wzorzec projektowania, w którym tokeny zasobów mogą być wymagane, generowane i dostarczane do klientów:

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

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

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

  4. Podczas logowania aplikacja fotograficzna ustanawia tożsamość użytkownika za pomocą usługi w warstwie środkowej. Ten mechanizm ustanawiania tożsamości jest wyłącznie do aplikacji.

  5. Po ustanowieniu tożsamości uprawnienia usługi w warstwie środkowej są wysyłane na podstawie tożsamości.

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

  7. Aplikacja na telefon 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 ustanawia tożsamość i żąda nowego tokenu zasobu.

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

Generowanie i zarządzanie tokenami zasobów są obsługiwane przez natywne biblioteki klienckie usługi Azure Cosmos DB; jeśli jednak używasz interfejsu REST, musisz utworzyć nagłówki żądania/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 SDKNode.js.

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

Użytkownicy

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óra może służyć do pobierania 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 lub usuwania zasobu.

Uwaga

Aby można było uruchamiać 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 dla żądań 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 "all" lub "read".

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 użytkownikiem utworzonym powyżej.

// 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 uprawnienia do odczytu dla użytkownika

Poniższy fragment kodu pokazuje, jak pobrać uprawnienie skojarzone z utworzonym powyżej użytkownikiem i utworzyć wystąpienie nowego obiektu CosmosClient w imieniu 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 Kontrola dostępu oparta na rolach Tokeny zasobów
Authentication W usłudze Azure Active Directory (Azure AD). Na podstawie natywnych użytkowników usługi Azure Cosmos DB
Integrowanie tokenów zasobów z Azure AD wymaga dodatkowej pracy w celu łączenia tożsamości Azure AD 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 należy przypisać uprawnienia dostępu do danych.
Zakres tokenu Token Azure AD zawiera 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 Azure AD 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 Azure Portal.

  1. Otwórz Azure Portal i wybierz 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
    Elementy członkowskie Użytkownik, grupa lub aplikacja w katalogu, do którego chcesz udzielić dostępu.

    Zrzut ekranu przedstawiający stronę Dodawanie przypisania roli w 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. Użytkownik jest jednak odpowiedzialny za korzystanie z podanych interfejsów API i definiowanie logiki wymaganej do znalezienia i wymazywania wszelkich danych osobowych w razie potrzeby. Każdy wielomodelowy interfejs API (SQL, MongoDB, Gremlin, Cassandra, Table) udostępnia różne zestawy SDK języka, które zawierają 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 w Centrum zaufania Firmy Microsoft i w sekcji RODO w portalu Service Trust Portal.

Następne kroki