Dela via


Ansluta till Azure Cosmos DB för NoSQL 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 NoSQL-konto.

  • 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 NoSQL 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 Microsoft.Azure.Cosmos;

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

CosmosClient client = new(connectionString);
const { CosmosClient } = require('@azure/cosmos');

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

const client = new CosmosClient(connectionString);
import { CosmosClient } from '@azure/cosmos'

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

const client: CosmosClient = new CosmosClient(connectionString);
from azure.cosmos import CosmosClient

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

client = CosmosClient(connection_string)
package main

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

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

func main() {
    client, _ := azcosmos.NewClientFromConnectionString(connectionString, nil)
}
import com.azure.cosmos.CosmosClient;
import com.azure.cosmos.CosmosClientBuilder;

public class NoSQL{
    public static void main(String[] args){
        CosmosClient client = new CosmosClientBuilder()
            .endpoint("<nosql-endpoint>")
            .key("<key>")
            .buildClient();
    }
}
use azure_data_cosmos::CosmosClient;

fn main() {
    let client = CosmosClient::new_with_access_key(
        "<account-endpoint>",
        "<account-key>",
        None,
    ).unwrap();

    let container = client.database_client("<database-name>").container_client("<container-name>");

    let response = container.read_item("<partition-key>", "<item-id>", None);
    tokio::runtime::Runtime::new().unwrap().block_on(response).unwrap();
}

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 egenskapen id för den här resursgruppen, eftersom det krävs för att använda 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 egenskapen id för den här resursgruppen, eftersom det krävs för att använda 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 egenskapen ResourceId för den här resursgruppen, eftersom det krävs för att använda 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
  • Köra NoSQL-frå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 NoSQL. 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 för NoSQL.

Viktigt!

För att få en befintlig rolldefinition för dataplanet krävs följande behörigheter för kontrollplanet:

  • Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read

För att skapa en ny rolldefinition för dataplanet krävs följande behörigheter för kontrollplanet:

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

För att skapa en ny rolltilldelning för dataplanet krävs följande behörigheter för kontrollplanet:

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

Varning

