Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Op rollen gebaseerd toegangsbeheer verwijst naar een methode voor het beheren van toegang tot resources in Azure. Deze methode is gebaseerd op specifieke identiteiten waaraan rollen worden toegewezen die beheren welk toegangsniveau ze hebben voor een of meer resources. Op rollen gebaseerd toegangsbeheer biedt een flexibel systeem van gedetailleerd toegangsbeheer dat ervoor zorgt dat identiteiten alleen het minst bevoegde toegangsniveau hebben dat ze nodig hebben om hun taak uit te voeren.
Zie op rollen gebaseerd toegangsbeheer voor meer informatie.
Vereiste voorwaarden
Een Azure-account met een actief abonnement. Gratis een account maken
Een bestaand Azure Cosmos DB for Table-account.
Een of meer bestaande identiteiten in Microsoft Entra ID.
Gebruik de Bash-omgeving in Azure Cloud Shell. Zie Aan de slag met Azure Cloud Shell voor meer informatie.
Als je de voorkeur geeft aan het lokaal uitvoeren van CLI-referentiecommando's, installeer dan de Azure CLI. Als je op Windows of macOS werkt, overweeg dan om Azure CLI in een Docker-container uit te voeren. Voor meer informatie, zie Hoe u de Azure CLI in een Docker-container kunt uitvoeren.
Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met de opdracht az login. Om het authenticatieproces te voltooien, volgt u de stappen die op uw terminal worden weergegeven. Zie Verifiëren bij Azure met behulp van Azure CLI voor andere aanmeldingsopties.
Wanneer u daarom wordt gevraagd, installeer de Azure CLI-extensie bij het eerste gebruik. Zie Extensies gebruiken en beheren met de Azure CLIvoor meer informatie over extensies.
Voer az version uit om de geïnstalleerde versie en de afhankelijke bibliotheken te vinden. Voer az upgrade uit om naar de nieuwste versie te upgraden.
- Als u ervoor kiest om Azure PowerShell lokaal te gebruiken:
- Installeer de nieuwste versie van de Az PowerShell-module.
- Maak verbinding met uw Azure-account met de cmdlet Connect-AzAccount.
- Als u ervoor kiest om Azure Cloud Shell te gebruiken:
- Raadpleeg Overzicht van Azure Cloud Shell voor meer informatie.
Verificatie op basis van sleutels uitschakelen
Als u verificatie op basis van sleutels uitschakelt, voorkomt u dat uw account wordt gebruikt zonder de veiligere verificatiemethode voor Microsoft Entra ID. Deze procedure is een stap die moet worden uitgevoerd op nieuwe accounts in beveiligde workloads. U kunt deze procedure ook uitvoeren voor bestaande accounts die worden gemigreerd naar een beveiligd workloadpatroon.
Schakel eerst verificatie op basis van sleutels uit voor uw bestaande account, zodat toepassingen Microsoft Entra ID-verificatie moeten gebruiken. Gebruik az resource update om properties.disableLocalAuth van het bestaande account te wijzigen.
az resource update \
--resource-group "<name-of-existing-resource-group>" \
--name "<name-of-existing-account>" \
--resource-type "Microsoft.DocumentDB/databaseAccounts" \
--set properties.disableLocalAuth=true
Maak eerst een nieuw account met verificatie op basis van sleutels uitgeschakeld, zodat toepassingen Microsoft Entra-verificatie moeten gebruiken.
Maak een nieuw Bicep-bestand om uw nieuwe account te implementeren met verificatie op basis van sleutels uitgeschakeld. Geef het bestand de naam 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 } }Gebruik
az deployment group createom het Bicep-bestand met het nieuwe account te implementeren.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --template-file deploy-new-account.bicep
Schakel eerst verificatie op basis van sleutels uit voor uw bestaande account, zodat toepassingen Microsoft Entra-verificatie moeten gebruiken. Gebruik Get-AzResource om het bestaande account te lezen en Set-AzResource om het bij te werken.
$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
Gebruik deze stappen om een nieuw Azure Cosmos DB for NoSQL-account te maken waarvoor verificatie op basis van sleutels is uitgeschakeld, zodat toepassingen alleen Microsoft Entra-verificatie moeten gebruiken.
Wanneer u een nieuw Azure Cosmos DB for NoSQL-account instelt, gaat u naar de sectie Beveiliging van het proces voor het maken van accounts.
Selecteer vervolgens Uitschakelen voor de optie Verificatie op basis van sleutels .
Belangrijk
Voor het wijzigen van een Azure Cosmos DB-account is een Azure-rol met ten minste de Microsoft.DocumentDb/databaseAccounts/*/write machtiging vereist. Zie machtigingen voor Azure Cosmos DB voor meer informatie.
Controleren of verificatie op basis van sleutels is uitgeschakeld
Als u wilt valideren dat toegang op basis van sleutels is uitgeschakeld, probeert u de Azure SDK te gebruiken om verbinding te maken met Azure Cosmos DB for Table met behulp van een wachtwoordreferentie voor de resource-eigenaar (ROPC). Deze poging zou moeten mislukken. Indien nodig worden hier codevoorbeelden voor algemene programmeertalen gegeven.
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();
}
}
Controlevlak toegang op basis van rollen verlenen
Toegang tot het besturingsvlak verwijst naar de mogelijkheid om resources voor een Azure-service te beheren zonder gegevens te beheren. Zo kan de toegang tot het besturingsvlak van Azure Cosmos DB bijvoorbeeld de volgende mogelijkheden bevatten:
- Alle account- en resourcemetagegevens lezen
- Accountsleutels en verbindingsreeksen lezen en opnieuw genereren
- Accountback-ups en herstel uitvoeren
- Taken voor gegevensoverdracht starten en bijhouden
- Databases en containers beheren
- Accounteigenschappen wijzigen
Belangrijk
In Azure Cosmos DB hebt u toegang tot het besturingsvlak nodig voor het beheren van systeemeigen op rollen gebaseerd toegangsbeheerdefinities en -toewijzingen op basis van gegevensvlakken. Omdat het op rollen gebaseerde toegangsbeheermechanisme van Azure Cosmos DB van Azure Cosmos DB systeemeigen is, hebt u toegang tot het besturingsvlak nodig om definities en toewijzingen te maken en op te slaan als resources in een Azure Cosmos DB-account.
Eerst moet u een roldefinitie voorbereiden met een lijst om toegang te verlenen voor het beheren van accountbronnen in actions Azure Cosmos DB. In deze handleiding bereidt u een ingebouwde en aangepaste rol voor. Wijs vervolgens de zojuist gedefinieerde rol[s] toe aan een identiteit, zodat uw toepassingen toegang hebben tot resources in Azure Cosmos DB.
Vermeld alle roldefinities die zijn gekoppeld aan uw Azure Cosmos DB-account met behulp van
az role definition list.az role definition list \ --name "Cosmos DB Operator"Controleer de uitvoer en zoek de roldefinitie met de naam Cosmos DB-operator. De uitvoer bevat de unieke id van de roldefinitie in de
ideigenschap. Noteer deze waarde omdat deze is vereist voor gebruik in de toewijzingsstap verderop in deze handleiding.[ { "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", } ]Opmerking
In dit voorbeeld zou de
idwaarde/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aazijn. In dit voorbeeld worden fictieve gegevens gebruikt en uw id is anders dan in dit voorbeeld. De id (230815da-be43-4aae-9cb4-875f7bd000aa) is echter wereldwijd uniek in alle roldefinities in Azure.Gebruik
az group showdit om de metagegevens voor uw huidige resourcegroep op te halen.az group show \ --name "<name-of-existing-resource-group>"Bekijk de uitvoer van de vorige opdracht. Noteer de waarde van de
ideigenschap voor deze resourcegroep, omdat deze in de volgende stap moet worden gebruikt.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example", "location": "westus", "name": "msdocs-identity-example", "type": "Microsoft.Resources/resourceGroups" }Opmerking
In dit voorbeeld zou de
idwaarde/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-examplezijn. In dit voorbeeld worden fictieve gegevens gebruikt en uw id is anders dan in dit voorbeeld. Deze tekenreeks is een ingekort voorbeeld van de uitvoer.Maak een nieuw JSON-bestand met de naamrole-definition.json. Maak in het bestand deze resourcedefinitie die de waarden opgeeft die hier worden vermeld. Voeg voor de
AssignableScopes-lijst deid-eigenschap toe van de resource-groep die in de vorige stap is genoteerd.{ "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" ] }Opmerking
In dit voorbeeld wordt de
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-examplewaarde gebruikt die is vastgelegd in de vorige stap. De werkelijke resource-id kan afwijken.Maak een nieuwe roldefinitie met behulp van
az role definition create. Gebruik het role-definition.json-bestand als invoer voor het--role-definitionargument.az role definition create \ --role-definition role-definition.jsonControleer de uitvoer van de opdracht voor het maken van de definitie. De uitvoer bevat de unieke id van de roldefinitie in de
ideigenschap. Noteer deze waarde omdat deze is vereist voor gebruik in de toewijzingsstap verderop in deze handleiding.{ "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" }Opmerking
In dit voorbeeld zou de
idwaarde/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1zijn. In dit voorbeeld worden fictieve gegevens gebruikt en uw id is anders dan in dit voorbeeld. Dit voorbeeld is een subset van de typische JSON die wordt uitgevoerd vanuit de implementatie voor duidelijkheid.Gebruik
az group showdit om de metagegevens voor uw huidige resourcegroep opnieuw op te halen.az group show \ --name "<name-of-existing-resource-group>"Bekijk de uitvoer van de vorige opdracht. Noteer de waarde van de
ideigenschap voor deze resourcegroep, omdat deze in de volgende stap moet worden gebruikt.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example", "location": "westus", "name": "msdocs-identity-example", "type": "Microsoft.Resources/resourceGroups" }Opmerking
In dit voorbeeld zou de
idwaarde/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-examplezijn. In dit voorbeeld worden fictieve gegevens gebruikt en uw id is anders dan in dit voorbeeld. Deze tekenreeks is een ingekort voorbeeld van de uitvoer.Wijs de nieuwe rol toe met behulp van
az role assignment create. Gebruik de identificatie van de resourcegroep voor het--scopeargument, de identificatie van de rol voor het-roleargument, en de unieke identificatie voor uw identiteit voor het--assigneeargument.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"Opmerking
In deze voorbeeldopdracht is de
scopeopdracht ingesteld op het fictieve voorbeeld/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-exampleuit het voorbeeld van de vorige stap. De identificatie van uw resourcegroep is verschillend van dit voorbeeld. Derolewas ook ingesteld op de fictieve/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1. Nogmaals, uw rol-id zou uniek zijn.Bekijk de uitvoer van de opdracht. De uitvoer bevat een unieke id voor de toewijzing in de
ideigenschap.{ "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" }Opmerking
In dit voorbeeld is de eigenschap
id/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1, wat een ander fictief voorbeeld is.Herhaal deze stappen om toegang te verlenen tot het account vanaf andere identiteiten die u wilt gebruiken.
Aanbeveling
U kunt deze stappen herhalen voor zo veel identiteiten als u wilt. Deze stappen worden doorgaans ten minste herhaald om ontwikkelaars toegang te geven tot een account met behulp van hun menselijke identiteit en om toepassingen toegang te geven tot de gegevens met behulp van een beheerde identiteit.
Vermeld alle roldefinities die zijn gekoppeld aan uw Azure Cosmos DB-account met behulp van
az role definition list.az role definition list \ --name "Cosmos DB Operator"Controleer de uitvoer en zoek de roldefinitie met de naam Cosmos DB-operator. De uitvoer bevat de unieke id van de roldefinitie in de
ideigenschap. Noteer deze waarde omdat deze is vereist voor gebruik in de toewijzingsstap verderop in deze handleiding.[ { "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", } ]Opmerking
In dit voorbeeld zou de
idwaarde/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aazijn. In dit voorbeeld worden fictieve gegevens gebruikt en uw id is anders dan in dit voorbeeld. De id (230815da-be43-4aae-9cb4-875f7bd000aa) is echter wereldwijd uniek in alle roldefinities in Azure.Maak een nieuw Bicep-bestand om uw roldefinitie te definiëren. Geef het bestand de naam control-plane-role-definition.bicep. Voeg deze
actionstoe aan de definitie:Description Microsoft.DocumentDb/*Hiermee schakelt u alle mogelijke acties in. 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.idImplementeer de Bicep-sjabloon met behulp van
az deployment group create. Geef de naam op van de Bicep-sjabloon en de Azure-resourcegroep.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --template-file control-plane-role-definition.bicepControleer de uitvoer van de implementatie. De uitvoer bevat de unieke id van de roldefinitie in de
properties.outputs.definitionId.valueeigenschap. Noteer deze waarde omdat deze is vereist voor gebruik in de toewijzingsstap verderop in deze handleiding.{ "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" } } } }Opmerking
In dit voorbeeld zou de
idwaarde/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1zijn. In dit voorbeeld worden fictieve gegevens gebruikt en uw id is anders dan in dit voorbeeld. Dit voorbeeld is een subset van de typische JSON die wordt uitgevoerd vanuit de implementatie voor duidelijkheid.Maak een nieuw Bicep-bestand om uw roltoewijzing te definiëren. Geef het bestand de naam 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 } }Maak een nieuw Bicep-parametersbestand met de naam control-plane-role-assignment.
bicepparam. In dit parameterbestand; wijs de eerder vastgelegde roldefinitie-id's toe aan deroleDefinitionIdparameter en de unieke id voor uw identiteit aan deidentityIdparameter.using './control-plane-role-assignment.bicep' param roleDefinitionId = '<id-of-new-role-definition>' param identityId = '<id-of-existing-identity>'Implementeer deze Bicep-sjabloon met behulp van
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.bicepHerhaal deze stappen om toegang te verlenen tot het account vanaf andere identiteiten die u wilt gebruiken.
Aanbeveling
U kunt deze stappen herhalen voor zo veel identiteiten als u wilt. Deze stappen worden doorgaans ten minste herhaald om ontwikkelaars toegang te geven tot een account met behulp van hun menselijke identiteit en om toepassingen toegang te geven tot de gegevens met behulp van een beheerde identiteit.
Meld u aan bij Azure Portal (https://portal.azure.com).
Voer de resourcegroep in de algemene zoekbalk in.
Selecteer resourcegroepen in Services.
Selecteer uw bestaande resourcegroep in het deelvenster Resourcegroepen .
Opmerking
Deze voorbeeldschermafbeelding bevat de
msdocs-identity-exampleresourcegroep. De werkelijke naam van de resourcegroep kan afwijken.Selecteer in het deelvenster voor de resourcegroep toegangsbeheer (IAM) in het servicemenu.
Selecteer Rollen in het deelvenster Toegangsbeheer (IAM).
Gebruik in de sectie Rollen de zoekterm Cosmos DB en zoek de roldefinitie van de Cosmos DB-operator . Selecteer vervolgens de optie Weergave die aan die definitie is gekoppeld.
Bekijk in het dialoogvenster roldefinitie van Cosmos DB-operator de acties die zijn toegewezen als onderdeel van deze roldefinitie.
Sluit het dialoogvenster voor de roldefinitie van Cosmos DB-operator.
Ga terug naar het Toegangsbeheer (IAM)-paneel en selecteer Toevoegen. Selecteer vervolgens Aangepaste rol toevoegen.
Configureer in het deelvenster Basisbeginselen de volgende opties en selecteer vervolgens Volgende:
Waarde Aangepaste rolnaam Azure Cosmos DB Control Plane OwnerBeschrijving Can perform all control plane actions for an Azure Cosmos DB account.Standaardmachtigingen Helemaal opnieuw beginnen
Selecteer Machtigingen toevoegen in het deelvenster Machtigingen. Zoek vervolgens in het dialoogvenster Machtigingen naar
DocumentDB. Selecteer ten slotte de optie Microsoft.DocumentDB .
Selecteer in het machtigingen-dialoogvenster alle acties voor
Microsoft.DocumentDB. Selecteer Vervolgens Toevoegen om terug te keren naar het deelvenster *Machtigingen .
Ga weer naar het deelvenster Machtigingen en bekijk hoe de lijst met machtigingen eruitziet. Selecteer vervolgens Beoordelen en maken.
Controleer in het deelvenster Beoordelen en maken de opgegeven opties voor de nieuwe roldefinitie. Ten slotte, selecteer Maken.
Wacht totdat de portal klaar is met het maken van de roldefinitie.
Selecteer In het deelvenster Toegangsbeheer (IAM)de optie Toevoegen en vervolgens Roltoewijzing toevoegen.
Zoek in het deelnemervenster naar
Azure Cosmos DBen selecteer vervolgens de rol Azure Cosmos DB-besturingsvlakbeheerder die eerder in deze handleiding is aangemaakt. Klik vervolgens op Volgende.
Aanbeveling
U kunt desgewenst de lijst met rollen filteren om alleen aangepaste rollen op te nemen.
Selecteer in het deelvenster Leden de optie Leden selecteren . Selecteer in het dialoogvenster Leden de identiteit die u dit toegangsniveau wilt verlenen voor uw Azure Cosmos DB-account en gebruik vervolgens de optie Selecteren om uw keuze te bevestigen.
Opmerking
Deze schermopname illustreert een voorbeeldgebruiker met de naam 'Kai Carter' met een principal van
kai@adventure-works.com.Terug in het deelvenster Leden controleert u het geselecteerde lid[s] en selecteert u Beoordelen en toewijzen.
Controleer in het deelvenster Beoordelen en toewijzen de opgegeven opties voor de nieuwe roltoewijzing. Selecteer ten slotte Beoordelen en toewijzen.
Wacht totdat de portal klaar is met het maken van de roltoewijzing.
Gebruik
Get-AzRoleDefinitiondit om alle roldefinities weer te geven die zijn gekoppeld aan uw Azure Cosmos DB-account.$parameters = @{ Name = "Cosmos DB Operator" } Get-AzRoleDefinition @parametersControleer de uitvoer en zoek de roldefinitie met de naam Ingebouwde Gegevensbijdrager van Cosmos DB. De uitvoer bevat de unieke id van de roldefinitie in de
Ideigenschap. Noteer deze waarde omdat deze is vereist voor gebruik in de toewijzingsstap verderop in deze handleiding.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 : {/}Opmerking
In dit voorbeeld zou de
Idwaarde230815da-be43-4aae-9cb4-875f7bd000aazijn. De id is wereldwijd uniek in alle roldefinities in Azure.Gebruik
Get-AzResourceGroupdit om de metagegevens voor uw huidige resourcegroep op te halen.$parameters = @{ Name = "<name-of-existing-resource-group>" } Get-AzResourceGroup @parametersBekijk de uitvoer van de vorige opdracht. Noteer de waarde van de
ResourceIdeigenschap voor deze resourcegroep, omdat deze in de volgende stap moet worden gebruikt.ResourceGroupName : msdocs-identity-example Location : westus ProvisioningState : Succeeded ResourceId : /subscriptions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1/resourcegroups/msdocs-identity-exampleOpmerking
In dit voorbeeld zou de
ResourceIdwaarde/subscriptions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1/resourcegroups/msdocs-identity-examplezijn. In dit voorbeeld worden fictieve gegevens gebruikt en uw id is anders dan in dit voorbeeld. Deze tekenreeks is een ingekort voorbeeld van de typische uitvoer.Importeer eerst de
Az.Resourcesmodule. Maak vervolgens een nieuwMicrosoft.Azure.Commands.Resources.Models.Authorization.PSRoleDefinitionobject. Maak in het object deze resourcedefinitie die de waarden opgeeft die hier worden vermeld. Voeg voor deAssignableScopes-lijst deResourceId-eigenschap toe van de resource-groep die in de vorige stap is genoteerd. Gebruik ten slotte het roldefinitieobject als invoer voor de-Roleparameter vanNew-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 $roleOpmerking
In dit voorbeeld wordt de
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-examplewaarde gebruikt die is vastgelegd in de vorige stap. De werkelijke resource-id kan afwijken.Controleer de uitvoer van de opdracht voor het maken van de definitie. De uitvoer bevat de unieke id van de roldefinitie in de
Nameeigenschap. Noteer deze waarde omdat deze is vereist voor gebruik in de toewijzingsstap verderop in deze handleiding.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}Opmerking
In dit voorbeeld zou de
NamewaardeAzure Cosmos DB Control Plane Ownerzijn. Dit voorbeeld is een subset van typische uitvoer van de implementatie ter verduidelijking.Wijs de nieuwe rol toe met behulp van
New-AzRoleAssignment. Gebruik de naam van de rol voor deRoleDefinitionNameparameter en de unieke id voor uw identiteit voor deObjectIdparameter.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" ObjectId = "<your-principal-identifier>" RoleDefinitionName = "Azure Cosmos DB Control Plane Owner" } New-AzRoleAssignment @parametersBekijk de uitvoer van de opdracht. De uitvoer bevat een unieke id voor de toewijzing in de
RoleAssignmentIdeigenschap.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-c5c5c5c5c5c5Opmerking
In dit voorbeeld is de eigenschap
RoleAssignmentId/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1, wat een ander fictief voorbeeld is. Dit voorbeeld is een subset van typische uitvoer van de implementatie ter verduidelijking.Herhaal deze stappen om toegang te verlenen tot het account vanaf andere identiteiten die u wilt gebruiken.
Aanbeveling
U kunt deze stappen herhalen voor zo veel identiteiten als u wilt. Deze stappen worden doorgaans ten minste herhaald om ontwikkelaars toegang te geven tot een account met behulp van hun menselijke identiteit en om toepassingen toegang te geven tot de gegevens met behulp van een beheerde identiteit.
Belangrijk
Als u een roldefinitie toewijst, moet u al de unieke id hebben van elke gebruikersaccount waaraan u rolgebaseerde toegangsrechten wilt verlenen.
Toegang op basis van rollen in het besturingsvlak valideren in code
Controleer of u de juiste toegang hebt verleend met behulp van toepassingscode en de 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);
}
}
Toegang op basis van rollen op gegevensvlak verlenen
Toegang tot gegevensvlakken verwijst naar de mogelijkheid om gegevens in een Azure-service te lezen en te schrijven zonder de mogelijkheid om resources in het account te beheren. Azure Cosmos DB-gegevensvlaktoegang kan bijvoorbeeld de volgende mogelijkheden bieden:
- Enkele account- en resourcemetagegevens lezen
- Items maken, lezen, bijwerken, patchen en verwijderen
- Tabelquery's uitvoeren
- Lezen uit de wijzigingenfeed van een container
- Opgeslagen procedures uitvoeren
- Conflicten in de conflictfeed beheren
Eerst moet u een roldefinitie voorbereiden met een lijst van dataActions om lees-, opvraag- en beheertoegang te verlenen tot gegevens in Azure Cosmos DB voor Table. In deze handleiding bereidt u een ingebouwde en aangepaste rol voor. Wijs vervolgens de zojuist gedefinieerde rol[s] toe aan een identiteit, zodat uw toepassingen toegang hebben tot gegevens in Azure Cosmos DB for Table.
Haal eerst de resource-id van het bestaande Azure Cosmos DB for Table-account op met
az cosmsodb showen sla deze op in een variabele.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-15Vermeld vervolgens alle roldefinities die zijn gekoppeld aan uw Azure Cosmos DB for Table-account met behulp van
az rest. Controleer ten slotte de uitvoer en zoek de roldefinitie met de naam Cosmos DB Built-in Data Contributor. De uitvoer bevat de unieke id van de roldefinitie in deideigenschap. Noteer deze waarde omdat deze is vereist voor gebruik in de toewijzingsstap verderop in deze handleiding.[ ..., { "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" } ... ]Opmerking
In dit voorbeeld zou de
idwaarde/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-table/tableRoleDefinitions/00000000-0000-0000-0000-000000000002zijn. In dit voorbeeld worden fictieve gegevens gebruikt en uw id is anders dan in dit voorbeeld. Deze voorbeelduitvoer wordt afgekapt.Maak een nieuw JSON-bestand met de naamrole-definition.json. Maak in dit bestand een resourcedefinitie die de hier vermelde gegevensacties opgeeft:
Description Microsoft.DocumentDB/databaseAccounts/readMetadataKan metagegevens op accountniveau lezen Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*Kan gegevensbewerkingen op containerniveau uitvoeren Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*Kan elke bewerking uitvoeren op items met containers { "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/*" ] } ] } }Maak of werk nu een roldefinitie bij met behulp van
az cosmosdb showenaz restsamen om een HTTP-aanvraagPUTuit te geven. Geef als onderdeel van deze aanvraag een unieke GUID op voor uw roldefinitie.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.jsonOpmerking
In dit voorbeeld is de unieke GUID
d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4opgegeven. U kunt elke unieke GUID opgeven voor uw eigen roldefinitie.De uitvoer moet nu aangeven dat de aanvraag in de wachtrij staat. Wacht nu tot de implementatie van de roldefinitie in de wachtrij is voltooid. Deze taak kan enkele minuten duren.
{ "status": "Enqueued" }Controleer ten slotte opnieuw de lijst met roldefinities met behulp van
az rest.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-15Gebruik
az cosmosdb showom de unieke id voor uw huidige account op te halen.az cosmosdb show \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-resource-group>" \ --query "{id:id}"Bekijk de uitvoer van de vorige opdracht. Noteer de waarde van de
ideigenschap voor dit account omdat deze in de volgende stap moet worden gebruikt.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-table" }Opmerking
In dit voorbeeld zou de
idwaarde/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-tablezijn. In dit voorbeeld worden fictieve gegevens gebruikt en uw id is anders dan in dit voorbeeld.Maak een nieuw JSON-bestand met de naamrole-assignment.json. Voeg in het JSON-bestand de unieke identificatie van uw identiteit en de unieke identificatie van de accountresource toe.
{ "properties": { "roleDefinitionId": "<account-resource-id>/tableRoleDefinitions/d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4", "scope": "<account-resource-id>", "principalId": "<id-of-existing-identity>" } }Opmerking
In dit voorbeeld is de unieke GUID
d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4opgegeven. U kunt de unieke GUID gebruiken die u eerder hebt gebruikt voor uw eigen roldefinitie.Aanbeveling
In de systeemeigen implementatie van op rollen gebaseerd toegangsbeheer van Azure Cosmos DB verwijst het bereik naar de granulariteit van resources binnen een account waarvoor u machtigingen wilt toepassen. Op het hoogste niveau kunt u een toewijzing van op rollen gebaseerd toegangsbeheer op basis van een gegevensvlak opgeven voor het hele account met behulp van het grootste bereik. Dit bereik omvat alle databases en containers binnen het account:
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/U kunt ook de roltoewijzing van uw datavlak toewijzen aan een specifieke database:
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>Ten slotte kunt u de opdracht beperken tot één container, de meest fijnmazige reikwijdte:
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>/colls/<container-name>In veel gevallen kunt u het relatieve bereik gebruiken in plaats van het volledig gekwalificeerde bereik. U kunt dit relatieve bereik bijvoorbeeld gebruiken om machtigingen voor op rollen gebaseerd toegangsbeheer op basis van gegevensvlak te verlenen aan een specifieke database en container vanuit een Azure CLI-opdracht:
/dbs/<database-name>/colls/<container-name>U kunt ook universele toegang verlenen tot alle databases en containers met behulp van het relatieve bereik:
/Maak nu een roltoewijzing aan of werk deze bij door
az cosmosdb showenaz restsamen te gebruiken om een HTTP-verzoek uit te voeren metPUT. Geef als onderdeel van deze aanvraag een unieke GUID op voor uw roltoewijzing.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.jsonOpmerking
In dit voorbeeld is de unieke GUID
e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5opgegeven. U kunt elke unieke GUID opgeven voor uw eigen roltoewijzing.
Haal eerst de resource-id van het bestaande Azure Cosmos DB for Table-account op met
az cosmsodb showen sla deze op in een variabele.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-15Vermeld vervolgens alle roldefinities die zijn gekoppeld aan uw Azure Cosmos DB for Table-account met behulp van
az rest. Controleer ten slotte de uitvoer en zoek de roldefinitie met de naam Cosmos DB Built-in Data Contributor. De uitvoer bevat de unieke id van de roldefinitie in deideigenschap. Noteer deze waarde omdat deze is vereist voor gebruik in de toewijzingsstap verderop in deze handleiding.[ ..., { "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" } ... ]Opmerking
In dit voorbeeld zou de
idwaarde/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-table/tableRoleDefinitions/00000000-0000-0000-0000-000000000002zijn. In dit voorbeeld worden fictieve gegevens gebruikt en uw id is anders dan in dit voorbeeld. Deze voorbeelduitvoer wordt afgekapt.Maak een nieuw Bicep-bestand om uw roldefinitie te definiëren. Geef het bestand de naam data-plane-role-definition.bicep. Voeg deze
dataActionstoe aan de definitie: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.idAanbeveling
In de systeemeigen implementatie van op rollen gebaseerd toegangsbeheer van Azure Cosmos DB verwijst het bereik naar de granulariteit van resources binnen een account waarvoor u machtigingen wilt toepassen. Op het hoogste niveau kunt u een toewijzing van op rollen gebaseerd toegangsbeheer op basis van een gegevensvlak opgeven voor het hele account met behulp van het grootste bereik. Dit bereik omvat alle databases en containers binnen het account:
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/U kunt ook de roltoewijzing van uw datavlak toewijzen aan een specifieke database:
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>Ten slotte kunt u de opdracht beperken tot één container, de meest fijnmazige reikwijdte:
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>/colls/<container-name>In veel gevallen kunt u het relatieve bereik gebruiken in plaats van het volledig gekwalificeerde bereik. U kunt dit relatieve bereik bijvoorbeeld gebruiken om machtigingen voor op rollen gebaseerd toegangsbeheer op basis van gegevensvlak te verlenen aan een specifieke database en container vanuit een Azure CLI-opdracht:
/dbs/<database-name>/colls/<container-name>U kunt ook universele toegang verlenen tot alle databases en containers met behulp van het relatieve bereik:
/Maak een nieuw Bicep-parametersbestand met de naam
data-plane-role-definition.bicepparam. Wijs in dit parameterbestand de naam van uw bestaande Azure Cosmos DB for Table-account toe aan deaccountNameparameter.using './data-plane-role-definition.bicep' param accountName = '<name-of-existing-table-account>'Implementeer de Bicep-sjabloon met behulp van
az deployment group create. Geef de naam op van de Bicep-sjabloon, het parameterbestand en de Azure-resourcegroep.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --parameters data-plane-role-definition.bicepparam \ --template-file data-plane-role-definition.bicepControleer de uitvoer van de implementatie. De uitvoer bevat de unieke id van de roldefinitie in de
properties.outputs.definitionId.valueeigenschap. Noteer deze waarde omdat deze is vereist voor gebruik in de toewijzingsstap verderop in deze handleiding.{ "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" } } } }Opmerking
In dit voorbeeld zou de
idwaarde/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-table-account/tableRoleDefinitions/dddddddd-9999-0000-1111-eeeeeeeeeeeezijn. In dit voorbeeld worden fictieve gegevens gebruikt en uw id is anders dan in dit voorbeeld. Dit voorbeeld is een subset van de typische JSON die wordt uitgevoerd vanuit de implementatie voor duidelijkheid.Maak een extra Bicep-bestand aan om een rol aan een identiteit toe te wijzen. Geef dit bestand de naam 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.idMaak een nieuw Bicep-parametersbestand met de naam
data-plane-role-assignment.bicepparam. In dit parameterbestand; wijs de naam van uw bestaande Azure Cosmos DB for Table-account toe aan deaccountNameparameter, de eerder vastgelegde roldefinitie-id's aan deroleDefinitionIdparameter en de unieke id voor uw identiteit aan deidentityIdparameter.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>'Implementeer deze Bicep-sjabloon met behulp van
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.bicepHerhaal deze stappen om toegang te verlenen tot het account vanaf andere identiteiten die u wilt gebruiken.
Aanbeveling
U kunt deze stappen herhalen voor zo veel identiteiten als u wilt. Deze stappen worden doorgaans ten minste herhaald om ontwikkelaars toegang te geven tot een account met behulp van hun menselijke identiteit en om toepassingen toegang te geven tot gegevens met behulp van een beheerde identiteit.
Gebruik
Get-AzCosmosDBAccountdit om de resource-id van het bestaande Azure Cosmos DB for Table-account op te halen en op te slaan in een variabele.$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 @parametersGebruik vervolgens
Invoke-AzRestMethodom alle roldefinities weer te geven die zijn gekoppeld aan uw Azure Cosmos DB for Table-account. Controleer de uitvoer en zoek de roldefinitie met de naam Ingebouwde Gegevensbijdrager van Cosmos DB. De uitvoer bevat de unieke id van de roldefinitie in deIdeigenschap. Noteer deze waarde omdat deze is vereist voor gebruik in de toewijzingsstap verderop in deze handleiding.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" } ... ] }, ... ] }Opmerking
In dit voorbeeld zou de
Idwaarde/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-table/tableRoleDefinitions/00000000-0000-0000-0000-000000000002zijn. In dit voorbeeld worden fictieve gegevens gebruikt en uw id is anders dan in dit voorbeeld. Deze voorbeelduitvoer wordt afgekapt.Maak of werk uw roldefinitie bij met behulp van
Get-AzCosmosDBAccountenInvoke-AzRestMethodsamen om een HTTP-aanvraagPUTuit te geven. Geef als onderdeel van deze aanvraag ook een unieke GUID op voor uw roldefinitie. Maak ten slotte een payload van een resourcedefinitie die de gegevensacties specificeert die hier worden vermeld:Description Microsoft.DocumentDB/databaseAccounts/readMetadataKan metagegevens op accountniveau lezen Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*Kan gegevensbewerkingen op containerniveau uitvoeren Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*Kan elke bewerking uitvoeren op items met containers $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 @parametersOpmerking
In dit voorbeeld is de unieke GUID
d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4opgegeven. U kunt elke unieke GUID opgeven voor uw eigen roldefinitie.Aanbeveling
In de systeemeigen implementatie van op rollen gebaseerd toegangsbeheer van Azure Cosmos DB verwijst het bereik naar de granulariteit van resources binnen een account waarvoor u machtigingen wilt toepassen. Op het hoogste niveau kunt u een toewijzing van op rollen gebaseerd toegangsbeheer op basis van een gegevensvlak opgeven voor het hele account met behulp van het grootste bereik. Dit bereik omvat alle databases en containers binnen het account:
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/U kunt ook de roltoewijzing van uw datavlak toewijzen aan een specifieke database:
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>Ten slotte kunt u de opdracht beperken tot één container, de meest fijnmazige reikwijdte:
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>/colls/<container-name>In veel gevallen kunt u het relatieve bereik gebruiken in plaats van het volledig gekwalificeerde bereik. U kunt dit relatieve bereik bijvoorbeeld gebruiken om machtigingen voor op rollen gebaseerd toegangsbeheer op basis van gegevensvlak te verlenen aan een specifieke database en container vanuit een Azure CLI-opdracht:
/dbs/<database-name>/colls/<container-name>U kunt ook universele toegang verlenen tot alle databases en containers met behulp van het relatieve bereik:
/De uitvoer moet worden geretourneerd met een statuscode van 200. Wacht nu tot de implementatie van de roldefinitie in de wachtrij is voltooid. Deze taak kan enkele minuten duren.
StatusCode : 200 ...Controleer ten slotte opnieuw de lijst met roldefinities met behulp van
Invoke-AzRestMethod.$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 @parametersGebruik `Get-AzCosmosDBAccount` om de unieke ID voor uw huidige account op te halen.
$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-table-account>" } Get-AzCosmosDBAccount @parameters | Select -Property IdBekijk de uitvoer van de vorige opdracht. Noteer de waarde van de
Ideigenschap voor dit account omdat deze in de volgende stap moet worden gebruikt.Id -- /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-tableOpmerking
In dit voorbeeld zou de
Idwaarde/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-tablezijn. In dit voorbeeld worden fictieve gegevens gebruikt en uw id is anders dan in dit voorbeeld.Maak nu een roltoewijzing aan of werk deze bij door
Get-AzCosmosDBAccountenInvoke-AzRestMethodsamen te gebruiken om een HTTP-verzoek uit te voeren metPUT. Geef als onderdeel van deze aanvraag een unieke GUID op voor uw roltoewijzing. Maak ten slotte een payload voor resourcetoewijzing die de unieke id voor uw identiteit specificeert.$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 @parametersOpmerking
In dit voorbeeld is de unieke GUID
e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5opgegeven. U kunt elke unieke GUID opgeven voor uw eigen roltoewijzing.
Waarschuwing
Het beheren van op rollen gebaseerd toegangsbeheer op basis van gegevensvlak wordt niet ondersteund in Azure Portal.
Toegang op basis van rollen in gegevensvlak valideren in code
Controleer of u de juiste toegang hebt verleend met behulp van toepassingscode en de 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>");
}
}