Usare il controllo degli accessi in base al ruolo del piano di controllo con Azure Cosmos DB per NoSQL
SI APPLICA A: NoSQL
Diagramma della sequenza della guida alla distribuzione, inclusi questi percorsi, in ordine: Panoramica, Concetti, Preparazione, Controllo degli accessi in base al ruolo, Rete e Riferimento. Il percorso "Controllo degli accessi in base al ruolo" è attualmente evidenziato.
Questo articolo illustra i passaggi per concedere a un'identità l'accesso per gestire un account Azure Cosmos DB per NoSQL e le relative risorse.
Importante
I passaggi descritti in questo articolo riguardano solo l'accesso al piano di controllo per eseguire operazioni sull'account stesso di qualsiasi risorsa nella gerarchia dell'account. Per informazioni su come gestire gli elementi ed eseguire query per il piano dati, vedere Concedere l'accesso in base al ruolo del piano dati.
Prerequisiti
- Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
- Un account Azure Cosmos DB esistente.
- Una o più identità esistenti in Microsoft Entra ID.
Usare l'ambiente Bash in Azure Cloud Shell. Per altre informazioni, vedere Avvio rapido su Bash in Azure Cloud Shell.
Se si preferisce eseguire i comandi di riferimento dell'interfaccia della riga di comando in locale, installare l'interfaccia della riga di comando di Azure. Per l'esecuzione in Windows o macOS, è consigliabile eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker. Per altre informazioni, vedere Come eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker.
Se si usa un'installazione locale, accedere all'interfaccia della riga di comando di Azure con il comando az login. Per completare il processo di autenticazione, seguire la procedura visualizzata nel terminale. Per altre opzioni di accesso, vedere Accedere tramite l'interfaccia della riga di comando di Azure.
Quando richiesto, al primo utilizzo installare l'estensione dell'interfaccia della riga di comando di Azure. Per altre informazioni sulle estensioni, vedere Usare le estensioni con l'interfaccia della riga di comando di Azure.
Eseguire az version per trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, eseguire az upgrade.
- Se si sceglie di usare Azure PowerShell in locale:
- Installare la versione più recente del modulo Az di PowerShell.
- Connettersi all'account Azure con il cmdlet Connect-AzAccount.
- Se si sceglie di usare Azure Cloud Shell:
- Vedere Panoramica di Azure Cloud Shell per altre informazioni.
Preparare la definizione del ruolo
Prima di tutto, è necessario preparare una definizione di ruolo con un elenco di actions
per concedere l'accesso per gestire le risorse dell'account in Azure Cosmos DB.
Elencare tutte le definizioni di ruolo associate all'account Azure Cosmos DB usando az role definition list
. Esaminare l'output e individuare la definizione del ruolo denominata Collaboratore dati predefinito di Cosmos DB. L'output contiene l'identificatore univoco della definizione del ruolo nella id
proprietà . Registrare questo valore perché è necessario usare nel passaggio di assegnazione più avanti in questa guida.
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",
}
]
Nota
Per questo esempio, il valore id
sarebbe /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa
. In questo esempio vengono usati dati fittizi e l'identificatore è diverso da questo esempio. Tuttavia, l'identificatore (230815da-be43-4aae-9cb4-875f7bd000aa
) è globalmente univoco in tutte le definizioni di ruolo in Azure.
Accedere al portale di Azure (https://portal.azure.com).
Immettere Gruppo di risorse nella barra di ricerca globale.
In Servizi selezionare Gruppi di risorse.
Nel riquadro Gruppi di risorse selezionare il gruppo di risorse esistente.
Nota
Questo screenshot di esempio include il
msdocs-identity-example
gruppo di risorse. Il nome effettivo del gruppo di risorse può essere diverso.Nel riquadro del gruppo di risorse selezionare Controllo di accesso (IAM) nel menu del servizio.
Nel riquadro Controllo di accesso (IAM) selezionare Ruoli.
Nella sezione Ruoli usare la frase di ricerca Cosmos DB e individuare la definizione del ruolo Operatore Cosmos DB. Selezionare quindi l'opzione Visualizza associata a tale definizione.
Nella finestra di dialogo definizione del ruolo Operatore Cosmos DB osservare le azioni assegnate come parte di questa definizione di ruolo.
Chiudere la finestra di dialogo definizione del ruolo Operatore Cosmos DB.
Usare Get-AzRoleDefinition
per elencare tutte le definizioni di ruolo associate all'account Azure Cosmos DB. Esaminare l'output e individuare la definizione del ruolo denominata Collaboratore dati predefinito di Cosmos DB. L'output contiene l'identificatore univoco della definizione del ruolo nella Id
proprietà . Registrare questo valore perché è necessario usare nel passaggio di assegnazione più avanti in questa guida.
$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 : {/}
Nota
Per questo esempio, il valore Id
sarebbe 230815da-be43-4aae-9cb4-875f7bd000aa
. L'identificatore è globalmente univoco in tutte le definizioni di ruolo in Azure.
Assegnare un ruolo all'identità
Assegnare ora il ruolo appena definito a un'identità in modo che le applicazioni possano accedere alle risorse in Azure Cosmos DB.
Importante
Questa attività di assegnazione richiede di avere già l'identificatore univoco di qualsiasi identità che si vuole concedere autorizzazioni di controllo degli accessi in base al ruolo.
Usare
az group show
per ottenere di nuovo i metadati per il gruppo di risorse corrente.az group show \ --name "<name-of-existing-resource-group>"
Osservare l'output del comando precedente. Registrare il valore della
id
proprietà per questo gruppo di risorse perché è necessario usare nel passaggio successivo.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example", "location": "westus", "name": "msdocs-identity-example", "type": "Microsoft.Resources/resourceGroups" }
Nota
Per questo esempio, il valore
id
sarebbe/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
. In questo esempio vengono usati dati fittizi e l'identificatore è diverso da questo esempio. Questo è un esempio troncato dell'output.Assegnare il nuovo ruolo usando
az role assignment create
. Usare l'identificatore del gruppo di risorse per l'argomento--scope
, l'identificatore del ruolo per l'argomento-role
e l'identificatore univoco per l'identità dell'argomento--assignee
.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"
Nota
In questo comando di esempio l'oggetto
scope
è stato impostato sull'esempio/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
fittizio dell'esempio del passaggio precedente. L'identificatore del gruppo di risorse sarà diverso da questo esempio. Èrole
stato impostato anche sull'oggetto fittizio/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
. Anche in questo caso, l'identificatore del ruolo sarà distinto.Osservare l'output dal comando . L'output include un identificatore univoco per l'assegnazione nella
id
proprietà .{ "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" }
Nota
In questo esempio la
id
proprietà è/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
un altro esempio fittizio.Ripetere questi passaggi per concedere l'accesso all'account da qualsiasi altra identità che si vuole usare.
Suggerimento
È possibile ripetere questi passaggi per tutte le identità desiderate. In genere, questi passaggi vengono almeno ripetuti per consentire agli sviluppatori di accedere a un account usando la propria identità umana e consentire alle applicazioni di accedere usando un'identità gestita.
Creare un nuovo file Bicep per definire l'assegnazione di ruolo. Assegnare al file il nome 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 } }
Creare un nuovo file di parametri Bicep denominato control-plane-role-assignment.
bicepparam
In questo file di parametri; assegnare gli identificatori di definizione delroleDefinitionId
ruolo registrati in precedenza al parametro e l'identificatore univoco per l'identità alidentityId
parametro .using './control-plane-role-assignment.bicep' param roleDefinitionId = '<id-of-new-role-definition>' param identityId = '<id-of-existing-identity>'
Distribuire questo modello Bicep usando
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
Ripetere questi passaggi per concedere l'accesso all'account da qualsiasi altra identità che si vuole usare.
Suggerimento
È possibile ripetere questi passaggi per tutte le identità desiderate. In genere, questi passaggi vengono almeno ripetuti per consentire agli sviluppatori di accedere a un account usando la propria identità umana e consentire alle applicazioni di accedere usando un'identità gestita.
Nel riquadro Controllo di accesso (IAM) selezionare Aggiungi e quindi Aggiungi assegnazione di ruolo.
Nel riquadro Ruolo cercare
Azure Cosmos DB
e quindi selezionare il ruolo Proprietario piano di controllo di Azure Cosmos DB creato in precedenza in questa guida. Quindi seleziona Avanti.Suggerimento
Facoltativamente, è possibile filtrare l'elenco dei ruoli in modo da includere solo ruoli personalizzati.
Nel riquadro Membri selezionare l'opzione Seleziona membri. Nella finestra di dialogo membri selezionare l'identità che si vuole concedere a questo livello di accesso per l'account Azure Cosmos DB e quindi usare l'opzione Seleziona per confermare la scelta.
Nota
Questo screenshot illustra un utente di esempio denominato "Kai Carter" con un'entità di sicurezza di
kai@adventure-works.com
.Tornare al riquadro Membri , esaminare il membro selezionato[s] e quindi selezionare Rivedi e assegna.
Nel riquadro Rivedi e assegna esaminare le opzioni specificate per la nuova assegnazione di ruolo. Selezionare infine Rivedi e assegna.
Attendere che il portale finisca di creare l'assegnazione di ruolo.
Assegnare il nuovo ruolo usando
New-AzRoleAssignment
. Usare il nome del ruolo per ilRoleDefinitionName
parametro e l'identificatore univoco dell'identità per ilObjectId
parametro .$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" ObjectId = "<your-principal-identifier>" RoleDefinitionName = "Azure Cosmos DB Control Plane Owner" } New-AzRoleAssignment @parameters
Osservare l'output dal comando . L'output include un identificatore univoco per l'assegnazione nella
RoleAssignmentId
proprietà .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
Nota
In questo esempio la
RoleAssignmentId
proprietà è/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
un altro esempio fittizio. Si tratta di un subset dell'output tipico della distribuzione per maggiore chiarezza.Ripetere questi passaggi per concedere l'accesso all'account da qualsiasi altra identità che si vuole usare.
Suggerimento
È possibile ripetere questi passaggi per tutte le identità desiderate. In genere, questi passaggi vengono almeno ripetuti per consentire agli sviluppatori di accedere a un account usando la propria identità umana e consentire alle applicazioni di accedere usando un'identità gestita.
Convalidare l'accesso del piano di controllo nel codice
Verificare infine di aver concesso correttamente l'accesso usando il codice dell'applicazione e Azure Management SDK nel linguaggio di programmazione preferito.
using Azure.Identity;
using Azure.ResourceManager;
DefaultAzureCredential credential = new();
ArmClient client = new(credential);
Importante
Questo esempio di codice usa le Azure.ResourceManager.CosmosDB
librerie e Azure.Identity
di NuGet.