Dela via


Använda rollbaserad åtkomstkontroll för dataplan med Azure Cosmos DB för NoSQL

GÄLLER FÖR: NoSQL

Diagram över den aktuella platsen (rollbaserad åtkomstkontroll) i sekvensen i distributionsguiden.

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.

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.

  1. 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}"
    
  2. 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.

  3. 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"
    
  4. 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>"
    
  1. 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
    
  2. 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 parametern accountName , de tidigare registrerade rolldefinitionsidentifierarna till parametern roleDefinitionId och den unika identifieraren för din identitet till parametern identityId .

    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>'
    
  3. 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
    
  4. 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.

  1. 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
    
  2. 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.

  3. Använd New-AzCosmosDBSqlRoleAssignment för att tilldela den nya rollen. Använd de tidigare registrerade rolldefinitionsidentifierarna för parametern RoleDefinitionId och den unika identifieraren för din identitet till parametern PrincipalId . Slutligen använder du ditt kontos identifierare för parametern Scope .

    $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
    
  4. 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.