Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Kom igång med Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör på Windows eller macOS, överväg att köra Azure CLI i en Docker-container. För mer information, se Hur man kör Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. För att avsluta autentiseringsprocessen, följ stegen som visas i din terminal. Andra inloggningsalternativ finns i Autentisera till Azure med Azure CLI.
När du blir uppmanad, installera Azure CLI-tillägget vid första användning. Mer information om tillägg finns i Använda och hantera tillägg med Azure CLI.
Kör az version för att ta reda på versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
- Om du väljer att använda Azure PowerShell lokalt:
- Installera den senaste versionen av Az PowerShell-modulen.
- Anslut till ditt Azure-konto med hjälp av cmdleten Connect-AzAccount .
- Om du väljer att använda Azure Cloud Shell:
- Mer information finns i Översikt över Azure Cloud Shell .
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.
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 } }Använd
az deployment group createfö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.
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.
Välj sedan Inaktivera för alternativet Nyckelbaserad autentisering .
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.
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"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
idskulle 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.Använd
az group showför att hämta metadata för din aktuella resursgrupp.az group show \ --name "<name-of-existing-resource-group>"Observera utdata från föregående kommando. Registrera värdet för egenskapen
idfö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
idskulle 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.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
AssignableScopeslägger du till egenskapen föridresursgruppen 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-examplesom registrerades från föregående steg. Din faktiska resursidentifierare kan vara annorlunda.Skapa en ny rolldefinition med hjälp av
az role definition create. Använd filenrole-definition.json som indata för--role-definitionargumentet.az role definition create \ --role-definition role-definition.jsonGranska 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
idskulle 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.Använd
az group showför att hämta metadata för din aktuella resursgrupp igen.az group show \ --name "<name-of-existing-resource-group>"Observera utdata från föregående kommando. Registrera värdet för egenskapen
idfö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
idskulle 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.Tilldela den nya rollen med .
az role assignment createAnvänd resursgruppens identifierare för--scopeargumentet, rollens identifierare för-roleargumentet och den unika identifieraren för din identitet till--assigneeargumentet.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
scopein på det fiktiva exemplet/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-examplesom beskrivs i exemplet från föregående steg. Resursgruppens identifierare skulle skilja sig från det här exemplet.rolevar 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.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.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.
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"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
idskulle 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.Skapa en ny Bicep-fil för att definiera rolldefinitionen. Ge filen namnet control-plane-role-definition.bicep. Lägg till dessa
actionsi 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.idDistribuera 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.bicepGranska 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
idskulle 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.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 } }Skapa en ny Bicep-parameterfil med namnet control-plane-role-assignment.
bicepparam. I den här parameterfilen; tilldela de tidigare registrerade rolldefinitionsidentifierarna till parameternroleDefinitionIdoch den unika identifieraren för din identitet till parameternidentityId.using './control-plane-role-assignment.bicep' param roleDefinitionId = '<id-of-new-role-definition>' param identityId = '<id-of-existing-identity>'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.bicepUpprepa 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.
Logga in på Azure Portal (https://portal.azure.com).
Ange Resursgrupp i det globala sökfältet.
I Tjänster väljer du Resursgrupper.
I fönstret Resursgrupper väljer du din befintliga resursgrupp.
Anmärkning
Den här skärmbilden innehåller resursgruppen
msdocs-identity-example. Det faktiska resursgruppsnamnet kan vara annorlunda.I fönstret för resursgruppen väljer du Åtkomstkontroll (IAM) på tjänstmenyn.
I fönstret Åtkomstkontroll (IAM) väljer du Roller.
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.
I dialogrutan Rolldefinition för Cosmos DB-operatör observerar du de åtgärder som tilldelats som en del av den här rolldefinitionen.
Stäng dialogrutan för rolldefinition för Cosmos DB-operatör .
I fönstret Åtkomstkontroll (IAM) väljer du Lägg till. Välj sedan Lägg till anpassad roll.
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 OwnerBeskrivning Can perform all control plane actions for an Azure Cosmos DB account.Baslinjebehörigheter Börja från början
I fönstret Behörigheter väljer du Lägg till behörigheter. Sök sedan efter
DocumentDBi behörighetsdialogrutan. Välj slutligen alternativet Microsoft.DocumentDB .
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 .
Gå tillbaka till fönstret Behörigheter och se listan med behörigheter. Välj sedan Granska + skapa.
I fönstret Granska + skapa granskar du de angivna alternativen för den nya rolldefinitionen. Välj slutligen Skapa.
Vänta tills portalen har skapat rolldefinitionen.
I fönstret Åtkomstkontroll (IAM) väljer du Lägg till och sedan Lägg till rolltilldelning.
I fönstret Roll söker
Azure Cosmos DBdu 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.
Tips/Råd
Du kan också filtrera listan med roller så att den endast innehåller anpassade roller.
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.
Anmärkning
Den här skärmbilden visar en exempelanvändare med namnet "Kai Carter" med huvudnamnet
kai@adventure-works.com.Gå tillbaka till fönstret Medlemmar , granska de valda medlemmarna och välj sedan Granska + tilldela.
I fönstret Granska + tilldela granskar du de angivna alternativen för den nya rolltilldelningen. Välj slutligen Granska + tilldela.
Vänta tills portalen har skapat rolltilldelningen.
Använd
Get-AzRoleDefinitionför att lista alla rolldefinitioner som är associerade med ditt Azure Cosmos DB-konto.$parameters = @{ Name = "Cosmos DB Operator" } Get-AzRoleDefinition @parametersGranska 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
Idskulle värdet vara230815da-be43-4aae-9cb4-875f7bd000aa. Identifieraren är globalt unik för alla rolldefinitioner i Azure.Använd
Get-AzResourceGroupför att hämta metadata för din aktuella resursgrupp.$parameters = @{ Name = "<name-of-existing-resource-group>" } Get-AzResourceGroup @parametersObservera utdata från föregående kommando. Registrera värdet för egenskapen
ResourceIdfö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-exampleAnmärkning
I det här exemplet
ResourceIdskulle 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.Importera först modulen
Az.Resources. Skapa sedan ett nyttMicrosoft.Azure.Commands.Resources.Models.Authorization.PSRoleDefinitionobjekt. I -objektet skapar du den här resursdefinitionen som anger de värden som anges här. För listanAssignableScopeslägger du till egenskapen förResourceIdresursgruppen 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 $roleAnmärkning
I det här exemplet används värdet
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-examplesom registrerades från föregående steg. Din faktiska resursidentifierare kan vara annorlunda.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
Nameskulle värdet varaAzure Cosmos DB Control Plane Owner. Det här exemplet är en delmängd av de typiska utdata för distributionen för tydlighetens skull.Tilldela den nya rollen med .
New-AzRoleAssignmentAnvänd rollens namn för parameternRoleDefinitionNameoch den unika identifieraren för din identitet till parameternObjectId.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" ObjectId = "<your-principal-identifier>" RoleDefinitionName = "Azure Cosmos DB Control Plane Owner" } New-AzRoleAssignment @parametersObservera 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-c5c5c5c5c5c5Anmä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.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/readMicrosoft.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/readMicrosoft.DocumentDB/databaseAccounts/sqlRoleAssignments/readMicrosoft.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.
Visa en lista över alla rolldefinitioner som är associerade med ditt Azure Cosmos DB för NoSQL-konto med .
az cosmosdb sql role definition listaz cosmosdb sql role definition list \ --resource-group "<name-of-existing-resource-group>" \ --account-name "<name-of-existing-nosql-account>"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
idskulle 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.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/readMetadataKan 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/*" ] } ] }az cosmosdb sql role definition createAnvänd sedan för att skapa rolldefinitionen. Använd role-definition.json som indata för--bodyargumentet.az cosmosdb sql role definition create \ --resource-group "<name-of-existing-resource-group>" \ --account-name "<name-of-existing-nosql-account>" \ --body "@role-definition.json"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>"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
idskulle 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.Använd
az cosmosdb showfö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}"Observera utdata från föregående kommando. Registrera värdet för egenskapen
idfö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
idskulle 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.Tilldela den nya rollen med .
az cosmosdb sql role assignment createAnvänd tidigare registrerade rolldefinitionsidentifierare till--role-definition-idargumentet och den unika identifieraren för din identitet till--principal-idargumentet. Använd slutligen ditt kontos identifierare för--scopeargumentet.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 showMer 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:
/Använd
az cosmosdb sql role assignment listfö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>"
Visa en lista över alla rolldefinitioner som är associerade med ditt Azure Cosmos DB för NoSQL-konto med .
az cosmosdb sql role definition listaz cosmosdb sql role definition list \ --resource-group "<name-of-existing-resource-group>" \ --account-name "<name-of-existing-nosql-account>"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
idskulle 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.Skapa en ny Bicep-fil för att definiera rolldefinitionen. Ge filen namnet data-plane-role-definition.bicep. Lägg till dessa
dataActionsi definitionen:Description Microsoft.DocumentDB/databaseAccounts/readMetadataKan 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.idTips/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:
/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 parameternaccountName.using './data-plane-role-definition.bicep' param accountName = '<name-of-existing-nosql-account>'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.bicepSkapa 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.idSkapa 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 parameternaccountName, de tidigare registrerade rolldefinitionsidentifierarna till parameternroleDefinitionIdoch den unika identifieraren för din identitet till parameternidentityId.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änderdeployer().objectIdför att sedan hämta identiteten för den huvudansvarige som distribuerade mallen. Mer information finns ideployer.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.bicepUpprepa 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.
Använd
Get-AzCosmosDBSqlRoleDefinitionfö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 @parametersGranska 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
Idskulle 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.Skapa en ny rolldefinition med hjälp av
New-AzCosmosDBSqlRoleDefinition. För parameternDataActionanger du de dataåtgärder som anges här:Description Microsoft.DocumentDB/databaseAccounts/readMetadataKan 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 @parametersTips/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:
/Använd
Get-AzCosmosDBSqlRoleDefinitionfö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 @parametersGranska 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
Idskulle 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.Använd
Get-AzCosmosDBAccountfö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 IdObservera utdata från föregående kommando. Registrera värdet för egenskapen
Idfö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-nosqlAnmärkning
I det här exemplet
Idskulle 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.Använd
New-AzCosmosDBSqlRoleAssignmentför att tilldela den nya rollen. Använd de tidigare registrerade rolldefinitionsidentifierarna för parameternRoleDefinitionIdoch den unika identifieraren för din identitet till parameternPrincipalId. Slutligen använder du ditt kontos identifierare för parameternScope.$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 @parametersTips/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, UserPrincipalNameMer information finns i
Get-AzADUser.Visa en lista över alla rolltilldelningar för ditt Azure Cosmos DB för NoSQL-konto med .
Get-AzCosmosDBSqlRoleAssignmentGranska 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();
}