Megosztás a következőn keresztül:


Adatsík szerepköralapú hozzáférés-vezérlés használata a NoSQL-hez készült Azure Cosmos DB-vel

A KÖVETKEZŐRE VONATKOZIK: NoSQL

Az aktuális hely (szerepköralapú hozzáférés-vezérlés) diagramja az üzembe helyezési útmutató sorrendjében.

Az üzembe helyezési útmutató sorrendjének diagramja a következő helyekkel együtt: Áttekintés, Fogalmak, Előkészítés, Szerepköralapú hozzáférés-vezérlés, Hálózat és Referencia. A szerepköralapú hozzáférés-vezérlés helye jelenleg ki van emelve.

Tipp.

Az új alkalmazások készítéséhez használt legújabb mintákért látogasson el az új mintagyűjteményünkbe

Ez a cikk végigvezeti a noSQL-fiókhoz készült Azure Cosmos DB-fiókok adatainak kezeléséhez szükséges identitáshozzáférés biztosításának lépésein.

Fontos

A cikkben szereplő lépések csak az adatsík-hozzáférésre vonatkoznak az egyes elemeken végzett műveletek végrehajtásához és a lekérdezések futtatásához. A vezérlősík szerepköreinek, definícióinak és hozzárendeléseinek kezeléséről a vezérlősík szerepköralapú hozzáférésének biztosításáról olvashat.

Előfeltételek

  • Egy Azure-fiók, aktív előfizetéssel. Fiók ingyenes létrehozása.
  • Egy meglévő Azure Cosmos DB for NoSQL-fiók.
  • Egy vagy több meglévő identitás a Microsoft Entra-azonosítóban.

Szerepkördefiníció előkészítése

Először elő kell készítenie egy szerepkördefiníciót egy listával dataActions , amely hozzáférést biztosít az adatok olvasásához, lekérdezéséhez és kezeléséhez az Azure Cosmos DB for NoSQL-ben.

Fontos

Egy meglévő adatsík szerepkördefiníciójának beszerzéséhez az alábbi vezérlősík-engedélyek szükségesek:

  • Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read

További információ: A vezérlősík szerepköralapú hozzáférésének biztosítása.

Listázhatja az Azure Cosmos DB for NoSQL-fiókhoz társított szerepkördefiníciókat a használatával az cosmosdb sql role definition list. Tekintse át a kimenetet, és keresse meg a Cosmos DB beépített adatszolgáltató nevű szerepkördefiníciót. A kimenet a tulajdonság szerepkördefiníciójának egyedi azonosítóját id tartalmazza. Jegyezze fel ezt az értéket az útmutató későbbi részében, a hozzárendelési lépésben használni kívánt módon.

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"
  }
  ...
]

Feljegyzés

Ebben a példában az érték a id következő lenne /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002: . Ez a példa fiktív adatokat használ, és az azonosító eltér a példától.

Az Azure Cosmos DB for NoSQL-fiókhoz társított szerepkördefiníciók listázására használható Get-AzCosmosDBSqlRoleDefinition . Tekintse át a kimenetet, és keresse meg a Cosmos DB beépített adatszolgáltató nevű szerepkördefiníciót. A kimenet a tulajdonság szerepkördefiníciójának egyedi azonosítóját Id tartalmazza. Jegyezze fel ezt az értéket az útmutató későbbi részében, a hozzárendelési lépésben használni kívánt módon.

$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 : 

Feljegyzés

Ebben a példában az érték a Id következő lenne /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002: . Ez a példa fiktív adatokat használ, és az azonosító eltér a példától. Az azonosító (00000000-0000-0000-0000-000000000002) azonban a fiók összes szerepkördefiníciójában egyedi.

Szerepkör hozzárendelése identitáshoz

Most rendelje hozzá az újonnan definiált szerepkört egy identitáshoz, hogy az alkalmazások hozzáférhessenek az Adatokhoz az Azure Cosmos DB for NoSQL-ben.

Fontos

Új adatsík-szerepkör-hozzárendelés létrehozásához a vezérlősík engedélyei szükségesek:

  • Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read
  • Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/read
  • Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write

