Använda rollbaserad åtkomstkontroll för kontrollplan med Azure Cosmos DB för NoSQL
GÄLLER FÖR: NoSQL
Diagram över sekvensen i distributionsguiden, inklusive dessa platser, i ordning: Översikt, Begrepp, Förbereda, Rollbaserad åtkomstkontroll, Nätverk och Referens. Platsen rollbaserad åtkomstkontroll är för närvarande markerad.
Den här artikeln går igenom stegen för att bevilja en identitet åtkomst för att hantera ett Azure Cosmos DB för NoSQL-konto och dess resurser.
Viktigt!
Stegen i den här artikeln omfattar endast åtkomst till kontrollplan för att utföra åtgärder på själva kontot för alla resurser i kontots hierarki. Information om hur du hanterar objekt och kör frågor för dataplanet finns i bevilja rollbaserad åtkomst för dataplanet.
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
- Ett befintligt Azure Cosmos DB-konto.
- En eller flera befintliga identiteter i Microsoft Entra-ID.
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Snabbstart för Bash i Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Logga in med Azure CLI.
När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda tillägg med Azure CLI.
Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
- Om du väljer att använda Azure PowerShell lokalt:
- Installera den senaste versionen av Az PowerShell-modulen.
- Anslut till ditt Azure-konto med hjälp av cmdleten Connect-AzAccount .
- Om du väljer att använda Azure Cloud Shell:
Förbereda rolldefinition
Först måste du förbereda en rolldefinition med en lista över actions
för att bevilja åtkomst för att hantera kontoresurser i Azure Cosmos DB.
Visa en lista över alla rolldefinitioner som är associerade med ditt Azure Cosmos DB-konto med hjälp av az role definition list
. Granska utdata och leta upp rolldefinitionen med namnet Cosmos DB Built-in Data Contributor. Utdata innehåller den unika identifieraren för rolldefinitionen i egenskapen id
. Registrera det här värdet som det krävs för att använda i tilldelningssteget senare i den här guiden.
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",
}
]
Kommentar
I det här exemplet id
skulle värdet vara /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa
. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet. Identifieraren (230815da-be43-4aae-9cb4-875f7bd000aa
) är dock globalt unik för alla rolldefinitioner i Azure.
Logga in på Azure Portal (https://portal.azure.com).
Ange Resursgrupp i fältet global sökning.
I Tjänster väljer du Resursgrupper.
I fönstret Resursgrupper väljer du din befintliga resursgrupp.
Kommentar
Den här skärmbilden
msdocs-identity-example
innehåller resursgruppen. Ditt faktiska resursgruppsnamn kan vara annorlunda.I fönstret för resursgruppen väljer du Åtkomstkontroll (IAM) på tjänstmenyn.
I fönstret Åtkomstkontroll (IAM) väljer du Roller.
I avsnittet Roller använder du sökfrasen Cosmos DB och letar upp rolldefinitionen Cosmos DB-operatör. Välj sedan alternativet Visa som är associerat med den definitionen.
I dialogrutan Rolldefinition för Cosmos DB-operatör observerar du de åtgärder som tilldelats som en del av den här rolldefinitionen.
Stäng dialogrutan för rolldefinition för Cosmos DB-operatör .
Använd Get-AzRoleDefinition
för att lista alla rolldefinitioner som är associerade med ditt Azure Cosmos DB-konto. Granska utdata och leta upp rolldefinitionen med namnet Cosmos DB Built-in Data Contributor. Utdata innehåller den unika identifieraren för rolldefinitionen i egenskapen Id
. Registrera det här värdet som det krävs för att använda i tilldelningssteget senare i den här guiden.
$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 : {/}
Kommentar
I det här exemplet Id
skulle värdet vara 230815da-be43-4aae-9cb4-875f7bd000aa
. Identifieraren är globalt unik för alla rolldefinitioner i Azure.
Tilldela roll till identitet
Tilldela nu den nyligen definierade rollen till en identitet så att dina program kan komma åt resurser i Azure Cosmos DB.
Viktigt!
Den här tilldelningsuppgiften kräver att du redan har den unika identifieraren för alla identiteter som du vill bevilja rollbaserade behörigheter för åtkomstkontroll.
Använd
az group show
för att hämta metadata för din aktuella resursgrupp igen.az group show \ --name "<name-of-existing-resource-group>"
Observera utdata från föregående kommando. Registrera värdet för egenskapen för den
id
här resursgruppen som den krävs för att använda i nästa steg.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example", "location": "westus", "name": "msdocs-identity-example", "type": "Microsoft.Resources/resourceGroups" }
Kommentar
I det här exemplet
id
skulle värdet vara/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet. Det här är ett trunkerat exempel på utdata.Tilldela den nya rollen med .
az role assignment create
Använd resursgruppens identifierare för--scope
argumentet, rollens identifierare för-role
argumentet och den unika identifieraren för din identitet till--assignee
argumentet.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"
Kommentar
I det här exempelkommandot
scope
angavs det fiktiva exemplet/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
från föregående stegs exempel. Resursgruppens identifierare skulle skilja sig från det här exemplet. Varrole
också inställd på fiktiva/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
. Återigen skulle rollidentifieraren vara distinkt.Observera utdata från kommandot. Utdata innehåller en unik identifierare för tilldelningen i egenskapen
id
.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/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" }
Kommentar
I det här exemplet är
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
egenskapenid
ett annat fiktivt exempel.Upprepa de här stegen för att bevilja åtkomst till kontot från andra identiteter som du vill använda.
Dricks
Du kan upprepa de här stegen för så många identiteter som du vill. Vanligtvis upprepas de här stegen åtminstone för att ge utvecklare åtkomst till ett konto med hjälp av sin mänskliga identitet och för att tillåta programåtkomst med hjälp av en hanterad identitet.
Skapa en ny Bicep-fil för att definiera rolltilldelningen. Ge filen namnet control-plane-role-assignment.bicep.
metadata description = 'Assign RBAC role for control plane access to Azure Cosmos DB.' @description('Id of the role definition to assign to the targeted principal in the context of the account.') param roleDefinitionId string @description('Id of the identity/principal to assign this role in the context of the account.') param identityId string resource assignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = { name: guid(subscription().id, resourceGroup().id, roleDefinitionId, identityId) scope: resourceGroup() properties: { roleDefinitionId: roleDefinitionId principalId: identityId } }
Skapa en ny Bicep-parameterfil med namnet control-plane-role-assignment.
bicepparam
. I den här parameterfilen; tilldela de tidigare registrerade rolldefinitionsidentifierarna till parameternroleDefinitionId
och den unika identifieraren för din identitet till parameternidentityId
.using './control-plane-role-assignment.bicep' param roleDefinitionId = '<id-of-new-role-definition>' param identityId = '<id-of-existing-identity>'
Distribuera den här Bicep-mallen med .
az deployment group create
az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --parameters control-plane-role-assignment.bicepparam \ --template-file control-plane-role-assignment.bicep
Upprepa de här stegen för att bevilja åtkomst till kontot från andra identiteter som du vill använda.
Dricks
Du kan upprepa de här stegen för så många identiteter som du vill. Vanligtvis upprepas de här stegen åtminstone för att ge utvecklare åtkomst till ett konto med hjälp av sin mänskliga identitet och för att tillåta programåtkomst med hjälp av en hanterad identitet.
I fönstret Åtkomstkontroll (IAM) väljer du Lägg till och sedan Lägg till rolltilldelning.
I fönstret Roll söker
Azure Cosmos DB
du efter och väljer sedan rollen Kontrollplansägare för Azure Cosmos DB som skapades tidigare i den här guiden. Välj sedan Nästa.Dricks
Du kan också filtrera listan med roller så att den endast innehåller anpassade roller.
I fönstret Medlemmar väljer du alternativet Välj medlemmar . I medlemsdialogrutan väljer du den identitet som du vill bevilja den här åtkomstnivån för ditt Azure Cosmos DB-konto och använder sedan alternativet Välj för att bekräfta ditt val.
Kommentar
Den här skärmbilden visar en exempelanvändare med namnet "Kai Carter" med huvudnamnet
kai@adventure-works.com
.Gå tillbaka till fönstret Medlemmar , granska de valda medlemmarna och välj sedan Granska + tilldela.
I fönstret Granska + tilldela granskar du de angivna alternativen för den nya rolltilldelningen. Välj slutligen Granska + tilldela.
Vänta tills portalen har skapat rolltilldelningen.
Tilldela den nya rollen med .
New-AzRoleAssignment
Använd rollens namn för parameternRoleDefinitionName
och den unika identifieraren för din identitet till parameternObjectId
.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" ObjectId = "<your-principal-identifier>" RoleDefinitionName = "Azure Cosmos DB Control Plane Owner" } New-AzRoleAssignment @parameters
Observera utdata från kommandot. Utdata innehåller en unik identifierare för tilldelningen i egenskapen
RoleAssignmentId
.RoleAssignmentName : ffffffff-5555-6666-7777-aaaaaaaaaaaa RoleAssignmentId : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/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
Kommentar
I det här exemplet är
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
egenskapenRoleAssignmentId
ett annat fiktivt exempel. Det här är en delmängd av de typiska utdata för distributionen för tydlighetens skull.Upprepa de här stegen för att bevilja åtkomst till kontot från andra identiteter som du vill använda.
Dricks
Du kan upprepa de här stegen för så många identiteter som du vill. Vanligtvis upprepas de här stegen åtminstone för att ge utvecklare åtkomst till ett konto med hjälp av sin mänskliga identitet och för att tillåta programåtkomst med hjälp av en hanterad identitet.
Verifiera åtkomst till kontrollplan i kod
Kontrollera slutligen att du har beviljat åtkomst korrekt med hjälp av programkod och Azure Management SDK på önskat programmeringsspråk.
using Azure.Identity;
using Azure.ResourceManager;
DefaultAzureCredential credential = new();
ArmClient client = new(credential);
Viktigt!
Det här kodexemplet använder biblioteken Azure.ResourceManager.CosmosDB
och Azure.Identity
från NuGet.