Säker åtkomst till data i Azure Cosmos DB

GÄLLER FÖR: NoSQL

Den här artikeln innehåller en översikt över dataåtkomstkontroll i Azure Cosmos DB.

Azure Cosmos DB innehåller tre sätt att styra åtkomsten till dina data.

Typ av åtkomstkontroll Egenskaper
Primära/sekundära nycklar Delad hemlighet som tillåter hantering eller dataåtgärder. Den finns i både skrivskyddade och skrivskyddade varianter.
Rollbaserad åtkomstkontroll (RBAC) Detaljerad rollbaserad behörighetsmodell som använder Microsoft Entra-identiteter för autentisering.
Resurstoken Detaljerad behörighetsmodell baserat på interna Azure Cosmos DB-användare och behörigheter.

Primära/sekundära nycklar

Primära/sekundära nycklar ger åtkomst till alla administrativa resurser för databaskontot. Varje konto består av två nycklar: en primärnyckel och en sekundär nyckel. Syftet med dubbla nycklar är att du ska kunna återskapa eller rulla nycklar, vilket ger kontinuerlig åtkomst till ditt konto och dina data. Mer information om primära/sekundära nycklar finns i Översikt över databassäkerhet i Azure Cosmos DB.

Om du vill se dina kontonycklar väljer du Nycklar på den vänstra menyn. Välj sedan ikonen Visa till höger om varje nyckel. Välj knappen Kopiera för att kopiera den valda nyckeln. Du kan dölja dem efteråt genom att välja samma ikon per nyckel, vilket uppdaterar ikonen till en Dölj-knapp .

Screenshot of the View account key for Azure Cosmos DB.

Nyckelrotation och regenerering

Kommentar

I följande avsnitt beskrivs stegen för att rotera och återskapa nycklar för API:et för NoSQL. Om du använder ett annat API kan du läsa avsnitten API för MongoDB, API för Cassandra, API för Gremlin eller API för tabell .

Information om hur du övervakar ditt konto för viktiga uppdateringar och nyckelåtergenerering finns i Övervaka ditt Azure Cosmos DB-konto för nyckeluppdateringar och nyckelåtergenerering.

Processen för nyckelrotation och regenerering är enkel. Kontrollera först att programmet konsekvent använder antingen den primära nyckeln eller den sekundära nyckeln för att få åtkomst till ditt Azure Cosmos DB-konto. Följ sedan stegen i nästa avsnitt.

  1. Gå till ditt Azure Cosmos DB-konto i Azure-portalen.

  2. Välj Nycklar på den vänstra menyn och välj sedan Återskapa sekundär nyckel från ellipsen till höger om den sekundära nyckeln.

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

  3. Kontrollera att den nya sekundära nyckeln fungerar konsekvent mot ditt Azure Cosmos DB-konto. Nyckelåtergenerering kan ta allt från en minut till flera timmar beroende på storleken på Azure Cosmos DB-kontot.

  4. Ersätt din primära nyckel med den sekundära nyckeln i programmet.

  5. Gå tillbaka till Azure-portalen och utlös regenereringen av primärnyckeln.

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

Kodexempel för att använda en primärnyckel

Följande kodexempel visar hur du använder en Azure Cosmos DB-kontoslutpunkt och primärnyckel för att instansiera en 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);

Rollbaserad åtkomstkontroll

Azure Cosmos DB exponerar ett inbyggt RBAC-system som gör att du kan:

  • Autentisera dina databegäranden med en Microsoft Entra-identitet.
  • Auktorisera dina databegäranden med en detaljerad rollbaserad behörighetsmodell.

Azure Cosmos DB RBAC är den perfekta åtkomstkontrollmetoden i situationer där:

  • Du vill inte använda en delad hemlighet som primärnyckeln och föredrar att förlita dig på en tokenbaserad autentiseringsmekanism.
  • Du vill använda Microsoft Entra-identiteter för att autentisera dina begäranden.
  • Du behöver en detaljerad behörighetsmodell för att noggrant begränsa vilka databasåtgärder som dina identiteter tillåts utföra.
  • Du vill materialisera dina åtkomstkontrollprinciper som "roller" som du kan tilldela till flera identiteter.

Mer information om Azure Cosmos DB RBAC finns i Konfigurera rollbaserad åtkomstkontroll för ditt Azure Cosmos DB-konto.

