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 tabellkonto.
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 Table med hjälp av en ropc (resource-owner password credential). Det här försöket bör misslyckas. Om det behövs finns kodexempel för vanliga programmeringsspråk här.
using Azure.Data.Tables;
using Azure.Core;
string connectionString = "AccountEndpoint=<table-endpoint>;AccountKey=<key>;";
TableServiceClient client = new(connectionString);
const { TableServiceClient } = require('@azure/data-tables');
const connectionString = 'AccountEndpoint=<table-endpoint>;AccountKey=<key>;';
const client = new TableServiceClient(connectionString);
import { TableServiceClient } from '@azure/data-tables';
let connectionString: string = 'AccountEndpoint=<table-endpoint>;AccountKey=<key>;';
const client: TableServiceClient = new TableServiceClient(connectionString);
from azure.data.tables import TableServiceClient
connection_string = "AccountEndpoint=<table-endpoint>;AccountKey=<key>;"
client = TableServiceClient(endpoint, connection_string)
package main
import (
"github.com/Azure/azure-sdk-for-go/sdk/data/aztables"
)
const connectionString = "AccountEndpoint=<table-endpoint>;AccountKey=<key>;"
func main() {
client, _ := aztables.NewServiceClientFromConnectionString(connectionString, nil)
}
import com.azure.data.tables.TableServiceClient;
import com.azure.data.tables.TableServiceClientBuilder;
public class Table{
public static void main(String[] args){
TableServiceClient tableServiceClient = new TableServiceClientBuilder()
.connectionString("AccountEndpoint=<table-endpoint>;AccountKey=<key>;")
.buildClient();
}
}
Bevilja rollbaserad åtkomst för kontrollplan
Kontrollplansåtkomst syftar på möjligheten att hantera resurser för en Azure-tjänst utan att hantera data. Azure Cosmos DB-kontrollplansåtkomst kan till exempel omfatta möjligheten att:
- Läsa alla konto- och resursmetadata
- Läsa och återskapa kontonycklar och anslutningssträngar
- Utföra kontosäkerhetskopior och återställning
- Starta och spåra dataöverföringsjobb
- Hantera databaser och containrar
- Ändra kontoegenskaper
Viktigt!
I Azure Cosmos DB behöver du åtkomst till kontrollplanen för att hantera naturliga dataplansrollbaserade åtkomstkontroll-definitioner och tilldelningar. Eftersom rollbaserad åtkomstkontrollmekanism för Azure Cosmos DB-dataplanet är inbyggd behöver du åtkomst till kontrollplanet för att skapa definitioner och tilldelningar och lagra dem som resurser i ett Azure Cosmos DB-konto.
Först måste du förbereda en rolldefinition med en lista över actions för att bevilja åtkomst för att hantera kontoresurser i Azure Cosmos DB. I den här guiden förbereder du en inbyggd och anpassad roll. Tilldela sedan den nyligen definierade rollen till en identitet så att dina program kan komma åt resurser i Azure Cosmos DB.
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
id-egenskapen för denna resursgrupp eftersom det behövs i nästa steg.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example", "location": "westus", "name": "msdocs-identity-example", "type": "Microsoft.Resources/resourceGroups" }Anmärkning
I det här exemplet
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
id-egenskapen för denna resursgrupp eftersom det behövs i nästa steg.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example", "location": "westus", "name": "msdocs-identity-example", "type": "Microsoft.Resources/resourceGroups" }Anmärkning
I det här exemplet
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
ResourceId-egenskapen för denna resursgrupp eftersom det behövs i nästa steg.ResourceGroupName : msdocs-identity-example Location : westus ProvisioningState : Succeeded ResourceId : /subscriptions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1/resourcegroups/msdocs-identity-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
- Utföra tabellfrågor
- Läsa från containerns ändringsflöde
- Köra lagrade procedurer
- Hantera konflikter i konfliktflödet
Först måste du förbereda en rolldefinition med en lista över dataActions för att ge åtkomst till läsning, frågor och hantera data i Azure Cosmos DB för tabell. I den här guiden förbereder du en inbyggd och anpassad roll. Tilldela sedan den nyligen definierade rollen till en identitet så att dina program kan komma åt data i Azure Cosmos DB for Table.
Hämta först resursidentifieraren för det befintliga Azure Cosmos DB för tabellkontot med
az cosmsodb showoch lagra det i en variabel.resourceId=$( \ az cosmosdb show \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-table-account>" \ --query "id" \ --output tsv \ ) az rest \ --method "GET" \ --url $resourceId/tableRoleDefinitions?api-version=2023-04-15Visa sedan en lista över alla rolldefinitioner som är associerade med ditt Azure Cosmos DB för tabellkonto med hjälp av
az rest. Granska slutligen utdata och leta upp rolldefinitionen med namnet Standarddatadeltagare i Cosmos DB. Utdata innehåller den unika identifieraren för rolldefinitionen i egenskapenid. Registrera det här värdet som det krävs för att använda i tilldelningssteget senare i den här guiden.[ ..., { "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-table/tableRoleDefinitions/00000000-0000-0000-0000-000000000002", "name": "00000000-0000-0000-0000-000000000002", "properties": { "assignableScopes": [ "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-table" ], "permissions": [ { "dataActions": [ "Microsoft.DocumentDB/databaseAccounts/readMetadata", "Microsoft.DocumentDB/databaseAccounts/tables/*", "Microsoft.DocumentDB/databaseAccounts/tables/containers/entities/*" ], "notDataActions": [] } ], "roleName": "Cosmos DB Built-in Data Contributor", "type": "BuiltInRole" }, "type": "Microsoft.DocumentDB/databaseAccounts/tableRoleDefinitions" } ... ]Anmärkning
I det här exemplet
idskulle värdet vara/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-table/tableRoleDefinitions/00000000-0000-0000-0000-000000000002. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet. Denna exempelutdata är avkortad.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 { "properties": { "roleName": "Azure Cosmos DB for Table Data Plane Owner", "type": "CustomRole", "assignableScopes": [ "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sidandrews-rbac/providers/Microsoft.DocumentDB/databaseAccounts/sidandrews-rbac-table/" ], "permissions": [ { "dataActions": [ "Microsoft.DocumentDB/databaseAccounts/readMetadata", "Microsoft.DocumentDB/databaseAccounts/tables/*", "Microsoft.DocumentDB/databaseAccounts/tables/containers/entities/*" ] } ] } }Skapa eller uppdatera nu en rolldefinition med hjälp av
az cosmosdb showochaz resttillsammans för att utfärda en HTTP-begäranPUT. Som en del av den här begäran anger du ett unikt GUID för din rolldefinition.resourceId=$( \ az cosmosdb show \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-table-account>" \ --query "id" \ --output tsv \ ) az rest \ --method "PUT" \ --url $resourceId/tableRoleDefinitions/d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4?api-version=2023-04-15 \ --body @role-definition.jsonAnmärkning
I det här exemplet var det unika GUID som angavs
d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4. Du kan ange ett unikt GUID för din egen rolldefinition.Utdata bör nu indikera att begäran är i kö. Vänta nu tills distributionen av den kodade rolldefinitionen har slutförts. Den här uppgiften kan ta några minuter.
{ "status": "Enqueued" }Kontrollera slutligen listan över rolldefinitioner som använder
az restigen.resourceId=$( \ az cosmosdb show \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-table-account>" \ --query "id" \ --output tsv \ ) az rest \ --method "GET" \ --url $resourceId/tableRoleDefinitions?api-version=2023-04-15Anvä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-resource-group>" \ --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-table" }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-table. 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-assignment.json. I JSON-filen lägger du till den unika identifieraren för din identitet och unika identifierare för kontoresursen.
{ "properties": { "roleDefinitionId": "<account-resource-id>/tableRoleDefinitions/d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4", "scope": "<account-resource-id>", "principalId": "<id-of-existing-identity>" } }Anmärkning
I det här exemplet var det unika GUID som angavs
d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4. Du kan använda det unika GUID som du använde tidigare för din egen rolldefinition.Tips/Råd
I Azure Cosmos DB:s interna implementering av rollbaserad åtkomstkontroll refererar omfånget till kornigheten för resurser i ett konto som du vill att behörigheten ska tillämpas för. På den högsta nivån kan du begränsa rollbaserad åtkomstkontrolltilldelning för dataplanet till hela kontot med det största omfånget. Det här omfånget omfattar alla databaser och containrar i kontot:
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/Eller så kan du omfångsbegränsa dataplanets rolltilldelning till en specifik databas:
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>Slutligen kan du begränsa tilldelningen till en enda container, det mest detaljerade omfånget:
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>/colls/<container-name>I många fall kan du använda det relativa omfånget i stället för det fullständigt kvalificerade omfånget. Du kan till exempel använda det här relativa omfånget för att bevilja rollbaserad åtkomstkontrollbehörighet för dataplanet till en specifik databas och container från ett Azure CLI-kommando:
/dbs/<database-name>/colls/<container-name>Du kan också ge universell åtkomst till alla databaser och containrar med hjälp av det relativa omfånget:
/Skapa eller uppdatera nu en rolltilldelning med hjälp av
az cosmosdb showochaz resttillsammans för att utfärda en HTTP-begäranPUT. Som en del av den här begäran anger du ett unikt GUID för din rolltilldelning.resourceId=$( \ az cosmosdb show \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-table-account>" \ --query "id" \ --output tsv \ ) az rest \ --method "PUT" \ --url $resourceId/tableRoleAssignments/e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5?api-version=2023-04-15 \ --body @role-assignment.jsonAnmärkning
I det här exemplet var det unika GUID som angavs
e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5. Du kan ange ett unikt GUID för din egen rolltilldelning.
Hämta först resursidentifieraren för det befintliga Azure Cosmos DB för tabellkontot med
az cosmsodb showoch lagra det i en variabel.resourceId=$( \ az cosmosdb show \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-table-account>" \ --query "id" \ --output tsv \ ) az rest \ --method "GET" \ --url $resourceId/tableRoleDefinitions?api-version=2023-04-15Visa sedan en lista över alla rolldefinitioner som är associerade med ditt Azure Cosmos DB för tabellkonto med hjälp av
az rest. Granska slutligen utdata och leta upp rolldefinitionen med namnet Standarddatadeltagare i Cosmos DB. Utdata innehåller den unika identifieraren för rolldefinitionen i egenskapenid. Registrera det här värdet som det krävs för att använda i tilldelningssteget senare i den här guiden.[ ..., { "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-table/tableRoleDefinitions/00000000-0000-0000-0000-000000000002", "name": "00000000-0000-0000-0000-000000000002", "properties": { "assignableScopes": [ "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-table" ], "permissions": [ { "dataActions": [ "Microsoft.DocumentDB/databaseAccounts/readMetadata", "Microsoft.DocumentDB/databaseAccounts/tables/*", "Microsoft.DocumentDB/databaseAccounts/tables/containers/entities/*" ], "notDataActions": [] } ], "roleName": "Cosmos DB Built-in Data Contributor", "type": "BuiltInRole" }, "type": "Microsoft.DocumentDB/databaseAccounts/tableRoleDefinitions" } ... ]Anmärkning
I det här exemplet
idskulle värdet vara/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-table/tableRoleDefinitions/00000000-0000-0000-0000-000000000002. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet. Denna exempelutdata är avkortad.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/readMetadataMicrosoft.DocumentDB/databaseAccounts/tables/*Microsoft.DocumentDB/databaseAccounts/tables/containers/entities/*metadata description = 'Create RBAC definition for data plane access to Azure Cosmos DB for Table.' @description('Name of the Azure Cosmos DB for Table account.') param accountName string @description('Name of the role definition.') param roleDefinitionName string = 'API for Table Data Plane Owner' resource account 'Microsoft.DocumentDB/databaseAccounts@2023-04-15' existing = { name: accountName } resource definition 'Microsoft.DocumentDB/databaseAccounts/tableRoleDefinitions@2023-04-15' = { name: guid('table-role-definition', account.id) parent: account properties: { roleName: roleDefinitionName type: 'CustomRole' assignableScopes: [ account.id ] permissions: [ { dataActions: [ 'Microsoft.DocumentDB/databaseAccounts/readMetadata' 'Microsoft.DocumentDB/databaseAccounts/tables/*' 'Microsoft.DocumentDB/databaseAccounts/tables/containers/entities/*' ] } ] } } output definitionId string = definition.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 begränsa rollbaserad åtkomstkontrolltilldelning för dataplanet till hela kontot med det största omfånget. Det här omfånget omfattar alla databaser och containrar i kontot:
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/Eller så kan du omfångsbegränsa dataplanets rolltilldelning till en specifik databas:
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>Slutligen kan du begränsa tilldelningen till en enda container, det mest detaljerade omfånget:
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>/colls/<container-name>I många fall kan du använda det relativa omfånget i stället för det fullständigt kvalificerade omfånget. Du kan till exempel använda det här relativa omfånget för att bevilja rollbaserad åtkomstkontrollbehörighet för dataplanet till en specifik databas och container från ett Azure CLI-kommando:
/dbs/<database-name>/colls/<container-name>Du kan också ge universell åtkomst till alla databaser och containrar med hjälp av det relativa omfånget:
/Skapa en ny Bicep-parameterfil med namnet
data-plane-role-definition.bicepparam. I den här parameterfilen tilldelar du namnet på ditt befintliga Azure Cosmos DB för tabellkonto till parameternaccountName.using './data-plane-role-definition.bicep' param accountName = '<name-of-existing-table-account>'Distribuera Bicep-mallen med
az deployment group create. Ange namnet på Bicep-mallen, parameterfilen och Azure-resursgruppen.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --parameters data-plane-role-definition.bicepparam \ --template-file data-plane-role-definition.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.DocumentDB/databaseAccounts/msdocs-identity-example-table-account/tableRoleDefinitions/dddddddd-9999-0000-1111-eeeeeeeeeeee" } } } }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-table-account/tableRoleDefinitions/dddddddd-9999-0000-1111-eeeeeeeeeeee. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet. Det här exemplet är en delmängd av den typiska JSON som matas ut från distributionen för tydlighetens skull.Skapa en annan Bicep-fil för att tilldela en roll till en identitet. Ge filen namnet data-plane-role-assignment.bicep.
metadata description = 'Assign RBAC role for data plane access to Azure Cosmos DB for Table.' @description('Name of the Azure Cosmos DB for Table account.') param accountName string @description('Id of the role definition to assign to the targeted principal in the context of the account.') param roleDefinitionId string @description('Id of the identity/principal to assign this role in the context of the account.') param identityId string resource account 'Microsoft.DocumentDB/databaseAccounts@2023-04-15' existing = { name: accountName } resource assignment 'Microsoft.DocumentDB/databaseAccounts/tableRoleAssignments@2023-04-15' = { name: guid(roleDefinitionId, identityId, account.id) parent: account properties: { principalId: identityId roleDefinitionId: roleDefinitionId scope: account.id } } output id string = assignment.idSkapa en ny Bicep-parameterfil med namnet
data-plane-role-assignment.bicepparam. I den här parameterfilen; tilldela namnet på ditt befintliga Azure Cosmos DB för tabellkonto till 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-table-account>' 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 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 minst för att ge utvecklare åtkomst till ett konto med hjälp av sin mänskliga identitet och för att ge program åtkomst till data med hjälp av en hanterad identitet.
Använd
Get-AzCosmosDBAccountför att hämta resursidentifieraren för det befintliga Azure Cosmos DB för tabellkontot och lagra det i en variabel.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-table-account>" } $resourceId = ( Get-AzCosmosDBAccount @parameters | Select-Object -Property Id -First 1 ).Id $parameters = @{ Path = "$resourceId/tableRoleDefinitions?api-version=2023-04-15" Method = "GET" } Invoke-AzRestMethod @parametersInvoke-AzRestMethodAnvänd sedan för att lista alla rolldefinitioner som är associerade med ditt Azure Cosmos DB för tabellkonto. Granska utdata och leta upp rolldefinitionen med namnet Cosmos DB Built-in Data Contributor. Utdata innehåller den unika identifieraren för rolldefinitionen i egenskapenId. Registrera det här värdet som det krävs för att använda i tilldelningssteget senare i den här guiden.StatusCode : 200 Content : { "value": [ ..., { "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-table/tableRoleDefinitions/00000000-0000-0000-0000-000000000002", "name": "00000000-0000-0000-0000-000000000002", "properties": { "assignableScopes": [ "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-table" ], "permissions": [ { "dataActions": [ "Microsoft.DocumentDB/databaseAccounts/readMetadata", "Microsoft.DocumentDB/databaseAccounts/tables/*", "Microsoft.DocumentDB/databaseAccounts/tables/containers/entities/*" ], "notDataActions": [] } ], "roleName": "Cosmos DB Built-in Data Contributor", "type": "BuiltInRole" }, "type": "Microsoft.DocumentDB/databaseAccounts/tableRoleDefinitions" } ... ] }, ... ] }Anmärkning
I det här exemplet
Idskulle värdet vara/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-table/tableRoleDefinitions/00000000-0000-0000-0000-000000000002. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet. Denna exempelutdata är avkortad.Skapa eller uppdatera din rolldefinition med hjälp av
Get-AzCosmosDBAccountochInvoke-AzRestMethodtillsammans för att utfärda en HTTP-begäranPUT. Som en del av den här begäran anger du också ett unikt GUID för din rolldefinition. Skapa slutligen en nyttolast för resursdefinition som anger de dataåtgärder som anges här:Description Microsoft.DocumentDB/databaseAccounts/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>" Name = "<name-of-existing-table-account>" } $resourceId = ( Get-AzCosmosDBAccount @parameters | Select-Object -Property Id -First 1 ).Id $payload = @{ properties = @{ roleName = "Azure Cosmos DB for Table Data Plane Owner" type = "CustomRole" assignableScopes = @( "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sidandrews-rbac/providers/Microsoft.DocumentDB/databaseAccounts/sidandrews-rbac-table/" ) permissions = @( @{ dataActions = @( "Microsoft.DocumentDB/databaseAccounts/readMetadata", "Microsoft.DocumentDB/databaseAccounts/tables/*", "Microsoft.DocumentDB/databaseAccounts/tables/containers/entities/*" ) } ) } } $parameters = @{ Path = "$resourceId/tableRoleDefinitions/d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4?api-version=2023-04-15" Method = "PUT" Payload = $payload | ConvertTo-Json -Depth 4 } Invoke-AzRestMethod @parametersAnmärkning
I det här exemplet var det unika GUID som angavs
d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4. Du kan ange ett unikt GUID för din egen rolldefinition.Tips/Råd
I Azure Cosmos DB:s interna implementering av rollbaserad åtkomstkontroll refererar omfånget till kornigheten för resurser i ett konto som du vill att behörigheten ska tillämpas för. På den högsta nivån kan du begränsa rollbaserad åtkomstkontrolltilldelning för dataplanet till hela kontot med det största omfånget. Det här omfånget omfattar alla databaser och containrar i kontot:
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/Eller så kan du omfångsbegränsa dataplanets rolltilldelning till en specifik databas:
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>Slutligen kan du begränsa tilldelningen till en enda container, det mest detaljerade omfånget:
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>/colls/<container-name>I många fall kan du använda det relativa omfånget i stället för det fullständigt kvalificerade omfånget. Du kan till exempel använda det här relativa omfånget för att bevilja rollbaserad åtkomstkontrollbehörighet för dataplanet till en specifik databas och container från ett Azure CLI-kommando:
/dbs/<database-name>/colls/<container-name>Du kan också ge universell åtkomst till alla databaser och containrar med hjälp av det relativa omfånget:
/Utdata ska returneras med statuskoden 200. Vänta nu tills distributionen av den kodade rolldefinitionen har slutförts. Den här uppgiften kan ta några minuter.
StatusCode : 200 ...Kontrollera slutligen listan över rolldefinitioner som använder
Invoke-AzRestMethodigen.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-table-account>" } $resourceId = ( Get-AzCosmosDBAccount @parameters | Select-Object -Property Id -First 1 ).Id $parameters = @{ Path = "$resourceId/tableRoleDefinitions?api-version=2023-04-15" Method = "GET" } Invoke-AzRestMethod @parametersAnvändGet-AzCosmosDBAccount för att hämta den unika identifieraren för ditt aktuella konto.
$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-table-account>" } Get-AzCosmosDBAccount @parameters | Select -Property 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-tableAnmä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-table. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet.Skapa eller uppdatera nu en rolltilldelning med hjälp av
Get-AzCosmosDBAccountochInvoke-AzRestMethodtillsammans för att utfärda en HTTP-begäranPUT. Som en del av den här begäran anger du ett unikt GUID för din rolltilldelning. Skapa slutligen en nyttolast för resurstilldelning som anger den unika identifieraren för din identitet.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-table-account>" } $resourceId = ( Get-AzCosmosDBAccount @parameters | Select-Object -Property Id -First 1 ).Id $payload = @{ properties = @{ roleDefinitionId = "$resourceId/tableRoleDefinitions/00000000-0000-0000-0000-000000000002" scope = "$resourceId" principalId = "<id-of-existing-identity>" } } $parameters = @{ Path = "$resourceId/tableRoleAssignments/e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5?api-version=2023-04-15" Method = "PUT" Payload = $payload | ConvertTo-Json -Depth 2 } Invoke-AzRestMethod @parametersAnmärkning
I det här exemplet var det unika GUID som angavs
e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5. Du kan ange ett unikt GUID för din egen rolltilldelning.
Varning
Hantering av rollbaserad åtkomstkontroll för dataplan stöds inte i Azure-portalen.
Verifiera rollbaserad åtkomst för dataplanet i kod
Kontrollera att du har beviljat åtkomst korrekt med hjälp av programkod och Azure SDK.
using Azure.Identity;
using Azure.Data.Tables;
string endpoint = "<account-endpoint>";
DefaultAzureCredential credential = new();
TableServiceClient client = new(
endpoint: new Uri(endpoint),
tokenCredential: credential
);
TableClient table = client.GetTableClient(
tableName: "<name-of-table>"
);
await table.GetEntityAsync<TableEntity>(
partitionKey: "<partition-key>",
rowKey: "<row-key>"
);
const { TableServiceClient, TableClient } = require('@azure/data-tables');
const { DefaultAzureCredential } = require('@azure/identity');
const endpoint = '<account-endpoint>';
let credential = new DefaultAzureCredential();
let client = new TableServiceClient(endpoint, credential);
let table = new TableClient(endpoint, "<table-name>", credential);
await table.getEntity("<partition-key>", "<row-key>");
import { TableServiceClient, TableClient } from '@azure/data-tables';
import { TokenCredential, DefaultAzureCredential } from '@azure/identity';
const endpoint: string = '<account-endpoint>';
let credential: TokenCredential = new DefaultAzureCredential();
let client: TableServiceClient = new TableServiceClient(endpoint, credential);
let table: TableClient = new TableClient(endpoint, "<table-name>", credential);
await table.getEntity("<partition-key>", "<row-key>");
from azure.data.tables import TableServiceClient
from azure.identity import DefaultAzureCredential
endpoint = "<account-endpoint>"
credential = DefaultAzureCredential()
client = TableServiceClient(endpoint, credential=credential)
table = client.get_table_client("<table-name>")
table.get_entity(
row_key="<row-key>",
partition_key="<partition-key>"
)
import (
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/data/aztables"
)
const endpoint = "<account-endpoint>"
func main() {
credential, _ := azidentity.NewDefaultAzureCredential(nil)
client, _ := aztables.NewServiceClient(endpoint, credential, nil)
table := client.NewClient("<table-name>")
_, err := table.GetEntity(context.TODO(), "<partition-key>", "<row-key>", nil)
if err != nil {
panic(err)
}
}
import com.azure.data.tables.TableClient;
import com.azure.data.tables.TableServiceClient;
import com.azure.data.tables.TableServiceClientBuilder;
import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
public class Table{
public static void main(String[] args){
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.build();
TableServiceClient client = new TableServiceClientBuilder()
.endpoint("<table-endpoint>")
.credential(credential)
.buildClient();
TableClient table = client
.getTableClient("<table-name>");
table.getEntity("<partition-key>", "<row-key>");
}
}