Använda rollbaserad åtkomstkontroll för dataplan med Azure Cosmos DB för NoSQL
GÄLLER FÖR: NoSQL
Diagram över sekvensen i distributionsguiden, inklusive dessa platser, i ordning: Översikt, Begrepp, Förbereda, Rollbaserad åtkomstkontroll, Nätverk och Referens. Platsen rollbaserad åtkomstkontroll är för närvarande markerad.
Dricks
Besök vårt nya exempelgalleri för de senaste exemplen för att skapa nya appar
Den här artikeln går igenom stegen för att bevilja en identitet åtkomst för att hantera data i ett Azure Cosmos DB för NoSQL-konto.
Viktigt!
Stegen i den här artikeln omfattar endast åtkomst till dataplan för att utföra åtgärder på enskilda objekt och köra frågor. Information om hur du hanterar databaser och containrar för kontrollplanet finns i Bevilja rollbaserad åtkomst för kontrollplanet.
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
- Ett befintligt Azure Cosmos DB för NoSQL-konto.
- En eller flera befintliga identiteter i Microsoft Entra-ID.
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Snabbstart för Bash i Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Logga in med Azure CLI.
När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda tillägg med Azure CLI.
Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
- Om du väljer att använda Azure PowerShell lokalt:
- Installera den senaste versionen av Az PowerShell-modulen.
- Anslut till ditt Azure-konto med hjälp av cmdleten Connect-AzAccount .
- Om du väljer att använda Azure Cloud Shell:
Förbereda rolldefinition
Först måste du förbereda en rolldefinition med en lista över dataActions
för att ge åtkomst till läsning, frågor och hantera data i Azure Cosmos DB för NoSQL.
Viktigt!
För att få en befintlig rolldefinition för dataplanet krävs följande behörigheter för kontrollplanet:
Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read
Mer information finns i bevilja rollbaserad åtkomst för kontrollplanet.
Visa en lista över alla rolldefinitioner som är associerade med ditt Azure Cosmos DB för NoSQL-konto med .az cosmosdb sql role definition list
Granska utdata och leta upp rolldefinitionen med namnet Cosmos DB Built-in Data Contributor. Utdata innehåller den unika identifieraren för rolldefinitionen i egenskapen id
. Registrera det här värdet som det krävs för att använda i tilldelningssteget senare i den här guiden.
az cosmosdb sql role definition list \
--resource-group "<name-of-existing-resource-group>" \
--account-name "<name-of-existing-nosql-account>"
[
...,
{
"assignableScopes": [
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
],
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002",
"name": "00000000-0000-0000-0000-000000000002",
"permissions": [
{
"dataActions": [
"Microsoft.DocumentDB/databaseAccounts/readMetadata",
"Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*",
"Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*"
],
"notDataActions": []
}
],
"resourceGroup": "msdocs-identity-example",
"roleName": "Cosmos DB Built-in Data Contributor",
"type": "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions",
"typePropertiesType": "BuiltInRole"
}
...
]
Kommentar
I det här exemplet id
skulle värdet vara /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002
. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet.
Använd Get-AzCosmosDBSqlRoleDefinition
för att lista alla rolldefinitioner som är associerade med ditt Azure Cosmos DB för NoSQL-konto. Granska utdata och leta upp rolldefinitionen med namnet Cosmos DB Built-in Data Contributor. Utdata innehåller den unika identifieraren för rolldefinitionen i egenskapen Id
. Registrera det här värdet som det krävs för att använda i tilldelningssteget senare i den här guiden.
$parameters = @{
ResourceGroupName = "<name-of-existing-resource-group>"
AccountName = "<name-of-existing-nosql-account>"
}
Get-AzCosmosDBSqlRoleDefinition @parameters
Id : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002
RoleName : Cosmos DB Built-in Data Contributor
Type : BuiltInRole
AssignableScopes : {/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccountsmsdocs-identity-example-nosql}
Permissions.DataActions : {Microsoft.DocumentDB/databaseAccounts/readMetadata, Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*, Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*}
Permissions.NotDataActions :
Kommentar
I det här exemplet Id
skulle värdet vara /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002
. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet. Identifieraren (00000000-0000-0000-0000-000000000002
) är dock unik för alla rolldefinitioner i ditt konto.
Tilldela roll till identitet
Tilldela nu den nyligen definierade rollen till en identitet så att dina program kan komma åt data i Azure Cosmos DB för NoSQL.
Viktigt!
För att skapa en ny rolltilldelning för dataplanet krävs följande behörigheter för kontrollplanet:
Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read
Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/read
Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write
Mer information finns i bevilja rollbaserad åtkomst för kontrollplanet.
Använd
az cosmosdb show
för att hämta den unika identifieraren för ditt aktuella konto.az cosmosdb show \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-nosql-account>" \ --query "{id:id}"
Observera utdata från föregående kommando. Registrera värdet
id
för egenskapen för det här kontot som det krävs för att använda i nästa steg.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql" }
Kommentar
I det här exemplet
id
skulle värdet vara/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet.Tilldela den nya rollen med .
az cosmosdb sql role assignment create
Använd tidigare registrerade rolldefinitionsidentifierare till--role-definition-id
argumentet och den unika identifieraren för din identitet till--principal-id
argumentet. Använd slutligen ditt kontos identifierare för--scope
argumentet.az cosmosdb sql role assignment create \ --resource-group "<name-of-existing-resource-group>" \ --account-name "<name-of-existing-nosql-account>" \ --role-definition-id "<id-of-new-role-definition>" \ --principal-id "<id-of-existing-identity>" \ --scope "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
Använd
az cosmosdb sql role assignment list
för att lista alla rolltilldelningar för ditt Azure Cosmos DB för NoSQL-konto. Granska utdata för att se till att rolltilldelningen har skapats.az cosmosdb sql role assignment list \ --resource-group "<name-of-existing-resource-group>" \ --account-name "<name-of-existing-nosql-account>"
Skapa en ny Bicep-fil för att definiera rolltilldelningen. Ge filen namnet data-plane-role-assignment.bicep.
metadata description = 'Assign RBAC role for data plane access to Azure Cosmos DB for NoSQL.' @description('Name of the Azure Cosmos DB for NoSQL account.') param accountName string @description('Id of the role definition to assign to the targeted principal in the context of the account.') param roleDefinitionId string @description('Id of the identity/principal to assign this role in the context of the account.') param identityId string resource account 'Microsoft.DocumentDB/databaseAccounts@2024-05-15' existing = { name: accountName } resource assignment 'Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments@2024-05-15' = { name: guid(roleDefinitionId, identityId, account.id) parent: account properties: { principalId: identityId roleDefinitionId: roleDefinitionId scope: account.id } } output assignmentId string = assignment.id
Skapa en ny Bicep-parameterfil med namnet data-plane-role-assignment.
bicepparam
. I den här parameterfilen tilldelar du namnet på ditt befintliga Azure Cosmos DB för NoSQL-konto till parameternaccountName
, de tidigare registrerade rolldefinitionsidentifierarna till parameternroleDefinitionId
och den unika identifieraren för din identitet till parameternidentityId
.using './data-plane-role-assignment.bicep' param accountName = '<name-of-existing-nosql-account>' param roleDefinitionId = '<id-of-new-role-definition>' param identityId = '<id-of-existing-identity>'
Distribuera Bicep-mallen med .
az deployment group create
az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --parameters data-plane-role-assignment.bicepparam \ --template-file data-plane-role-assignment.bicep
Upprepa de här stegen för att bevilja åtkomst till kontot från andra identiteter som du vill använda.
Dricks
Du kan upprepa de här stegen för så många identiteter som du vill. Vanligtvis upprepas de här stegen åtminstone för att ge utvecklare åtkomst till ett konto med hjälp av sin mänskliga identitet och för att tillåta programåtkomst med hjälp av en hanterad identitet.
Använd
Get-AzCosmosDBAccount
för att hämta metadata för ditt aktuella konto.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-nosql-account>" } Get-AzCosmosDBAccount @parameters | Select -Property Id
Observera utdata från föregående kommando. Registrera värdet
Id
för egenskapen för det här kontot som det krävs för att använda i nästa steg.Id -- /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
Kommentar
I det här exemplet
Id
skulle värdet vara/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet.Använd
New-AzCosmosDBSqlRoleAssignment
för att tilldela den nya rollen. Använd de tidigare registrerade rolldefinitionsidentifierarna för parameternRoleDefinitionId
och den unika identifieraren för din identitet till parameternPrincipalId
. Slutligen använder du ditt kontos identifierare för parameternScope
.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" AccountName = "<name-of-existing-nosql-account>" RoleDefinitionId = "<id-of-new-role-definition>" PrincipalId = "<id-of-existing-identity>" Scope = "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql" } New-AzCosmosDBSqlRoleAssignment @parameters
Visa en lista över alla rolltilldelningar för ditt Azure Cosmos DB för NoSQL-konto med .
Get-AzCosmosDBSqlRoleAssignment
Granska utdata för att se till att rolltilldelningen har skapats.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" AccountName = "<name-of-existing-nosql-account>" } Get-AzCosmosDBSqlRoleAssignment @parameters
Verifiera dataplansåtkomst i kod
Kontrollera slutligen att du har beviljat åtkomst korrekt med hjälp av programkod och Azure SDK på önskat programmeringsspråk.
using Azure.Core;
using Azure.Identity;
using Microsoft.Azure.Cosmos;
string endpoint = "<account-endpoint>";
TokenCredential credential = new DefaultAzureCredential();
CosmosClient client = new(endpoint, credential);
Viktigt!
Det här kodexemplet använder biblioteken Microsoft.Azure.Cosmos
och Azure.Identity
från NuGet.