Dela via


Ansluta till Azure Cosmos DB for Table med rollbaserad åtkomstkontroll och Microsoft Entra-ID

Rollbaserad åtkomstkontroll refererar till en metod för att hantera åtkomst till resurser i Azure. Den här metoden baseras på specifika identiteter som tilldelas roller som hanterar vilken åtkomstnivå de har till en eller flera resurser. Rollbaserad åtkomstkontroll ger ett flexibelt system för detaljerad åtkomsthantering som säkerställer att identiteter bara har den minst privilegierade åtkomstnivå som de behöver för att utföra sina uppgifter.

Mer information finns i rollbaserad åtkomstkontroll.

Förutsättningar

  • Ett Azure-konto med en aktiv prenumeration. Skapa ett konto kostnadsfritt.

  • Ett befintligt Azure Cosmos DB för tabellkonto.

  • En eller flera befintliga identiteter i Microsoft Entra-ID.

Inaktivera nyckelbaserad autentisering

Om du inaktiverar nyckelbaserad auktorisering förhindras ditt konto från att användas utan den säkrare autentiseringsmetoden för Microsoft Entra-ID. Den här proceduren är ett steg som bör utföras på nya konton inom säkra arbetslaster. Du kan också utföra den här proceduren på befintliga konton som migreras till ett säkert arbetsbelastningsmönster.

Inaktivera först nyckelbaserad autentisering till ditt befintliga konto så att program måste använda Microsoft Entra-ID-autentisering. Använd az resource update för att ändra properties.disableLocalAuth det befintliga kontot.

az resource update \
    --resource-group "<name-of-existing-resource-group>" \
    --name "<name-of-existing-account>" \
    --resource-type "Microsoft.DocumentDB/databaseAccounts" \
    --set properties.disableLocalAuth=true

Skapa först ett nytt konto med nyckelbaserad autentisering inaktiverad så att program måste använda Microsoft Entra-autentisering.

  1. Skapa en ny Bicep-fil för att distribuera ditt nya konto med nyckelbaserad autentisering inaktiverad. Ge filen namnet deploy-new-account.bicep.

    metadata description = 'Deploys a new Azure Cosmos DB account with key-based auth disabled.'
    
    @description('Name of the Azure Cosmos DB account.')
    param name string = 'csms-${uniqueString(resourceGroup().id)}'
    
    @description('Primary location for the Azure Cosmos DB account.')
    param location string = resourceGroup().location
    
    resource account 'Microsoft.DocumentDB/databaseAccounts@2024-05-15' = {
      name: name
      location: location
      kind: 'GlobalDocumentDB'
      properties: {
        databaseAccountOfferType: 'Standard'
        locations: [
          {
            locationName: location
          }
        ]
        disableLocalAuth: true
      }
    }
    
  2. Använd az deployment group create för att distribuera Bicep-filen med det nya kontot.

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --template-file deploy-new-account.bicep
    

Inaktivera först nyckelbaserad autentisering till ditt befintliga konto så att program måste använda Microsoft Entra-autentisering. Använd Get-AzResource respektive Set-AzResource för att läsa och uppdatera det befintliga kontot.

$parameters = @{
    ResourceGroupName = "<name-of-existing-resource-group>"
    ResourceName = "<name-of-existing-account>"
    ResourceType = "Microsoft.DocumentDB/databaseAccounts"
}
$resource = Get-AzResource @parameters

$resource.Properties.DisableLocalAuth = $true

$resource | Set-AzResource -Force

Använd de här stegen för att skapa ett nytt Azure Cosmos DB för NoSQL-konto med nyckelbaserad autentisering inaktiverad så att program endast måste använda Microsoft Entra-autentisering.

  1. När du konfigurerar ett nytt Azure Cosmos DB för NoSQL-konto går du till avsnittet Säkerhet i processen för att skapa kontot.

  2. Välj sedan Inaktivera för alternativet Nyckelbaserad autentisering .

    Skärmbild av alternativet att inaktivera nyckelbaserad autentisering när du skapar ett nytt konto i Azure-portalen.

Viktigt!

