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 besturingsvlak om bewerkingen uit te voeren op het account zelf van resources in 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 quickstart voor Bash in 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. Raadpleeg Aanmelden bij Azure CLI voor aanvullende aanmeldingsopties.
Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Raadpleeg Extensies gebruiken met Azure CLI voor 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 met om toegang te verlenen tot het beheren van actions
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 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.
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 is /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa
de id
waarde . 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 resourcegroepen in Services.
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 is 230815da-be43-4aae-9cb4-875f7bd000aa
de Id
waarde . 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 de unieke id hebben van elke identiteit die u op rollen gebaseerd 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 is
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
deid
waarde . In dit voorbeeld worden fictieve gegevens gebruikt en uw id is anders dan in dit voorbeeld. Dit is een afgekapt 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
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
deid
eigenschap een ander fictief voorbeeld.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 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.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.
Zoek
Azure Cosmos DB
en selecteer in het deelvenster Rol de rol eigenaar van het Azure Cosmos DB-besturingsvlak die u eerder in deze handleiding hebt 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
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
deRoleAssignmentId
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 besturingsvlak 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.