Azure Cosmos DB för NoSQL:s inbyggda rollbaserade åtkomstkontroll stöder inte egenskapen notDataActions . Alla åtgärder som inte anges som tillåtna dataAction undantas automatiskt.

  1. Visa en lista över alla rolldefinitioner som är associerade med ditt Azure Cosmos DB för NoSQL-konto med .az cosmosdb sql role definition list

    az cosmosdb sql role definition list \
        --resource-group "<name-of-existing-resource-group>" \
        --account-name "<name-of-existing-nosql-account>"
    
  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.

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

    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-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet.

  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
    {
      "RoleName": "Azure Cosmos DB for NoSQL Data Plane Owner",
      "Type": "CustomRole",
      "AssignableScopes": [
        "/"
      ],
      "Permissions": [
        {
          "DataActions": [
            "Microsoft.DocumentDB/databaseAccounts/readMetadata",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*"
          ]
        }
      ]
    }
    
  4. az cosmosdb sql role definition create Använd sedan för att skapa rolldefinitionen. Använd role-definition.json som indata för --body argumentet.

    az cosmosdb sql role definition create \
        --resource-group "<name-of-existing-resource-group>" \
        --account-name "<name-of-existing-nosql-account>" \
        --body "@role-definition.json"
    
  5. Nu listar du alla rolldefinitioner som är associerade med ditt Azure Cosmos DB för NoSQL-konto med hjälp av az cosmosdb sql role definition list.

    az cosmosdb sql role definition list \
        --resource-group "<name-of-existing-resource-group>" \
        --account-name "<name-of-existing-nosql-account>"
    
  6. Granska utdata från föregående kommando. Leta upp rolldefinitionen som du nyss skapade med namnet Azure Cosmos DB för NOSQL-dataplanets ägare. 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/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/bbbbbbbb-1111-2222-3333-cccccccccccc",
      "name": "bbbbbbbb-1111-2222-3333-cccccccccccc",
      "permissions": [
        {
          "dataActions": [
            "Microsoft.DocumentDB/databaseAccounts/readMetadata",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*"
          ],
          "notDataActions": []
        }
      ],
      "resourceGroup": "msdocs-identity-example",
      "roleName": "Azure Cosmos DB for NoSQL Data Plane Owner",
      "type": "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions",
      "typePropertiesType": "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.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/bbbbbbbb-1111-2222-3333-cccccccccccc. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet.

  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-nosql-account>" \
        --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-nosql"
    }
    

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

  9. Tilldela den nya rollen med .az cosmosdb sql role assignment create Använd tidigare registrerade rolldefinitionsidentifierare till --role-definition-id argumentet och den unika identifieraren för din identitet till --principal-id argumentet. Använd slutligen ditt kontos identifierare för --scope argumentet.

    az cosmosdb sql role assignment create \
        --resource-group "<name-of-existing-resource-group>" \
        --account-name "<name-of-existing-nosql-account>" \
        --role-definition-id "<id-of-new-role-definition>" \
        --principal-id "<id-of-existing-identity>" \
        --scope "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
    

    Tips/Råd

    Om du försöker bevilja rollbaserad åtkomstkontroll för dataplanet till din egen identitet kan du använda det här kommandot för att hämta identiteten:

    az ad signed-in-user show
    

    Mer information finns i az ad signed-in-user.

    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 specificera en data plane rollbaserad åtkomstkontrolltilldelning för 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. Använd az cosmosdb sql role assignment list för att lista alla rolltilldelningar för ditt Azure Cosmos DB för NoSQL-konto. Granska utdata för att se till att rolltilldelningen har skapats.

    az cosmosdb sql role assignment list \
        --resource-group "<name-of-existing-resource-group>" \
        --account-name "<name-of-existing-nosql-account>"
    
  1. Visa en lista över alla rolldefinitioner som är associerade med ditt Azure Cosmos DB för NoSQL-konto med .az cosmosdb sql role definition list

    az cosmosdb sql role definition list \
        --resource-group "<name-of-existing-resource-group>" \
        --account-name "<name-of-existing-nosql-account>"
    
  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.

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

    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-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet.

  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 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
    metadata description = 'Create RBAC definition for data plane access to Azure Cosmos DB for NoSQL.'
    
    @description('Name of the Azure Cosmos DB for NoSQL account.')
    param accountName string
    
    @description('Name of the role definition.')
    param roleDefinitionName string = 'Azure Cosmos DB for NoSQL Data Plane Owner'
    
    resource account 'Microsoft.DocumentDB/databaseAccounts@2024-05-15' existing = {
      name: accountName
    }
    
    resource definition 'Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions@2024-05-15' = {
      name: guid(account.id, roleDefinitionName)
      parent: account
      properties: {
        roleName: roleDefinitionName
        type: 'CustomRole'
        assignableScopes: [
          account.id
        ]
        permissions: [
          {
            dataActions: [
              'Microsoft.DocumentDB/databaseAccounts/readMetadata'
              'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*'
              'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*'
            ]
          }
        ]
      }
    }
    
    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 specificera en data plane rollbaserad åtkomstkontrolltilldelning för 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 NoSQL-konto till parametern accountName .

    using './data-plane-role-definition.bicep'
    
    param accountName = '<name-of-existing-nosql-account>'
    
  5. Distribuera Bicep-mallen med az deployment group create.

    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. Skapa en ny Bicep-fil för att definiera rolltilldelningen. Ge filen namnet data-plane-role-assignment.bicep.

    metadata description = 'Assign RBAC role for data plane access to Azure Cosmos DB for NoSQL.'
    
    @description('Name of the Azure Cosmos DB for NoSQL account.')
    param accountName string
    
    @description('Id of the role definition to assign to the targeted principal in the context of the account.')
    param roleDefinitionId string
    
    @description('Id of the identity/principal to assign this role in the context of the account.')
    param identityId string = deployer().objectId
    
    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
    
  7. Skapa en ny Bicep-parameterfil med namnet data-plane-role-assignment.bicepparam. I den här parameterfilen tilldelar du namnet på ditt befintliga Azure Cosmos DB för NoSQL-konto till parametern accountName , de tidigare registrerade rolldefinitionsidentifierarna till parametern roleDefinitionId och den unika identifieraren för din identitet till parametern identityId .

    using './data-plane-role-assignment.bicep'
    
    param accountName = '<name-of-existing-nosql-account>'
    param roleDefinitionId = '<id-of-new-role-definition>'
    param identityId = '<id-of-existing-identity>'
    

    Tips/Råd

    Om du försöker bevilja rollbaserad åtkomstkontroll för dataplanet till din egen identitet kan du utelämna parametern identityId . Bicep-mallen använder deployer().objectId för att sedan hämta identiteten för den huvudansvarige som distribuerade mallen. Mer information finns i deployer.

  8. Distribuera Bicep-mallen med az deployment group create.

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --parameters data-plane-role-assignment.bicepparam \
        --template-file data-plane-role-assignment.bicep
    
  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. Vanligtvis upprepas de här stegen åtminstone för att ge utvecklare åtkomst till ett konto med hjälp av deras mänskliga identitet. Du kan också upprepa de här stegen för att tillåta program att komma åt resurser med hjälp av en hanterad identitet.

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

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        AccountName = "<name-of-existing-nosql-account>"
    }
    Get-AzCosmosDBSqlRoleDefinition @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.

    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 : 
    

    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-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet. Identifieraren (00000000-0000-0000-0000-000000000002) är dock unik för alla rolldefinitioner i ditt konto.

  3. Skapa en ny rolldefinition med hjälp av New-AzCosmosDBSqlRoleDefinition. För parametern DataAction anger du 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>"
        AccountName = "<name-of-existing-nosql-account>"
        RoleName = "Azure Cosmos DB for NoSQL Data Plane Owner"
        Type = "CustomRole"
        AssignableScope = @(
            "/"
        )
        DataAction = @(
            "Microsoft.DocumentDB/databaseAccounts/readMetadata",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*"
        )
    }
    New-AzCosmosDBSqlRoleDefinition @parameters
    

    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 specificera en data plane rollbaserad åtkomstkontrolltilldelning för 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. Använd Get-AzCosmosDBSqlRoleDefinition för att lista alla rolldefinitioner som är associerade med ditt Azure Cosmos DB för NoSQL-konto.

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        AccountName = "<name-of-existing-nosql-account>"
    }
    Get-AzCosmosDBSqlRoleDefinition @parameters    
    
  5. Granska utdata från föregående kommando. Leta upp rolldefinitionen som du nyss skapade med namnet Azure Cosmos DB för NOSQL-dataplanets ägare. 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-nosql/sqlRoleDefinitions/bbbbbbbb-1111-2222-3333-cccccccccccc
    RoleName                   : Azure Cosmos DB for NoSQL Data Plane Owner
    Type                       : CustomRole
    AssignableScopes           : {/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql}
    Permissions.DataActions    : {Microsoft.DocumentDB/databaseAccounts/readMetadata, Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*, Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*}
    Permissions.NotDataActions :
    

    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-nosql/sqlRoleDefinitions/bbbbbbbb-1111-2222-3333-cccccccccccc. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet.

  6. Använd Get-AzCosmosDBAccount för att hämta metadata för ditt aktuella konto.

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        Name = "<name-of-existing-nosql-account>"
    }    
    Get-AzCosmosDBAccount @parameters | Select -Property Id
    
  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-nosql
    

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

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

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        AccountName = "<name-of-existing-nosql-account>"
        RoleDefinitionId = "<id-of-new-role-definition>"
        PrincipalId = "<id-of-existing-identity>"
        Scope = "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
    }    
    New-AzCosmosDBSqlRoleAssignment @parameters
    

    Tips/Råd

    Om du försöker bevilja rollbaserad åtkomstkontroll för dataplanet till din egen identitet kan du använda det här kommandot för att hämta identiteten:

    Get-AzADUser -SignedIn | Format-List `
        -Property Id, DisplayName, Mail, UserPrincipalName
    

    Mer information finns i Get-AzADUser.

  9. Visa en lista över alla rolltilldelningar för ditt Azure Cosmos DB för NoSQL-konto med .Get-AzCosmosDBSqlRoleAssignment Granska utdata för att se till att rolltilldelningen har skapats.

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

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.Core;
using Azure.Identity;
using Microsoft.Azure.Cosmos;

string endpoint = "<account-endpoint>";

TokenCredential credential = new DefaultAzureCredential();

CosmosClient client = new(endpoint, credential);

Container container = client.GetContainer("<database-name>", "<container-name>");

await container.ReadItemAsync<dynamic>("<item-id>", new PartitionKey("<partition-key>"));
const { CosmosClient } = require('@azure/cosmos');
const { DefaultAzureCredential } = require('@azure/identity');

const endpoint = '<account-endpoint>';

const credential = new DefaultAzureCredential();

const client = new CosmosClient({ endpoint, aadCredentials:credential});

const container = client.database('<database-name>').container('<container-name>');

await container.item('<item-id>', '<partition-key>').read<String>();
import { Container, CosmosClient, CosmosClientOptions } from '@azure/cosmos'
import { TokenCredential, DefaultAzureCredential } from '@azure/identity'

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

let credential: TokenCredential = new DefaultAzureCredential();

let options: CosmosClientOptions = {
  endpoint: endpoint,
  aadCredentials: credential
};

const client: CosmosClient = new CosmosClient(options);

const container: Container = client.database('<database-name>').container('<container-name>');

await container.item('<item-id>', '<partition-key>').read<String>();
from azure.cosmos import CosmosClient
from azure.identity import DefaultAzureCredential

endpoint = "<account-endpoint>"

credential = DefaultAzureCredential()

client = CosmosClient(endpoint, credential=credential)

container = client.get_database_client("<database-name>").get_container_client("<container-name>")

container.read_item(
    item="<item-id>",
    partition_key="<partition-key>",
)
import (
    "context"
    
    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    "github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos"
)

const endpoint = "<account-endpoint>"

func main() {
    credential, _ := azidentity.NewDefaultAzureCredential(nil)
    client, _ := azcosmos.NewClient(endpoint, credential, nil)
    
    database, _ := client.NewDatabase("<database-name>")
    container, _ := database.NewContainer("<container-name>")
    
    _, err := container.ReadItem(context.TODO(), azcosmos.NewPartitionKeyString("<partition-key>"), "<item-id>", nil)
    if err != nil {
        panic(err)
    }
}
import com.azure.cosmos.CosmosClient;
import com.azure.cosmos.CosmosClientBuilder;
import com.azure.cosmos.CosmosContainer;
import com.azure.cosmos.models.PartitionKey;
import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;

public class NoSQL {
    public static void main(String[] args) {   
        DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
            .build();
            
        CosmosClient client = new CosmosClientBuilder()
            .endpoint("<account-endpoint>")
            .credential(credential)
            .buildClient();

        CosmosContainer container = client.getDatabase("<database-name>").getContainer("<container-name>");

        container.readItem("<item-id>", new PartitionKey("<partition-key>"), Object.class);
    }
}
use azure_data_cosmos::CosmosClient;
use azure_identity::DefaultAzureCredential;

fn main() {
    let credential = DefaultAzureCredential::new().unwrap();
    let client = CosmosClient::new("<account-endpoint>", credential, None).unwrap();

    let container = client.database_client("<database-name>").container_client("<container-name>");

    let response = container.read_item("<partition-key>", "<item-id>", None);
    tokio::runtime::Runtime::new().unwrap().block_on(response).unwrap();
}