Information och exempelkod för att konfigurera RBAC för Azure Cosmos DB för MongoDB finns i Konfigurera rollbaserad åtkomstkontroll för Azure Cosmos DB för MongoDB.

Resurstoken

Resurstoken ger åtkomst till programresurserna i en databas. Resurstoken:

  • Ge åtkomst till specifika containrar, partitionsnycklar, dokument och bifogade filer.
  • Skapas när en användare beviljas behörigheter till en specifik resurs.
  • Återskapas när en behörighetsresurs hanteras av ett POST-, GET- eller PUT-anrop.
  • Använd en hash-resurstoken som är specifikt konstruerad för användaren, resursen och behörigheten.
  • Är tidsbundna med en anpassningsbar giltighetsperiod. Standardvärdet för giltigt tidsintervall är en timme. Tokens livslängd kan dock uttryckligen anges, upp till högst 24 timmar.
  • Ge ett säkert alternativ till att ge ut primärnyckeln.
  • Gör det möjligt för klienter att läsa, skriva och ta bort resurser i Azure Cosmos DB-kontot enligt de behörigheter som de har beviljats.

Du kan använda en resurstoken (genom att skapa Azure Cosmos DB-användare och behörigheter) när du vill ge åtkomst till resurser i ditt Azure Cosmos DB-konto till en klient som inte kan vara betrodd med primärnyckeln.

Azure Cosmos DB-resurstoken är ett säkert alternativ som gör det möjligt för klienter att läsa, skriva och ta bort resurser i ditt Azure Cosmos DB-konto enligt de behörigheter som du har beviljats och utan att behöva antingen en primär eller skrivskyddad nyckel.

Här är ett typiskt designmönster där resurstoken kan begäras, genereras och levereras till klienter:

  1. En mellannivåtjänst har konfigurerats för att hantera ett mobilprogram för att dela användarfoton.

  2. Mellannivåtjänsten har den primära nyckeln för Azure Cosmos DB-kontot.

  3. Fotoappen är installerad på användarens mobila enheter.

  4. Vid inloggning upprättar fotoappen identiteten för användaren med tjänsten på mellannivå. Denna mekanism för identitetsetablering är helt och hållet upp till ansökan.

  5. När identiteten har upprättats begär tjänsten behörigheter på mellannivå baserat på identiteten.

  6. Tjänsten på mellannivå skickar tillbaka en resurstoken till telefonappen.

  7. Telefonappen kan fortsätta att använda resurstoken för direkt åtkomst till Azure Cosmos DB-resurser med de behörigheter som definieras av resurstoken och för det intervall som tillåts av resurstoken.

  8. När resurstoken upphör att gälla får efterföljande begäranden ett 401-undantag utan behörighet. Nu återupprättar telefonappen identiteten och begär en ny resurstoken.

    Screenshot that shows an Azure Cosmos DB resource tokens workflow.

Generering och hantering av resurstoken hanteras av de interna Azure Cosmos DB-klientbiblioteken. Men om du använder REST måste du skapa sidhuvudena för begäran/autentisering. Mer information om hur du skapar autentiseringshuvuden för REST finns i Åtkomstkontroll för Azure Cosmos DB-resurser eller källkoden för vår .NET SDK eller Node.js SDK.

Ett exempel på en mellannivåtjänst som används för att generera eller asynkrona resurstoken finns i appen ResourceTokenBroker.

Användare

Azure Cosmos DB-användare är associerade med en Azure Cosmos DB-databas. Varje databas kan innehålla noll eller fler Azure Cosmos DB-användare. Följande kodexempel visar hur du skapar en Azure Cosmos DB-användare med hjälp av Azure Cosmos DB .NET SDK v3.

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

Kommentar

Varje Azure Cosmos DB-användare har en ReadAsync() metod som du kan använda för att hämta listan över behörigheter som är associerade med användaren.

Behörigheter

En behörighetsresurs är associerad med en användare och tilldelas till en specifik resurs. Varje användare kan innehålla noll eller fler behörigheter. En behörighetsresurs ger åtkomst till en säkerhetstoken som användaren behöver när han eller hon försöker komma åt en specifik container eller data i en specifik partitionsnyckel. Det finns två tillgängliga åtkomstnivåer som kan tillhandahållas av en behörighetsresurs:

  • Alla: Användaren har fullständig behörighet för resursen.
  • Läs: Användaren kan bara läsa innehållet i resursen men kan inte utföra skriv-, uppdaterings- eller borttagningsåtgärder på resursen.