För att ändra ett Azure Cosmos DB-konto krävs en Azure-roll med minst behörighet.Microsoft.DocumentDb/databaseAccounts/*/write Mer information finns i behörigheter för Azure Cosmos DB.

Verifiera att nyckelbaserad autentisering är inaktiverad

Om du vill verifiera att nyckelbaserad åtkomst är inaktiverad försöker du använda Azure SDK för att ansluta till Azure Cosmos DB for Table med hjälp av en ropc (resource-owner password credential). Det här försöket bör misslyckas. Om det behövs finns kodexempel för vanliga programmeringsspråk här.

using Azure.Data.Tables;
using Azure.Core;

string connectionString = "AccountEndpoint=<table-endpoint>;AccountKey=<key>;";

TableServiceClient client = new(connectionString);
const { TableServiceClient } = require('@azure/data-tables');

const connectionString = 'AccountEndpoint=<table-endpoint>;AccountKey=<key>;';

const client = new TableServiceClient(connectionString);
import { TableServiceClient } from '@azure/data-tables';

let connectionString: string = 'AccountEndpoint=<table-endpoint>;AccountKey=<key>;';

const client: TableServiceClient = new TableServiceClient(connectionString);
from azure.data.tables import TableServiceClient

connection_string = "AccountEndpoint=<table-endpoint>;AccountKey=<key>;"

client = TableServiceClient(endpoint, connection_string)
package main

import (
    "github.com/Azure/azure-sdk-for-go/sdk/data/aztables"
)

const connectionString = "AccountEndpoint=<table-endpoint>;AccountKey=<key>;"

func main() {
  client, _ := aztables.NewServiceClientFromConnectionString(connectionString, nil)
}
import com.azure.data.tables.TableServiceClient;
import com.azure.data.tables.TableServiceClientBuilder;

public class Table{
    public static void main(String[] args){
        TableServiceClient tableServiceClient = new TableServiceClientBuilder()
            .connectionString("AccountEndpoint=<table-endpoint>;AccountKey=<key>;")
            .buildClient();
    }
}

Bevilja rollbaserad åtkomst för kontrollplan

Kontrollplansåtkomst syftar på möjligheten att hantera resurser för en Azure-tjänst utan att hantera data. Azure Cosmos DB-kontrollplansåtkomst kan till exempel omfatta möjligheten att:

  • Läsa alla konto- och resursmetadata
  • Läsa och återskapa kontonycklar och anslutningssträngar
  • Utföra kontosäkerhetskopior och återställning
  • Starta och spåra dataöverföringsjobb
  • Hantera databaser och containrar
  • Ändra kontoegenskaper

Viktigt!

I Azure Cosmos DB behöver du åtkomst till kontrollplanen för att hantera naturliga dataplansrollbaserade åtkomstkontroll-definitioner och tilldelningar. Eftersom rollbaserad åtkomstkontrollmekanism för Azure Cosmos DB-dataplanet är inbyggd behöver du åtkomst till kontrollplanet för att skapa definitioner och tilldelningar och lagra dem som resurser i ett Azure Cosmos DB-konto.

Först måste du förbereda en rolldefinition med en lista över actions för att bevilja åtkomst för att hantera kontoresurser i Azure Cosmos DB. I den här guiden förbereder du en inbyggd och anpassad roll. Tilldela sedan den nyligen definierade rollen till en identitet så att dina program kan komma åt resurser i Azure Cosmos DB.

  1. Visa en lista över alla rolldefinitioner som är associerade med ditt Azure Cosmos DB-konto med hjälp av az role definition list.

    az role definition list \
        --name "Cosmos DB Operator"
    
  2. Granska utdata och leta upp rolldefinitionen med namnet Cosmos DB Operator. 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.

    [
      {
        "assignableScopes": [
          "/"
        ],
        "description": "Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.",
        "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa",
        "name": "230815da-be43-4aae-9cb4-875f7bd000aa",
        "permissions": [
          {
            "actions": [
              "Microsoft.DocumentDb/databaseAccounts/*",
              "Microsoft.Insights/alertRules/*",
              "Microsoft.Authorization/*/read",
              "Microsoft.ResourceHealth/availabilityStatuses/read",
              "Microsoft.Resources/deployments/*",
              "Microsoft.Resources/subscriptions/resourceGroups/read",
              "Microsoft.Support/*",
              "Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action"
            ],
            "condition": null,
            "conditionVersion": null,
            "dataActions": [],
            "notActions": [
              "Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*",
              "Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*",
              "Microsoft.DocumentDB/databaseAccounts/regenerateKey/*",
              "Microsoft.DocumentDB/databaseAccounts/listKeys/*",
              "Microsoft.DocumentDB/databaseAccounts/listConnectionStrings/*",
              "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write",
              "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/delete",
              "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write",
              "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/delete",
              "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write",
              "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/delete",
              "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write",
              "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/delete"
            ],
            "notDataActions": []
          }
        ],
        "roleName": "Cosmos DB Operator",
        "roleType": "BuiltInRole",
        "type": "Microsoft.Authorization/roleDefinitions",
      }
    ]
    

    Anmärkning

    I det här exemplet id skulle värdet vara /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet. Identifieraren (230815da-be43-4aae-9cb4-875f7bd000aa) är dock globalt unik för alla rolldefinitioner i Azure.

  3. Använd az group show för att hämta metadata för din aktuella resursgrupp.

    az group show \
        --name "<name-of-existing-resource-group>"
    
  4. Observera utdata från föregående kommando. Registrera värdet för id-egenskapen för denna resursgrupp eftersom det behövs i nästa steg.

    {
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example",
      "location": "westus",
      "name": "msdocs-identity-example",
      "type": "Microsoft.Resources/resourceGroups"
    }
    

    Anmärkning

    I det här exemplet id skulle värdet vara /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet. Den här strängen är ett trunkerat exempel på utdata.

  5. Skapa en ny JSON-fil med namnet role-definition.json. I filen skapar du den här resursdefinitionen som anger de värden som anges här. För listan AssignableScopes lägger du till egenskapen för id resursgruppen som registrerades i föregående steg.

    {
      "Name": "Azure Cosmos DB Control Plane Owner",
      "IsCustom": true,
      "Description": "Can perform all control plane actions for an Azure Cosmos DB account.",
      "Actions": [
        "Microsoft.DocumentDb/*"
      ],
      "AssignableScopes": [
        "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
      ]
    }
    

    Anmärkning

    I det här exemplet används värdet /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example som registrerades från föregående steg. Din faktiska resursidentifierare kan vara annorlunda.

  6. Skapa en ny rolldefinition med hjälp av az role definition create. Använd filenrole-definition.json som indata för --role-definition argumentet.

    az role definition create \
        --role-definition role-definition.json
    
  7. Granska utdata från kommandot för att skapa definitioner. 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.

    {
      "assignableScopes": [
        "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
      ],
      "description": "Can perform all control plane actions for an Azure Cosmos DB account.",
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1",
      "name": "e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5",
      "permissions": [
        {
          "actions": [
            "Microsoft.DocumentDb/*"
          ]
        }
      ],
      "roleName": "Azure Cosmos DB Control Plane Owner",
      "roleType": "CustomRole"
    }
    

    Anmärkning

    I det här exemplet id skulle värdet vara /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet. Det här exemplet är en delmängd av den typiska JSON som matas ut från distributionen för tydlighetens skull.

  8. Använd az group show för att hämta metadata för din aktuella resursgrupp igen.

    az group show \
        --name "<name-of-existing-resource-group>"
    
  9. Observera utdata från föregående kommando. Registrera värdet för id-egenskapen för denna resursgrupp eftersom det behövs i nästa steg.

    {
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example",
      "location": "westus",
      "name": "msdocs-identity-example",
      "type": "Microsoft.Resources/resourceGroups"
    }
    

    Anmärkning

    I det här exemplet id skulle värdet vara /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet. Den här strängen är ett trunkerat exempel på utdata.

  10. Tilldela den nya rollen med .az role assignment create Använd resursgruppens identifierare för --scope argumentet, rollens identifierare för -role argumentet och den unika identifieraren för din identitet till --assignee argumentet.

    az role assignment create \
        --assignee "<your-principal-identifier>" \
        --role "subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1" \
        --scope "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
    

    Anmärkning

    I det här exempelkommandot ställdes scope in på det fiktiva exemplet /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example som beskrivs i exemplet från föregående steg. Resursgruppens identifierare skulle skilja sig från det här exemplet. role var också inställd på det fiktiva /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1. Återigen skulle rollidentifieraren vara distinkt.

  11. Observera utdata från kommandot. Utdata innehåller en unik identifierare för tilldelningen i egenskapen id .

    {
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1",
      "name": "ffffffff-5555-6666-7777-aaaaaaaaaaaa",
      "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
      "resourceGroup": "msdocs-identity-example",
      "roleDefinitionId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1",
      "scope": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example",
      "type": "Microsoft.Authorization/roleAssignments"
    }
    

    Anmärkning

    I det här exemplet är idegenskapen /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 , vilket är ett annat fiktivt exempel.

  12. Upprepa de här stegen för att bevilja åtkomst till kontot från andra identiteter som du vill använda.

    Tips/Råd

    Du kan upprepa de här stegen för så många identiteter som du vill. Normalt 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 ge program åtkomst till data med hjälp av en hanterad identitet.

  1. Visa en lista över alla rolldefinitioner som är associerade med ditt Azure Cosmos DB-konto med hjälp av az role definition list.

    az role definition list \
        --name "Cosmos DB Operator"
    
  2. Granska utdata och leta upp rolldefinitionen med namnet Cosmos DB Operator. 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.

    [
      {
        "assignableScopes": [
          "/"
        ],
        "description": "Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.",
        "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa",
        "name": "230815da-be43-4aae-9cb4-875f7bd000aa",
        "permissions": [
          {
            "actions": [
              "Microsoft.DocumentDb/databaseAccounts/*",
              "Microsoft.Insights/alertRules/*",
              "Microsoft.Authorization/*/read",
              "Microsoft.ResourceHealth/availabilityStatuses/read",
              "Microsoft.Resources/deployments/*",
              "Microsoft.Resources/subscriptions/resourceGroups/read",
              "Microsoft.Support/*",
              "Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action"
            ],
            "condition": null,
            "conditionVersion": null,
            "dataActions": [],
            "notActions": [
              "Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*",
              "Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*",
              "Microsoft.DocumentDB/databaseAccounts/regenerateKey/*",
              "Microsoft.DocumentDB/databaseAccounts/listKeys/*",
              "Microsoft.DocumentDB/databaseAccounts/listConnectionStrings/*",
              "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write",
              "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/delete",
              "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write",
              "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/delete",
              "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write",
              "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/delete",
              "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write",
              "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/delete"
            ],
            "notDataActions": []
          }
        ],
        "roleName": "Cosmos DB Operator",
        "roleType": "BuiltInRole",
        "type": "Microsoft.Authorization/roleDefinitions",
      }
    ]
    

    Anmärkning

    I det här exemplet id skulle värdet vara /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet. Identifieraren (230815da-be43-4aae-9cb4-875f7bd000aa) är dock globalt unik för alla rolldefinitioner i Azure.

  3. Skapa en ny Bicep-fil för att definiera rolldefinitionen. Ge filen namnet control-plane-role-definition.bicep. Lägg till dessa actions i definitionen:

    Description
    Microsoft.DocumentDb/* Aktiverar alla möjliga åtgärder.
    metadata description = 'Create RBAC definition for control plane access to Azure Cosmos DB.'
    
    @description('Name of the role definition.')
    param roleDefinitionName string = 'Azure Cosmos DB Control Plane Owner'
    
    @description('Description of the role definition.')
    param roleDefinitionDescription string = 'Can perform all control plane actions for an Azure Cosmos DB account.'
    
    resource definition 'Microsoft.Authorization/roleDefinitions@2022-04-01' = {
      name: guid(subscription().id, resourceGroup().id, roleDefinitionName)
      scope: resourceGroup()
      properties: {
        roleName: roleDefinitionName
        description: roleDefinitionDescription
        type: 'CustomRole'
        permissions: [
          {
            actions: [
              'Microsoft.DocumentDb/*'
            ]
          }
        ]
        assignableScopes: [
          resourceGroup().id
        ]
      }
    }
    
    output definitionId string = definition.id
    
  4. Distribuera Bicep-mallen med az deployment group create. Ange namnet på Bicep-mallen och Azure-resursgruppen.

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --template-file control-plane-role-definition.bicep
    
  5. Granska utdata från distributionen. Utdata innehåller den unika identifieraren för rolldefinitionen i egenskapen properties.outputs.definitionId.value . Registrera det här värdet som det krävs för att använda i tilldelningssteget senare i den här guiden.

    {
      "properties": {
        "outputs": {
          "definitionId": {
            "type": "String",
            "value": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1"
          }
        }
      }
    }
    

    Anmärkning

    I det här exemplet id skulle värdet vara /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet. Det här exemplet är en delmängd av den typiska JSON som matas ut från distributionen för tydlighetens skull.

  6. Skapa en ny Bicep-fil för att definiera rolltilldelningen. Ge filen namnet control-plane-role-assignment.bicep.

    metadata description = 'Assign RBAC role for control plane access to Azure Cosmos DB.'
    
    @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 assignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
      name: guid(subscription().id, resourceGroup().id, roleDefinitionId, identityId)
      scope: resourceGroup()
      properties: {
        roleDefinitionId: roleDefinitionId
        principalId: identityId
      }
    }
    
  7. Skapa en ny Bicep-parameterfil med namnet control-plane-role-assignment.bicepparam. I den här parameterfilen; tilldela de tidigare registrerade rolldefinitionsidentifierarna till parametern roleDefinitionId och den unika identifieraren för din identitet till parametern identityId .

    using './control-plane-role-assignment.bicep'
    
    param roleDefinitionId = '<id-of-new-role-definition>'
    param identityId = '<id-of-existing-identity>'
    
  8. Distribuera den här Bicep-mallen med az deployment group create.

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --parameters control-plane-role-assignment.bicepparam \
        --template-file control-plane-role-assignment.bicep
    
  9. Upprepa de här stegen för att bevilja åtkomst till kontot från andra identiteter som du vill använda.

    Tips/Råd

    Du kan upprepa de här stegen för så många identiteter som du vill. Normalt 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 ge program åtkomst till data med hjälp av en hanterad identitet.

  1. Logga in på Azure Portal (https://portal.azure.com).

  2. Ange Resursgrupp i det globala sökfältet.

    Skärmbild av det globala sökfältet i Azure-portalen.

  3. I Tjänster väljer du Resursgrupper.

    Skärmbild av alternativet Resursgrupper som valts i sökmenyn.

  4. I fönstret Resursgrupper väljer du din befintliga resursgrupp.

    Skärmbild av en befintlig resursgrupp i listan över resursgrupper för prenumerationen.

    Anmärkning

    Den här skärmbilden innehåller resursgruppen msdocs-identity-example. Det faktiska resursgruppsnamnet kan vara annorlunda.

  5. I fönstret för resursgruppen väljer du Åtkomstkontroll (IAM) på tjänstmenyn.

    Skärmbild av alternativet Åtkomstkontroll (IAM) på tjänstmenyn för en resursgrupp.

  6. I fönstret Åtkomstkontroll (IAM) väljer du Roller.

    Skärmbild av alternativet Roller i fönstret Åtkomstkontroll (IAM).

  7. I avsnittet Roller använder du sökfrasen Cosmos DB och letar upp rolldefinitionen Cosmos DB-operatör . Välj sedan alternativet Visa som är associerat med den definitionen.

    Skärmbild av en lista över rolldefinitioner i det aktuella tilldelningsbara omfånget filtrerat för att endast inkludera definitioner med

  8. I dialogrutan Rolldefinition för Cosmos DB-operatör observerar du de åtgärder som tilldelats som en del av den här rolldefinitionen.

    Skärmbild av dialogrutan Cosmos DB-operator med information om den inbyggda rolldefinitionen.

  9. Stäng dialogrutan för rolldefinition för Cosmos DB-operatör .

  10. I fönstret Åtkomstkontroll (IAM) väljer du Lägg till. Välj sedan Lägg till anpassad roll.

    Skärmbild av alternativet Lägg till anpassad roll i menyn Åtkomstkontroll (IAM) för alternativet Lägg till.

  11. I fönstret Grundläggande konfigurerar du följande alternativ och väljer sedan Nästa:

    Värde
    Namn på anpassad roll Azure Cosmos DB Control Plane Owner
    Beskrivning Can perform all control plane actions for an Azure Cosmos DB account.
    Baslinjebehörigheter Börja från början

    Skärmbild av fönstret Grundläggande för att lägga till en anpassad roll.

  12. I fönstret Behörigheter väljer du Lägg till behörigheter. Sök sedan efter DocumentDB i behörighetsdialogrutan. Välj slutligen alternativet Microsoft.DocumentDB .

    Skärmbild av fönstret Behörigheter för att lägga till en anpassad roll.

    Skärmbild av dialogrutan Lägg till behörigheter som filtrerats till behörigheter relaterade till

  13. I dialogrutan Behörigheter väljer du alla åtgärder för Microsoft.DocumentDB. Välj sedan Lägg till för att återgå till fönstret *Behörigheter .

    Skärmbild av alla behörigheter som valts för

  14. Gå tillbaka till fönstret Behörigheter och se listan med behörigheter. Välj sedan Granska + skapa.

    Skärmbild av fönstret Behörigheter med flera behörigheter som har lagts till i listan för en anpassad roll.

  15. I fönstret Granska + skapa granskar du de angivna alternativen för den nya rolldefinitionen. Välj slutligen Skapa.

    Skärmbild av fönstret Granska + skapa för att lägga till en anpassad roll.

  16. Vänta tills portalen har skapat rolldefinitionen.

  17. I fönstret Åtkomstkontroll (IAM) väljer du Lägg till och sedan Lägg till rolltilldelning.

    Skärmbild av alternativet Lägg till rolltilldelning på menyn Åtkomstkontroll (IAM) för alternativet Lägg till.

  18. I fönstret Roll söker Azure Cosmos DB du efter och väljer sedan rollen Kontrollplansägare för Azure Cosmos DB som skapades tidigare i den här guiden. Välj sedan Nästa.

    Skärmbild av fönstret Roll för att lägga till en rolltilldelning.

    Tips/Råd

    Du kan också filtrera listan med roller så att den endast innehåller anpassade roller.

  19. I fönstret Medlemmar väljer du alternativet Välj medlemmar . I medlemsdialogrutan väljer du den identitet som du vill bevilja den här åtkomstnivån för ditt Azure Cosmos DB-konto och använder sedan alternativet Välj för att bekräfta ditt val.

    Skärmbild av fönstret Medlemmar för att lägga till en rolltilldelning.

    Skärmbild av dialogrutan för identitetsval för att lägga till en rolltilldelning.

    Anmärkning

    Den här skärmbilden visar en exempelanvändare med namnet "Kai Carter" med huvudnamnet kai@adventure-works.com.

  20. Gå tillbaka till fönstret Medlemmar , granska de valda medlemmarna och välj sedan Granska + tilldela.

    Skärmbild av fönstret Medlemmar med en vald identitet för en rolltilldelning.

  21. I fönstret Granska + tilldela granskar du de angivna alternativen för den nya rolltilldelningen. Välj slutligen Granska + tilldela.

    Skärmbild av fönstret Granska + skapa för en rolltilldelning.

  22. Vänta tills portalen har skapat rolltilldelningen.

  1. Använd Get-AzRoleDefinition för att lista alla rolldefinitioner som är associerade med ditt Azure Cosmos DB-konto.

    $parameters = @{
        Name = "Cosmos DB Operator"
    }
    Get-AzRoleDefinition @parameters
    
  2. 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.

    Name             : Cosmos DB Operator
    Id               : 230815da-be43-4aae-9cb4-875f7bd000aa
    IsCustom         : False
    Description      : Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.
    Actions          : {Microsoft.DocumentDb/databaseAccounts/*, Microsoft.Insights/alertRules/*, Microsoft.Authorization/*/read, Microsoft.ResourceHealth/availabilityStatuses/read…}
    NotActions       : {Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*, Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*, Microsoft.DocumentDB/databaseAccounts/regenerateKey/*, Microsoft.DocumentDB/databaseAccounts/listKeys/*…}
    DataActions      : {}
    NotDataActions   : {}
    AssignableScopes : {/}
    

    Anmärkning

    I det här exemplet Id skulle värdet vara 230815da-be43-4aae-9cb4-875f7bd000aa. Identifieraren är globalt unik för alla rolldefinitioner i Azure.

  3. Använd Get-AzResourceGroup för att hämta metadata för din aktuella resursgrupp.

    $parameters = @{
        Name = "<name-of-existing-resource-group>"
    }
    Get-AzResourceGroup @parameters
    
  4. Observera utdata från föregående kommando. Registrera värdet för ResourceId-egenskapen för denna resursgrupp eftersom det behövs i nästa steg.

    ResourceGroupName : msdocs-identity-example
    Location          : westus
    ProvisioningState : Succeeded
    ResourceId        : /subscriptions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1/resourcegroups/msdocs-identity-example
    

    Anmärkning

    I det här exemplet ResourceId skulle värdet vara /subscriptions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1/resourcegroups/msdocs-identity-example. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet. Den här strängen är ett trunkerat exempel på typiska utdata.

  5. Importera först modulen Az.Resources . Skapa sedan ett nytt Microsoft.Azure.Commands.Resources.Models.Authorization.PSRoleDefinition objekt. I -objektet skapar du den här resursdefinitionen som anger de värden som anges här. För listan AssignableScopes lägger du till egenskapen för ResourceId resursgruppen som registrerades i föregående steg. Slutligen använder du rolldefinitionsobjektet som indata för parametern -RoleNew-AzRoleDefinition.

    Import-Module Az.Resources
    
    $parameters = @{
        TypeName = "Microsoft.Azure.Commands.Resources.Models.Authorization.PSRoleDefinition"
        Property = @{
            Name = "Azure Cosmos DB Control Plane Owner"
            Description = "Can perform all control plane actions for an Azure Cosmos DB account."
            IsCustom = $true
            Actions = @(
                "Microsoft.DocumentDb/*"
            )
            AssignableScopes = @(
                "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
            )
        }
    }
    $role = New-Object @parameters
    
    New-AzRoleDefinition -Role $role
    

    Anmärkning

    I det här exemplet används värdet /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example som registrerades från föregående steg. Din faktiska resursidentifierare kan vara annorlunda.

  6. Granska utdata från kommandot för att skapa definitioner. Utdata innehåller den unika identifieraren för rolldefinitionen i egenskapen Name . Registrera det här värdet som det krävs för att använda i tilldelningssteget senare i den här guiden.

    Name             : Azure Cosmos DB Control Plane Owner
    Id               : e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5
    IsCustom         : True
    Description      : Can perform all control plane actions for an Azure Cosmos DB account.
    Actions          : {Microsoft.DocumentDb/*}
    AssignableScopes : {/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example}
    

    Anmärkning

    I det här exemplet Name skulle värdet vara Azure Cosmos DB Control Plane Owner. Det här exemplet är en delmängd av de typiska utdata för distributionen för tydlighetens skull.

  7. Tilldela den nya rollen med .New-AzRoleAssignment Använd rollens namn för parametern RoleDefinitionName och den unika identifieraren för din identitet till parametern ObjectId .

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        ObjectId = "<your-principal-identifier>"
        RoleDefinitionName = "Azure Cosmos DB Control Plane Owner"
    }
    New-AzRoleAssignment @parameters
    
  8. Observera utdata från kommandot. Utdata innehåller en unik identifierare för tilldelningen i egenskapen RoleAssignmentId .

    RoleAssignmentName : ffffffff-5555-6666-7777-aaaaaaaaaaaa
    RoleAssignmentId   : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1
    Scope              : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
    DisplayName        : Kai Carter
    SignInName         : <kai@adventure-works.com>
    RoleDefinitionName : Azure Cosmos DB Control Plane Owner
    RoleDefinitionId   : e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5
    

    Anmärkning

    I det här exemplet är RoleAssignmentIdegenskapen /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 , vilket är ett annat fiktivt exempel. Det här exemplet är en delmängd av de typiska utdata för distributionen för tydlighetens skull.

  9. Upprepa de här stegen för att bevilja åtkomst till kontot från andra identiteter som du vill använda.

    Tips/Råd

    Du kan upprepa de här stegen för så många identiteter som du vill. Normalt 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 ge program åtkomst till data med hjälp av en hanterad identitet.

Viktigt!

Om du tilldelar en rolldefinition måste du redan ha den unika identifieraren för alla identiteter som du vill bevilja rollbaserad åtkomstkontrollbehörighet.

Verifiera rollbaserad åtkomst för kontrollplan i kod

Kontrollera att du har beviljat åtkomst korrekt med hjälp av programkod och Azure Management SDK.

using Azure.Identity;
using Azure.ResourceManager;

DefaultAzureCredential credential = new();

ArmClient client = new(credential);
const { CosmosDBManagementClient } = require('@azure/arm-cosmosdb');
const { DefaultAzureCredential } = require('@azure/identity');

const subscriptionId = "<subscription-id>";

const credential = new DefaultAzureCredential();

const client = new CosmosDBManagementClient(credential, subscriptionId);
import { CosmosDBManagementClient } from '@azure/arm-cosmosdb';
import { TokenCredential, DefaultAzureCredential } from '@azure/identity';

let subscriptionId: string = "<subscription-id>";

let credential: TokenCredential = new DefaultAzureCredential();

const client: CosmosDBManagementClient = new CosmosDBManagementClient(credential, subscriptionId);
from azure.mgmt.cosmosdb import CosmosDBManagementClient
from azure.identity import DefaultAzureCredential

subscription_id = "<subscription-id>"

credential = DefaultAzureCredential()

client = CosmosDBManagementClient(credential=credential, subscription=subscription_id)
package main

import (
    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/cosmos/armcosmos"
)

const subscriptionId = "<subscription-id>"

func main() {
    credential, _ := azidentity.NewDefaultAzureCredential(nil)
    
    client, _ := armcosmos.NewDatabaseClient(subscriptionId, credential, nil)
}
package com.example;

import com.azure.core.management.profile.AzureProfile;
import com.azure.core.management.AzureEnvironment;
import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.resourcemanager.cosmos.CosmosManager;

public class CosmosDB {
    public static void main(String[] args) {
        AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);
        DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
          .build();

        CosmosManager manager = CosmosManager.authenticate(credential, profile);
    }
}

Bevilja rollbaserad åtkomst för dataplanet

Dataplansåtkomst syftar på möjligheten att läsa och skriva data i en Azure-tjänst utan möjlighet att hantera resurser i kontot. Azure Cosmos DB-dataplansåtkomst kan till exempel omfatta möjligheten att:

  • Läs några konto- och resursmetadata
  • Skapa, läsa, uppdatera, korrigera och ta bort objekt
  • Utföra tabellfrågor
  • Läsa från containerns ändringsflöde
  • Köra lagrade procedurer
  • Hantera konflikter i konfliktflödet

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 tabell. I den här guiden förbereder du en inbyggd och anpassad roll. Tilldela sedan den nyligen definierade rollen till en identitet så att dina program kan komma åt data i Azure Cosmos DB for Table.

  1. Hämta först resursidentifieraren för det befintliga Azure Cosmos DB för tabellkontot med az cosmsodb show och lagra det i en variabel.

    resourceId=$( \
        az cosmosdb show \
            --resource-group "<name-of-existing-resource-group>" \
            --name "<name-of-existing-table-account>" \
            --query "id" \
            --output tsv \
    )
    
    az rest \
        --method "GET" \
        --url $resourceId/tableRoleDefinitions?api-version=2023-04-15
    
  2. Visa sedan en lista över alla rolldefinitioner som är associerade med ditt Azure Cosmos DB för tabellkonto med hjälp av az rest. Granska slutligen utdata och leta upp rolldefinitionen med namnet Standarddatadeltagare i Cosmos DB. 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.

    [
      ...,
      {
        "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-table/tableRoleDefinitions/00000000-0000-0000-0000-000000000002",
        "name": "00000000-0000-0000-0000-000000000002",
        "properties": {
          "assignableScopes": [
            "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-table"
          ],
          "permissions": [
            {
              "dataActions": [
                "Microsoft.DocumentDB/databaseAccounts/readMetadata",
                "Microsoft.DocumentDB/databaseAccounts/tables/*",
                "Microsoft.DocumentDB/databaseAccounts/tables/containers/entities/*"
              ],
              "notDataActions": []
            }
          ],
          "roleName": "Cosmos DB Built-in Data Contributor",
          "type": "BuiltInRole"
        },
        "type": "Microsoft.DocumentDB/databaseAccounts/tableRoleDefinitions"
      }
      ...
    ]
    

    Anmärkning

    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-table/tableRoleDefinitions/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. Denna exempelutdata är avkortad.

  3. Skapa en ny JSON-fil med namnet role-definition.json. I den här filen skapar du en resursdefinition som anger de dataåtgärder som anges här:

    Description
    Microsoft.DocumentDB/databaseAccounts/readMetadata Kan läsa metadata på kontonivå
    Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/* Kan utföra dataåtgärder på containernivå
    Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/* Kan utföra alla åtgärder på objekt med containrar
    {
      "properties": {
        "roleName": "Azure Cosmos DB for Table Data Plane Owner",
        "type": "CustomRole",
        "assignableScopes": [
          "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sidandrews-rbac/providers/Microsoft.DocumentDB/databaseAccounts/sidandrews-rbac-table/"
        ],
        "permissions": [
          {
            "dataActions": [
              "Microsoft.DocumentDB/databaseAccounts/readMetadata",
              "Microsoft.DocumentDB/databaseAccounts/tables/*",
              "Microsoft.DocumentDB/databaseAccounts/tables/containers/entities/*"
            ]
          }
        ]
      }
    }
    
  4. Skapa eller uppdatera nu en rolldefinition med hjälp av az cosmosdb show och az rest tillsammans för att utfärda en HTTP-begäran PUT . Som en del av den här begäran anger du ett unikt GUID för din rolldefinition.

    resourceId=$( \
        az cosmosdb show \
            --resource-group "<name-of-existing-resource-group>" \
            --name "<name-of-existing-table-account>" \
            --query "id" \
            --output tsv \
    )
    
    az rest \
        --method "PUT" \
        --url $resourceId/tableRoleDefinitions/d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4?api-version=2023-04-15 \
        --body @role-definition.json
    

    Anmärkning

    I det här exemplet var det unika GUID som angavs d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4. Du kan ange ett unikt GUID för din egen rolldefinition.

  5. Utdata bör nu indikera att begäran är i kö. Vänta nu tills distributionen av den kodade rolldefinitionen har slutförts. Den här uppgiften kan ta några minuter.

    {
      "status": "Enqueued"
    }
    
  6. Kontrollera slutligen listan över rolldefinitioner som använder az rest igen.

    resourceId=$( \
        az cosmosdb show \
            --resource-group "<name-of-existing-resource-group>" \
            --name "<name-of-existing-table-account>" \
            --query "id" \
            --output tsv \
    )
    
    az rest \
        --method "GET" \
        --url $resourceId/tableRoleDefinitions?api-version=2023-04-15
    
  7. 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-resource-group>" \
        --query "{id:id}"
    
  8. Observera utdata från föregående kommando. Registrera värdet för egenskapen id för det här kontot eftersom 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-table"
    }
    

    Anmärkning

    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-table. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet.

  9. Skapa en ny JSON-fil med namnet role-assignment.json. I JSON-filen lägger du till den unika identifieraren för din identitet och unika identifierare för kontoresursen.

    {
      "properties": {
        "roleDefinitionId": "<account-resource-id>/tableRoleDefinitions/d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4",
        "scope": "<account-resource-id>",
        "principalId": "<id-of-existing-identity>"
      }
    }
    

    Anmärkning

    I det här exemplet var det unika GUID som angavs d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4. Du kan använda det unika GUID som du använde tidigare för din egen rolldefinition.

    Tips/Råd

    I Azure Cosmos DB:s interna implementering av rollbaserad åtkomstkontroll refererar omfånget till kornigheten för resurser i ett konto som du vill att behörigheten ska tillämpas för. På den högsta nivån kan du begränsa rollbaserad åtkomstkontrolltilldelning för dataplanet till hela kontot med det största omfånget. Det här omfånget omfattar alla databaser och containrar i kontot:

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/
    

    Eller så kan du omfångsbegränsa dataplanets rolltilldelning till en specifik databas:

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>
    

    Slutligen kan du begränsa tilldelningen till en enda container, det mest detaljerade omfånget:

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>/colls/<container-name>
    

    I många fall kan du använda det relativa omfånget i stället för det fullständigt kvalificerade omfånget. Du kan till exempel använda det här relativa omfånget för att bevilja rollbaserad åtkomstkontrollbehörighet för dataplanet till en specifik databas och container från ett Azure CLI-kommando:

    /dbs/<database-name>/colls/<container-name>
    

    Du kan också ge universell åtkomst till alla databaser och containrar med hjälp av det relativa omfånget:

    /
    
  10. Skapa eller uppdatera nu en rolltilldelning med hjälp av az cosmosdb show och az rest tillsammans för att utfärda en HTTP-begäran PUT . Som en del av den här begäran anger du ett unikt GUID för din rolltilldelning.

    resourceId=$( \
        az cosmosdb show \
            --resource-group "<name-of-existing-resource-group>" \
            --name "<name-of-existing-table-account>" \
            --query "id" \
            --output tsv \
    )
    
    az rest \
        --method "PUT" \
        --url $resourceId/tableRoleAssignments/e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5?api-version=2023-04-15 \
        --body @role-assignment.json
    

    Anmärkning

    I det här exemplet var det unika GUID som angavs e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5. Du kan ange ett unikt GUID för din egen rolltilldelning.

  1. Hämta först resursidentifieraren för det befintliga Azure Cosmos DB för tabellkontot med az cosmsodb show och lagra det i en variabel.

    resourceId=$( \
        az cosmosdb show \
            --resource-group "<name-of-existing-resource-group>" \
            --name "<name-of-existing-table-account>" \
            --query "id" \
            --output tsv \
    )
    
    az rest \
        --method "GET" \
        --url $resourceId/tableRoleDefinitions?api-version=2023-04-15
    
  2. Visa sedan en lista över alla rolldefinitioner som är associerade med ditt Azure Cosmos DB för tabellkonto med hjälp av az rest. Granska slutligen utdata och leta upp rolldefinitionen med namnet Standarddatadeltagare i Cosmos DB. 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.

    [
      ...,
      {
        "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-table/tableRoleDefinitions/00000000-0000-0000-0000-000000000002",
        "name": "00000000-0000-0000-0000-000000000002",
        "properties": {
          "assignableScopes": [
            "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-table"
          ],
          "permissions": [
            {
              "dataActions": [
                "Microsoft.DocumentDB/databaseAccounts/readMetadata",
                "Microsoft.DocumentDB/databaseAccounts/tables/*",
                "Microsoft.DocumentDB/databaseAccounts/tables/containers/entities/*"
              ],
              "notDataActions": []
            }
          ],
          "roleName": "Cosmos DB Built-in Data Contributor",
          "type": "BuiltInRole"
        },
        "type": "Microsoft.DocumentDB/databaseAccounts/tableRoleDefinitions"
      }
      ...
    ]
    

    Anmärkning

    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-table/tableRoleDefinitions/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. Denna exempelutdata är avkortad.

  3. Skapa en ny Bicep-fil för att definiera rolldefinitionen. Ge filen namnet data-plane-role-definition.bicep. Lägg till dessa dataActions i definitionen:

    Description
    Microsoft.DocumentDB/databaseAccounts/readMetadata
    Microsoft.DocumentDB/databaseAccounts/tables/*
    Microsoft.DocumentDB/databaseAccounts/tables/containers/entities/*
    metadata description = 'Create RBAC definition for data plane access to Azure Cosmos DB for Table.'
    
    @description('Name of the Azure Cosmos DB for Table account.')
    param accountName string
    
    @description('Name of the role definition.')
    param roleDefinitionName string = 'API for Table Data Plane Owner'
    
    resource account 'Microsoft.DocumentDB/databaseAccounts@2023-04-15' existing = {
      name: accountName
    }
    
    resource definition 'Microsoft.DocumentDB/databaseAccounts/tableRoleDefinitions@2023-04-15' = {
      name: guid('table-role-definition', account.id)
      parent: account
      properties: {
        roleName: roleDefinitionName
        type: 'CustomRole'
        assignableScopes: [
          account.id
        ]
        permissions: [
          {
            dataActions: [
              'Microsoft.DocumentDB/databaseAccounts/readMetadata'
              'Microsoft.DocumentDB/databaseAccounts/tables/*'
              'Microsoft.DocumentDB/databaseAccounts/tables/containers/entities/*'
            ]
          }
        ]
      }
    }
    
    output definitionId string = definition.id
    

    Tips/Råd

    I Azure Cosmos DB:s interna implementering av rollbaserad åtkomstkontroll refererar omfånget till kornigheten för resurser i ett konto som du vill att behörigheten ska tillämpas för. På den högsta nivån kan du begränsa rollbaserad åtkomstkontrolltilldelning för dataplanet till hela kontot med det största omfånget. Det här omfånget omfattar alla databaser och containrar i kontot:

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/
    

    Eller så kan du omfångsbegränsa dataplanets rolltilldelning till en specifik databas:

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>
    

    Slutligen kan du begränsa tilldelningen till en enda container, det mest detaljerade omfånget:

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>/colls/<container-name>
    

    I många fall kan du använda det relativa omfånget i stället för det fullständigt kvalificerade omfånget. Du kan till exempel använda det här relativa omfånget för att bevilja rollbaserad åtkomstkontrollbehörighet för dataplanet till en specifik databas och container från ett Azure CLI-kommando:

    /dbs/<database-name>/colls/<container-name>
    

    Du kan också ge universell åtkomst till alla databaser och containrar med hjälp av det relativa omfånget:

    /
    
  4. Skapa en ny Bicep-parameterfil med namnet data-plane-role-definition.bicepparam. I den här parameterfilen tilldelar du namnet på ditt befintliga Azure Cosmos DB för tabellkonto till parametern accountName .

    using './data-plane-role-definition.bicep'
    
    param accountName = '<name-of-existing-table-account>'
    
  5. Distribuera Bicep-mallen med az deployment group create. Ange namnet på Bicep-mallen, parameterfilen och Azure-resursgruppen.

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --parameters data-plane-role-definition.bicepparam \
        --template-file data-plane-role-definition.bicep
    
  6. Granska utdata från distributionen. Utdata innehåller den unika identifieraren för rolldefinitionen i egenskapen properties.outputs.definitionId.value . Registrera det här värdet som det krävs för att använda i tilldelningssteget senare i den här guiden.

    {
      "properties": {
        "outputs": {
          "definitionId": {
            "type": "String",
            "value": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-table-account/tableRoleDefinitions/dddddddd-9999-0000-1111-eeeeeeeeeeee"
          }
        }
      }
    }
    

    Anmärkning

    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-table-account/tableRoleDefinitions/dddddddd-9999-0000-1111-eeeeeeeeeeee. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet. Det här exemplet är en delmängd av den typiska JSON som matas ut från distributionen för tydlighetens skull.

  7. Skapa en annan Bicep-fil för att tilldela en roll till en identitet. Ge filen namnet data-plane-role-assignment.bicep.

    metadata description = 'Assign RBAC role for data plane access to Azure Cosmos DB for Table.'
    
    @description('Name of the Azure Cosmos DB for Table 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@2023-04-15' existing = {
      name: accountName
    }
    
    resource assignment 'Microsoft.DocumentDB/databaseAccounts/tableRoleAssignments@2023-04-15' = {
      name: guid(roleDefinitionId, identityId, account.id)
      parent: account
      properties: {
        principalId: identityId
        roleDefinitionId: roleDefinitionId
        scope: account.id
      }
    }
    
    output id string = assignment.id
    
  8. Skapa en ny Bicep-parameterfil med namnet data-plane-role-assignment.bicepparam. I den här parameterfilen; tilldela namnet på ditt befintliga Azure Cosmos DB för tabellkonto 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-table-account>'
    param roleDefinitionId = '<id-of-new-role-definition>'
    param identityId = '<id-of-existing-identity>'
    
  9. Distribuera den här 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
    
  10. Upprepa de här stegen för att bevilja åtkomst till kontot från andra identiteter som du vill använda.

    Tips/Råd

    Du kan upprepa de här stegen för så många identiteter som du vill. Vanligtvis upprepas de här stegen minst för att ge utvecklare åtkomst till ett konto med hjälp av sin mänskliga identitet och för att ge program åtkomst till data med hjälp av en hanterad identitet.

  1. Använd Get-AzCosmosDBAccount för att hämta resursidentifieraren för det befintliga Azure Cosmos DB för tabellkontot och lagra det i en variabel.

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        Name = "<name-of-existing-table-account>"
    }
    $resourceId = (
        Get-AzCosmosDBAccount @parameters |
            Select-Object -Property Id -First 1
    ).Id
    
    $parameters = @{
      Path = "$resourceId/tableRoleDefinitions?api-version=2023-04-15"
      Method = "GET"
    }
    Invoke-AzRestMethod @parameters
    
  2. Invoke-AzRestMethod Använd sedan för att lista alla rolldefinitioner som är associerade med ditt Azure Cosmos DB för tabellkonto. 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.

    StatusCode : 200
    Content    : {
        "value": [
          ...,
          {
            "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-table/tableRoleDefinitions/00000000-0000-0000-0000-000000000002",
            "name": "00000000-0000-0000-0000-000000000002",
            "properties": {
              "assignableScopes": [
                "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-table"
              ],
              "permissions": [
                {
                  "dataActions": [
                    "Microsoft.DocumentDB/databaseAccounts/readMetadata",
                    "Microsoft.DocumentDB/databaseAccounts/tables/*",
                    "Microsoft.DocumentDB/databaseAccounts/tables/containers/entities/*"
                  ],
                  "notDataActions": []
                }
              ],
              "roleName": "Cosmos DB Built-in Data Contributor",
              "type": "BuiltInRole"
            },
            "type": "Microsoft.DocumentDB/databaseAccounts/tableRoleDefinitions"
          }
          ...
          ]
        },
        ...
      ]
    }
    

    Anmärkning

    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-table/tableRoleDefinitions/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. Denna exempelutdata är avkortad.

  3. Skapa eller uppdatera din rolldefinition med hjälp av Get-AzCosmosDBAccount och Invoke-AzRestMethod tillsammans för att utfärda en HTTP-begäran PUT . Som en del av den här begäran anger du också ett unikt GUID för din rolldefinition. Skapa slutligen en nyttolast för resursdefinition som anger de dataåtgärder som anges här:

    Description
    Microsoft.DocumentDB/databaseAccounts/readMetadata Kan läsa metadata på kontonivå
    Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/* Kan utföra dataåtgärder på containernivå
    Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/* Kan utföra alla åtgärder på objekt med containrar
    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        Name = "<name-of-existing-table-account>"
    }
    $resourceId = (
        Get-AzCosmosDBAccount @parameters |
            Select-Object -Property Id -First 1
    ).Id
    
    $payload = @{
      properties = @{
        roleName = "Azure Cosmos DB for Table Data Plane Owner"
        type = "CustomRole"
        assignableScopes = @(
          "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sidandrews-rbac/providers/Microsoft.DocumentDB/databaseAccounts/sidandrews-rbac-table/"
        )
        permissions = @(
          @{
            dataActions = @(
              "Microsoft.DocumentDB/databaseAccounts/readMetadata",
              "Microsoft.DocumentDB/databaseAccounts/tables/*",
              "Microsoft.DocumentDB/databaseAccounts/tables/containers/entities/*"
            )
          }
        )
      }
    }
    
    $parameters = @{
      Path = "$resourceId/tableRoleDefinitions/d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4?api-version=2023-04-15"
      Method = "PUT"
      Payload = $payload | ConvertTo-Json -Depth 4
    }
    Invoke-AzRestMethod @parameters
    

    Anmärkning

    I det här exemplet var det unika GUID som angavs d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4. Du kan ange ett unikt GUID för din egen rolldefinition.

    Tips/Råd

    I Azure Cosmos DB:s interna implementering av rollbaserad åtkomstkontroll refererar omfånget till kornigheten för resurser i ett konto som du vill att behörigheten ska tillämpas för. På den högsta nivån kan du begränsa rollbaserad åtkomstkontrolltilldelning för dataplanet till hela kontot med det största omfånget. Det här omfånget omfattar alla databaser och containrar i kontot:

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/
    

    Eller så kan du omfångsbegränsa dataplanets rolltilldelning till en specifik databas:

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>
    

    Slutligen kan du begränsa tilldelningen till en enda container, det mest detaljerade omfånget:

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>/colls/<container-name>
    

    I många fall kan du använda det relativa omfånget i stället för det fullständigt kvalificerade omfånget. Du kan till exempel använda det här relativa omfånget för att bevilja rollbaserad åtkomstkontrollbehörighet för dataplanet till en specifik databas och container från ett Azure CLI-kommando:

    /dbs/<database-name>/colls/<container-name>
    

    Du kan också ge universell åtkomst till alla databaser och containrar med hjälp av det relativa omfånget:

    /
    
  4. Utdata ska returneras med statuskoden 200. Vänta nu tills distributionen av den kodade rolldefinitionen har slutförts. Den här uppgiften kan ta några minuter.

    StatusCode : 200
    ...
    
  5. Kontrollera slutligen listan över rolldefinitioner som använder Invoke-AzRestMethod igen.

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        Name = "<name-of-existing-table-account>"
    }
    $resourceId = (
        Get-AzCosmosDBAccount @parameters |
            Select-Object -Property Id -First 1
    ).Id
    
    $parameters = @{
      Path = "$resourceId/tableRoleDefinitions?api-version=2023-04-15"
      Method = "GET"
    }
    Invoke-AzRestMethod @parameters
    
  6. AnvändGet-AzCosmosDBAccount för att hämta den unika identifieraren för ditt aktuella konto.

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        Name = "<name-of-existing-table-account>"
    }
    Get-AzCosmosDBAccount @parameters | Select -Property Id
    
  7. Observera utdata från föregående kommando. Registrera värdet för egenskapen Id för det här kontot eftersom 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-table
    

    Anmärkning

    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-table. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet.

  8. Skapa eller uppdatera nu en rolltilldelning med hjälp av Get-AzCosmosDBAccount och Invoke-AzRestMethod tillsammans för att utfärda en HTTP-begäran PUT . Som en del av den här begäran anger du ett unikt GUID för din rolltilldelning. Skapa slutligen en nyttolast för resurstilldelning som anger den unika identifieraren för din identitet.

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        Name = "<name-of-existing-table-account>"
    }
    $resourceId = (
        Get-AzCosmosDBAccount @parameters |
            Select-Object -Property Id -First 1
    ).Id    
    
    $payload = @{
      properties = @{
        roleDefinitionId = "$resourceId/tableRoleDefinitions/00000000-0000-0000-0000-000000000002"
        scope = "$resourceId"
        principalId = "<id-of-existing-identity>"
      }
    }
    
    $parameters = @{
      Path = "$resourceId/tableRoleAssignments/e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5?api-version=2023-04-15"
      Method = "PUT"
      Payload = $payload | ConvertTo-Json -Depth 2
    }
    Invoke-AzRestMethod @parameters
    

    Anmärkning

    I det här exemplet var det unika GUID som angavs e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5. Du kan ange ett unikt GUID för din egen rolltilldelning.

Varning

Hantering av rollbaserad åtkomstkontroll för dataplan stöds inte i Azure-portalen.

Verifiera rollbaserad åtkomst för dataplanet i kod

Kontrollera att du har beviljat åtkomst korrekt med hjälp av programkod och Azure SDK.

using Azure.Identity;
using Azure.Data.Tables;

string endpoint = "<account-endpoint>";

DefaultAzureCredential credential = new();

TableServiceClient client = new(
    endpoint: new Uri(endpoint),
    tokenCredential: credential
);

TableClient table = client.GetTableClient(
    tableName: "<name-of-table>"
);

await table.GetEntityAsync<TableEntity>(
    partitionKey: "<partition-key>",
    rowKey: "<row-key>"
);
const { TableServiceClient, TableClient } = require('@azure/data-tables');
const { DefaultAzureCredential } = require('@azure/identity');

const endpoint = '<account-endpoint>';

let credential = new DefaultAzureCredential();

let client = new TableServiceClient(endpoint, credential);

let table = new TableClient(endpoint, "<table-name>", credential);

await table.getEntity("<partition-key>", "<row-key>");
import { TableServiceClient, TableClient } from '@azure/data-tables';
import { TokenCredential, DefaultAzureCredential } from '@azure/identity';

const endpoint: string = '<account-endpoint>';

let credential: TokenCredential = new DefaultAzureCredential();

let client: TableServiceClient = new TableServiceClient(endpoint, credential);

let table: TableClient = new TableClient(endpoint, "<table-name>", credential);

await table.getEntity("<partition-key>", "<row-key>");
from azure.data.tables import TableServiceClient
from azure.identity import DefaultAzureCredential

endpoint = "<account-endpoint>"

credential = DefaultAzureCredential()

client = TableServiceClient(endpoint, credential=credential)

table = client.get_table_client("<table-name>")

table.get_entity(
    row_key="<row-key>",
    partition_key="<partition-key>"
)
import (
    "context"
    
    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    "github.com/Azure/azure-sdk-for-go/sdk/data/aztables"
)

const endpoint = "<account-endpoint>"

func main() {
    credential, _ := azidentity.NewDefaultAzureCredential(nil)
    client, _ := aztables.NewServiceClient(endpoint, credential, nil)
    table := client.NewClient("<table-name>")
    
    _, err := table.GetEntity(context.TODO(), "<partition-key>", "<row-key>", nil)
    if err != nil {
        panic(err)
    }
}
import com.azure.data.tables.TableClient;
import com.azure.data.tables.TableServiceClient;
import com.azure.data.tables.TableServiceClientBuilder;
import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;

public class Table{
    public static void main(String[] args){
        DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
            .build();
        
        TableServiceClient client = new TableServiceClientBuilder()
            .endpoint("<table-endpoint>")
            .credential(credential)
            .buildClient();

        TableClient table = client
            .getTableClient("<table-name>");

        table.getEntity("<partition-key>", "<row-key>");
    }
}