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 .
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.
- Om ditt program för närvarande använder primärnyckeln
- Om ditt program för närvarande använder den sekundära nyckeln
Gå till ditt Azure Cosmos DB-konto i Azure-portalen.
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.
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.
Ersätt din primära nyckel med den sekundära nyckeln i programmet.
Gå tillbaka till Azure-portalen och utlös regenereringen av primärnyckeln.
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:
En mellannivåtjänst har konfigurerats för att hantera ett mobilprogram för att dela användarfoton.
Mellannivåtjänsten har den primära nyckeln för Azure Cosmos DB-kontot.
Fotoappen är installerad på användarens mobila enheter.
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.
När identiteten har upprättats begär tjänsten behörigheter på mellannivå baserat på identiteten.
Tjänsten på mellannivå skickar tillbaka en resurstoken till telefonappen.
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.
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.
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.
Öppna Azure-portalen och välj ditt Azure Cosmos DB-konto.
Välj Åtkomstkontroll (IAM) .
Välj Lägg till>rolltilldelning för att öppna sidan Lägg till rolltilldelning.
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.
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
- Mer information om Azure Cosmos DB-databassäkerhet finns i Azure Cosmos DB-databassäkerhet.
- Information om hur du skapar Auktoriseringstoken för Azure Cosmos DB finns i Åtkomstkontroll för Azure Cosmos DB-resurser.
- Exempel på användarhantering med användare och behörigheter finns i .NET SDK v3-användarhanteringsexempel.
- 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.