További információ: A vezérlősík szerepköralapú hozzáférésének biztosítása.

  1. Az aktuális fiók egyedi azonosítójának lekérésére használható az cosmosdb show .

    az cosmosdb show \
        --resource-group "<name-of-existing-resource-group>" \
        --name "<name-of-existing-nosql-account>" \
        --query "{id:id}"
    
  2. Figyelje meg az előző parancs kimenetét. Jegyezze fel a id fiók tulajdonságának értékét, ahogy azt a következő lépésben használni kell.

    {
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
    }
    

    Feljegyzés

    Ebben a példában az érték a id következő lenne /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql: . Ez a példa fiktív adatokat használ, és az azonosító eltér a példától.

  3. Az új szerepkör hozzárendelése a következővel az cosmosdb sql role assignment create: . Használja a korábban rögzített szerepkördefiníció-azonosítókat az --role-definition-id argumentumhoz, és az identitás egyedi azonosítóját az --principal-id argumentumhoz. Végül használja a fiók azonosítóját az --scope argumentumhoz.

    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. Az Azure Cosmos DB for NoSQL-fiókhoz tartozó összes szerepkör-hozzárendelés listázására használható az cosmosdb sql role assignment list . Tekintse át a kimenetet, és győződjön meg arról, hogy a szerepkör-hozzárendelés létrejött.

    az cosmosdb sql role assignment list \
        --resource-group "<name-of-existing-resource-group>" \
        --account-name "<name-of-existing-nosql-account>"
    
  1. Hozzon létre egy új Bicep-fájlt a szerepkör-hozzárendelés definiálásához. Adja a fájlnak a data-plane-role-assignment.bicep nevet.

    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. Hozzon létre egy új Bicep-paraméterfájlt data-plane-role-assignment néven.bicepparam Ebben a paraméterfájlban rendelje hozzá a meglévő Azure Cosmos DB for NoSQL-fiók nevét a accountName paraméterhez, a korábban rögzített szerepkördefiníció-azonosítókat a roleDefinitionId paraméterhez, valamint az identitás egyedi azonosítóját a identityId paraméterhez.

    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. A Bicep-sablon üzembe helyezése a következővel 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. Ismételje meg ezeket a lépéseket, hogy hozzáférést biztosítson a fiókhoz bármely más identitásból, amelyet használni szeretne.

    Tipp.

    Ezeket a lépéseket tetszőleges számú identitás esetében megismételheti. Ezek a lépések általában legalább ismétlődnek, hogy a fejlesztők hozzáférhessenek egy fiókhoz az emberi identitásuk használatával, és lehetővé tegyék az alkalmazások számára a felügyelt identitással való hozzáférést.

  1. A jelenlegi fiók metaadatainak lekérésére használható Get-AzCosmosDBAccount .

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        Name = "<name-of-existing-nosql-account>"
    }    
    Get-AzCosmosDBAccount @parameters | Select -Property Id
    
  2. Figyelje meg az előző parancs kimenetét. Jegyezze fel a Id fiók tulajdonságának értékét, ahogy azt a következő lépésben használni kell.

    Id
    --    
    /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
    

    Feljegyzés

    Ebben a példában az érték a Id következő lenne /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql: . Ez a példa fiktív adatokat használ, és az azonosító eltér a példától.

  3. Az új szerepkör hozzárendelésére használható New-AzCosmosDBSqlRoleAssignment . Használja a korábban rögzített szerepkördefiníció-azonosítókat a RoleDefinitionId paraméterhez, valamint az identitás egyedi azonosítóját a PrincipalId paraméterhez. Végül használja a fiók azonosítóját a Scope paraméterhez.

    $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. Listázhatja az Azure Cosmos DB for NoSQL-fiók összes szerepkör-hozzárendelését a használatával Get-AzCosmosDBSqlRoleAssignment. Tekintse át a kimenetet, és győződjön meg arról, hogy a szerepkör-hozzárendelés létrejött.

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        AccountName = "<name-of-existing-nosql-account>"
    }
    Get-AzCosmosDBSqlRoleAssignment @parameters
    

Adatsík-hozzáférés ellenőrzése kódban

Végül ellenőrizze, hogy helyesen adta-e meg a hozzáférést az alkalmazáskód és az Azure SDK használatával az előnyben részesített programozási nyelven.

using Azure.Core;
using Azure.Identity;
using Microsoft.Azure.Cosmos;

string endpoint = "<account-endpoint>";

TokenCredential credential = new DefaultAzureCredential();

CosmosClient client = new(endpoint, credential);

Fontos

Ez a kódminta a Microsoft.Azure.Cosmos NuGetből származó kódtárakat Azure.Identity használja.