Kommentar

Om du vill köra lagrade procedurer måste användaren ha behörigheten Alla på containern där den lagrade proceduren ska köras.

Om du aktiverar diagnostikloggarna på dataplansbegäranden loggas följande två egenskaper som motsvarar behörigheten:

  • resourceTokenPermissionId: Den här egenskapen anger behörighets-ID:t för resurstoken som du angav.

  • resourceTokenPermissionMode: Den här egenskapen anger det behörighetsläge som du angav när du skapade resurstoken. Behörighetsläget kan ha värden som Alla eller Läs.

Kodexempel för att skapa behörighet

Följande kodexempel visar hur du skapar en behörighetsresurs, läser resurstoken för behörighetsresursen och associerar behörigheterna med den användare som du nyss skapade.

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

Kodexempel för att läsa behörighet för användare

Följande kodfragment visar hur du hämtar behörigheten som är associerad med den användare som du skapade och instansierar en ny CosmosClient för användaren, begränsad till en enda partitionsnyckel.

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

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

Skillnader mellan RBAC och resurstoken

Ämne RBAC Resurstoken
Autentisering Med Microsoft Entra-ID. Baserat på de interna Azure Cosmos DB-användarna.
Integrering av resurstoken med Microsoft Entra-ID kräver extra arbete för att överbrygga Microsoft Entra-identiteter och Azure Cosmos DB-användare.
Auktorisering Rollbaserad: Rolldefinitioner mappar tillåtna åtgärder och kan tilldelas till flera identiteter. Behörighetsbaserad: För varje Azure Cosmos DB-användare måste du tilldela behörigheter för dataåtkomst.
Tokenomfång En Microsoft Entra-token bär begärandens identitet. Den här identiteten matchas mot alla tilldelade rolldefinitioner för att utföra auktorisering. En resurstoken har behörigheten beviljad till en specifik Azure Cosmos DB-användare på en specifik Azure Cosmos DB-resurs. Auktoriseringsbegäranden på olika resurser kan kräva olika token.
Tokenuppdatering Microsoft Entra-token uppdateras automatiskt av Azure Cosmos DB SDK:er när den upphör att gälla. Uppdatering av resurstoken stöds inte. När en resurstoken upphör att gälla måste en ny utfärdas.

Lägg till användare och tilldela roller

Om du vill lägga till åtkomst till Azure Cosmos DB-kontoläsare till ditt användarkonto måste du låta en prenumerationsägare utföra följande steg i Azure-portalen.

  1. Öppna Azure-portalen och välj ditt Azure Cosmos DB-konto.

  2. Välj Åtkomstkontroll (IAM) .

  3. Välj Lägg till>rolltilldelning för att öppna sidan Lägg till rolltilldelning.

  4. Tilldela följande roll. Detaljerade steg finns i Tilldela Azure-roller med hjälp av Azure-portalen.

    Inställning Värde
    Roll Cosmos DB-kontoläsare.
    Tilldela åtkomst till Användare, grupp eller tjänstens huvudnamn.
    Members Användaren, gruppen eller programmet i din katalog som du vill bevilja åtkomst till.

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

Entiteten kan nu läsa Azure Cosmos DB-resurser.

Ta bort eller exportera användardata

Som databastjänst gör Azure Cosmos DB att du kan söka, välja, ändra och ta bort data som finns i databasen eller containrarna. Det är ditt ansvar att använda de angivna API:erna och definiera logik som krävs för att hitta och radera personliga data om det behövs.

Varje API för flera modeller (SQL, MongoDB, Gremlin, Cassandra eller Table) innehåller olika språk-SDK:er som innehåller metoder för att söka efter och ta bort data baserat på anpassade predikat. Du kan också aktivera funktionen time to live (TTL) för att ta bort data automatiskt efter en angiven period, utan att medföra någon mer kostnad.

Kommentar

I Azure-begäranden från registrerad person för GDPR finns det information om att visa eller ta bort personuppgifter. Mer information om GDPR finns i avsnittet GDPR i Microsoft Trust Center och GDPR-avsnittet i Service Trust-portalen.

Nästa steg