Sdílet prostřednictvím


Použití řízení přístupu na základě role na základě roviny dat se službou Azure Cosmos DB for NoSQL

PLATÍ PRO: NoSQL

Diagram aktuálního umístění (řízení přístupu na základě role) v posloupnosti průvodce nasazením

Diagram posloupnosti průvodce nasazením, včetně těchto umístění, v uvedeném pořadí: Přehled, Koncepty, Příprava, Řízení přístupu na základě role, Síť a Reference Umístění Řízení přístupu na základě role je aktuálně zvýrazněné.

Tento článek vás provede postupem udělení přístupu identit ke správě dat v účtu Azure Cosmos DB for NoSQL.

Důležité

Kroky v tomto článku pokrývají pouze přístup roviny dat k provádění operací s jednotlivými položkami a spouštění dotazů. Informace o správě rolí, definic a přiřazení řídicí roviny najdete v tématu udělení přístupu na základě role řídicí roviny.

Požadavky

  • Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
  • Existující účet Azure Cosmos DB for NoSQL.
  • Jedna nebo více existujících identit v Microsoft Entra ID.

Příprava definice role

Nejprve musíte připravit definici role se seznamem dataActions pro udělení přístupu ke čtení, dotazování a správě dat ve službě Azure Cosmos DB for NoSQL.

Zobrazí seznam všech definic rolí přidružených k vašemu účtu Azure Cosmos DB for NoSQL pomocí az cosmosdb sql role definition list. Zkontrolujte výstup a vyhledejte definici role s názvem Předdefinovaný přispěvatel dat Cosmos DB. Výstup obsahuje jedinečný identifikátor definice role ve id vlastnosti. Tuto hodnotu si poznamenejte, protože je potřeba ji použít v kroku přiřazení dále v tomto průvodci.

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

Poznámka:

V tomto příkladu id by hodnota byla /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002. Tento příklad používá fiktivní data a váš identifikátor by se od tohoto příkladu odlišil.

Slouží Get-AzCosmosDBSqlRoleDefinition k výpisu všech definic rolí přidružených k vašemu účtu Azure Cosmos DB for NoSQL. Zkontrolujte výstup a vyhledejte definici role s názvem Předdefinovaný přispěvatel dat Cosmos DB. Výstup obsahuje jedinečný identifikátor definice role ve Id vlastnosti. Tuto hodnotu si poznamenejte, protože je potřeba ji použít v kroku přiřazení dále v tomto průvodci.

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

Poznámka:

V tomto příkladu Id by hodnota byla /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002. Tento příklad používá fiktivní data a váš identifikátor by se od tohoto příkladu odlišil. Identifikátor (00000000-0000-0000-0000-000000000002) je však jedinečný napříč všemi definicemi rolí ve vašem účtu.

Přiřazení role identitě

Teď přiřaďte nově definovanou roli identitě, aby vaše aplikace mohly přistupovat k datům ve službě Azure Cosmos DB for NoSQL.

  1. Slouží az cosmosdb show k získání jedinečného identifikátoru pro váš aktuální účet.

    az cosmosdb show \
        --resource-group "<name-of-existing-resource-group>" \
        --name "<name-of-existing-resource-group>" \
        --query "{id:id}"
    
  2. Prohlédněte si výstup předchozího příkazu. Poznamenejte si hodnotu id vlastnosti pro tento účet, protože je nutné ji použít v dalším kroku.

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

    Poznámka:

    V tomto příkladu id by hodnota byla /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql. Tento příklad používá fiktivní data a váš identifikátor by se od tohoto příkladu odlišil.

  3. Přiřaďte novou roli pomocí az cosmosdb sql role assignment create. K argumentu --role-definition-id použijte dříve zaznamenané identifikátory definic rolí a jedinečný identifikátor identity pro --principal-id argument. Nakonec pro argument použijte identifikátor --scope vašeho účtu.

    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. Slouží az cosmosdb sql role assignment list k výpisu všech přiřazení rolí pro váš účet Azure Cosmos DB for NoSQL. Zkontrolujte výstup a ujistěte se, že se vaše přiřazení role vytvořilo.

    az cosmosdb sql role assignment list \
        --resource-group "<name-of-existing-resource-group>" \
        --account-name "<name-of-existing-nosql-account>"
    
  1. Vytvořte nový soubor Bicep, který definuje přiřazení role. Pojmenujte soubor data-rovina-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. Vytvořte nový soubor parametrů Bicep s názvem data-plane-role-assignment.bicepparam. V tomto souboru parametrů přiřaďte k parametru accountName název existujícího účtu Azure Cosmos DB for NoSQL, dříve zaznamenané identifikátory roleDefinitionId definic rolí parametru a jedinečný identifikátor vaší identity k parametru 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. Nasaďte šablonu Bicep pomocí 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. Pokud chcete udělit přístup k účtu z jiných identit, které chcete použít, opakujte tyto kroky.

    Tip

    Tento postup můžete opakovat pro tolik identit, kolik chcete. Tyto kroky se obvykle opakují, aby vývojáři měli přístup k účtu pomocí své lidské identity a povolili aplikacím přístup pomocí spravované identity.

  1. Slouží Get-AzCosmosDBAccount k získání metadat pro váš aktuální účet.

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        Name = "<name-of-existing-nosql-account>"
    }    
    Get-AzCosmosDBAccount @parameters | Select -Property Id
    
  2. Prohlédněte si výstup předchozího příkazu. Poznamenejte si hodnotu Id vlastnosti pro tento účet, protože je nutné ji použít v dalším kroku.

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

    Poznámka:

    V tomto příkladu Id by hodnota byla /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql. Tento příklad používá fiktivní data a váš identifikátor by se od tohoto příkladu odlišil.

  3. Slouží New-AzCosmosDBSqlRoleAssignment k přiřazení nové role. K parametru RoleDefinitionId použijte dříve zaznamenané identifikátory definic rolí a jedinečný identifikátor vaší identity pro PrincipalId parametr. Nakonec pro parametr použijte identifikátor Scope vašeho účtu.

    $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. Vypíše všechna přiřazení rolí pro váš účet Azure Cosmos DB for NoSQL pomocí Get-AzCosmosDBSqlRoleAssignment. Zkontrolujte výstup a ujistěte se, že se vaše přiřazení role vytvořilo.

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

Ověření přístupu k rovině dat v kódu

Nakonec ověřte, že jste správně udělili přístup pomocí kódu aplikace a sady Azure SDK ve vašem preferovaném programovacím jazyce.

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

string endpoint = "<account-endpoint>";

TokenCredential credential = new DefaultAzureCredential();

CosmosClient client = new(endpoint, credential);

Důležité

Tento vzorový kód používá knihovny Microsoft.Azure.Cosmos z Azure.Identity NuGetu.