Op rollen gebaseerd toegangsbeheer op basis van besturingsvlak gebruiken met Azure Cosmos DB for NoSQL
VAN TOEPASSING OP: NoSQL
Diagram van de volgorde van de implementatiehandleiding, inclusief deze locaties, in volgorde: Overzicht, Concepten, Voorbereiden, op rollen gebaseerd toegangsbeheer, Netwerk en Verwijzing. De locatie op basis van op rollen gebaseerd toegangsbeheer is momenteel gemarkeerd.
In dit artikel worden de stappen beschreven voor het verlenen van identiteitstoegang voor het beheren van een Azure Cosmos DB for NoSQL-account en de bijbehorende resources.
Belangrijk
De stappen in dit artikel hebben alleen betrekking op toegang tot het beheerniveau om bewerkingen uit te voeren op het account zelf of op resources binnen de hiërarchie van het account. Zie Op rollen gebaseerde toegang verlenen tot gegevensvlak voor informatie over het beheren van items en het uitvoeren van query's voor het gegevensvlak.
Vereisten
- Een Azure-account met een actief abonnement. Gratis een account maken
- Een bestaand Azure Cosmos DB-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.
Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren. Als u in Windows of macOS werkt, kunt u Azure CLI uitvoeren in een Docker-container. Zie De Azure CLI uitvoeren in een Docker-container voor meer informatie.
Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met behulp van de opdracht az login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Zie Verifiëren bij Azure met behulp van Azure CLI voor andere aanmeldingsopties.
Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Zie Extensies gebruiken en beheren met de Azure CLIvoor meer informatie over extensies.
Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.
- 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.
Roldefinitie voorbereiden
Eerst moet u een roldefinitie voorbereiden met een lijst van actions
om toegang te verlenen voor het beheren van accountbronnen in Azure Cosmos DB.
Vermeld alle roldefinities die zijn gekoppeld aan uw Azure Cosmos DB-account met behulp van az role definition list
. Controleer de uitvoer en zoek de roldefinitie met de naam Cosmos DB-operator. De uitvoer bevat de unieke id van de roldefinitie in de id
eigenschap. Noteer deze waarde omdat deze is vereist voor gebruik in de toewijzingsstap verderop in deze handleiding.
az role definition list \
--name "Cosmos DB Operator"
[
{
"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",
}
]
Notitie
In dit voorbeeld zou de id
waarde /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa
zijn. 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.
Meld u aan bij Azure Portal (https://portal.azure.com).
Voer de resourcegroep in de algemene zoekbalk in.
Selecteer Services en kies Resourcegroepen.
Selecteer uw bestaande resourcegroep in het deelvenster Resourcegroepen .
Notitie
Deze voorbeeldschermafbeelding bevat de
msdocs-identity-example
resourcegroep. 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 Roldefinitie van Cosmos DB-operator .
Gebruik Get-AzRoleDefinition
dit om alle roldefinities weer te geven die zijn gekoppeld aan uw Azure Cosmos DB-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 de Id
eigenschap. Noteer deze waarde omdat deze is vereist voor gebruik in de toewijzingsstap verderop in deze handleiding.
$parameters = @{
Name = "Cosmos DB Operator"
}
Get-AzRoleDefinition @parameters
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 : {/}
Notitie
In dit voorbeeld zou de Id
waarde 230815da-be43-4aae-9cb4-875f7bd000aa
zijn. De id is wereldwijd uniek in alle roldefinities in Azure.
Rol toewijzen aan identiteit
Wijs nu de zojuist gedefinieerde rol toe aan een identiteit, zodat uw toepassingen toegang hebben tot resources in Azure Cosmos DB.
Belangrijk
Voor deze toewijzingstaak moet u al in het bezit zijn van de unieke id van iedere identiteit waaraan u rolgebaseerde toegangsbeheermachtigingen wilt verlenen.
Gebruik
az group show
dit 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
id
eigenschap 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" }
Notitie
In dit voorbeeld zou de
id
waarde/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
zijn. In dit voorbeeld worden fictieve gegevens gebruikt en uw id is anders dan in dit voorbeeld. Dit is een verkort voorbeeld van de uitvoer.Wijs de nieuwe rol toe met behulp van
az role assignment create
. Gebruik de id van de resourcegroep voor het--scope
argument, de id van de rol voor het-role
argument en de unieke id voor uw identiteit voor het--assignee
argument.az role assignment create \ --assignee "<your-principal-identifier>" \ --role "subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0" \ --scope "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
Notitie
In deze voorbeeldopdracht is de
scope
opdracht ingesteld op het fictieve voorbeeld/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
uit het voorbeeld van de vorige stap. De id van uw resourcegroep is anders dan in dit voorbeeld. Derole
was ook ingesteld op de fictieve/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
. Nogmaals, uw rol-id zou uniek zijn.Bekijk de uitvoer van de opdracht. De uitvoer bevat een unieke id voor de toewijzing in de
id
eigenschap.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "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/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "scope": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example", "type": "Microsoft.Authorization/roleAssignments" }
Notitie
In dit voorbeeld is de
id
eigenschap/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
, wat een ander fictief voorbeeld is.Herhaal deze stappen om toegang te verlenen tot het account vanaf andere identiteiten die u wilt gebruiken.
Tip
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 met behulp van een beheerde identiteit.
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 deroleDefinitionId
parameter en de unieke id voor uw identiteit aan deidentityId
parameter.using './control-plane-role-assignment.bicep' param roleDefinitionId = '<id-of-new-role-definition>' param identityId = '<id-of-existing-identity>'
Implementeer deze Bicep-sjabloon met
az deployment group create
.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --parameters control-plane-role-assignment.bicepparam \ --template-file control-plane-role-assignment.bicep
Herhaal deze stappen om toegang te verlenen tot het account vanaf andere identiteiten die u wilt gebruiken.
Tip
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 met behulp van een beheerde identiteit.
Selecteer In het deelvenster Toegangsbeheer (IAM) de optie Toevoegen en vervolgens Roltoewijzing toevoegen.
In het deelvenster Rol zoekt u naar
Azure Cosmos DB
en selecteert u de rol Azure Cosmos DB Control Plane Owner die eerder in deze handleiding is gemaakt. Selecteer vervolgens Volgende.Tip
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.
Notitie
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.
Wijs de nieuwe rol toe met behulp van
New-AzRoleAssignment
. Gebruik de naam van de rol voor deRoleDefinitionName
parameter en de unieke id voor uw identiteit voor deObjectId
parameter.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" ObjectId = "<your-principal-identifier>" RoleDefinitionName = "Azure Cosmos DB Control Plane Owner" } New-AzRoleAssignment @parameters
Bekijk de uitvoer van de opdracht. De uitvoer bevat een unieke id voor de toewijzing in de
RoleAssignmentId
eigenschap.RoleAssignmentName : ffffffff-5555-6666-7777-aaaaaaaaaaaa RoleAssignmentId : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0 Scope : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example DisplayName : Kai Carter SignInName : <kai@adventure-works.com> RoleDefinitionName : Azure Cosmos DB Control Plane Owner RoleDefinitionId : e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5
Notitie
In dit voorbeeld is
RoleAssignmentId
de/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
eigenschap een ander fictief voorbeeld. Dit is een subset van de typische uitvoer van de implementatie voor duidelijkheid.Herhaal deze stappen om toegang te verlenen tot het account vanaf andere identiteiten die u wilt gebruiken.
Tip
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 met behulp van een beheerde identiteit.
Toegang tot het controlevlak valideren in code
Controleer ten slotte of u op de juiste wijze toegang hebt verleend met behulp van toepassingscode en de Azure Management SDK in de programmeertaal van uw voorkeur.
using Azure.Identity;
using Azure.ResourceManager;
DefaultAzureCredential credential = new();
ArmClient client = new(credential);
Belangrijk
In dit codevoorbeeld worden de Azure.ResourceManager.CosmosDB
en Azure.Identity
bibliotheken van NuGet gebruikt.