Condividi tramite


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 posizione corrente ('Controllo degli accessi in base al ruolo') nella sequenza della guida alla distribuzione.

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.

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.

  1. Accedere al portale di Azure (https://portal.azure.com).

  2. Immettere Gruppo di risorse nella barra di ricerca globale.

    Screenshot della barra di ricerca globale nel portale di Azure.

  3. In Servizi selezionare Gruppi di risorse.

    Screenshot dell'opzione

  4. Nel riquadro Gruppi di risorse selezionare il gruppo di risorse esistente.

    Screenshot di un gruppo di risorse esistente nell'elenco dei gruppi di risorse per la sottoscrizione.

    Nota

    Questo screenshot di esempio include il msdocs-identity-example gruppo di risorse. Il nome effettivo del gruppo di risorse può essere diverso.

  5. Nel riquadro del gruppo di risorse selezionare Controllo di accesso (IAM) nel menu del servizio.

    Screenshot dell'opzione

  6. Nel riquadro Controllo di accesso (IAM) selezionare Ruoli.

    Screenshot dell'opzione

  7. 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.

    Screenshot di un elenco di definizioni di ruolo nell'ambito assegnabile corrente filtrato per includere solo le definizioni con

  8. Nella finestra di dialogo definizione del ruolo Operatore Cosmos DB osservare le azioni assegnate come parte di questa definizione di ruolo.

    Screenshot della finestra di dialogo

  9. 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.

  1. 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>"
    
  2. 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.

  3. 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.

  4. 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.

  5. 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.

  1. 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
      }
    }
    
  2. Creare un nuovo file di parametri Bicep denominato control-plane-role-assignment.bicepparam In questo file di parametri; assegnare gli identificatori di definizione del roleDefinitionId ruolo registrati in precedenza al parametro e l'identificatore univoco per l'identità al identityId parametro .

    using './control-plane-role-assignment.bicep'
    
    param roleDefinitionId = '<id-of-new-role-definition>'
    param identityId = '<id-of-existing-identity>'
    
  3. 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
    
  4. 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.

  1. Nel riquadro Controllo di accesso (IAM) selezionare Aggiungi e quindi Aggiungi assegnazione di ruolo.

    Screenshot dell'opzione 'Aggiungi assegnazione di ruolo' nel menu 'Controllo di accesso (IAM)' per l'opzione 'Aggiungi'.

  2. 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.

    Screenshot del riquadro 'Role' per l'aggiunta di un'assegnazione di ruolo.

    Suggerimento

    Facoltativamente, è possibile filtrare l'elenco dei ruoli in modo da includere solo ruoli personalizzati.

  3. 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.

    Screenshot del riquadro

    Screenshot della finestra di dialogo di selezione dell'identità per l'aggiunta di un'assegnazione di ruolo.

    Nota

    Questo screenshot illustra un utente di esempio denominato "Kai Carter" con un'entità di sicurezza di kai@adventure-works.com.

  4. Tornare al riquadro Membri , esaminare il membro selezionato[s] e quindi selezionare Rivedi e assegna.

    Screenshot del riquadro

  5. Nel riquadro Rivedi e assegna esaminare le opzioni specificate per la nuova assegnazione di ruolo. Selezionare infine Rivedi e assegna.

    Screenshot del riquadro

  6. Attendere che il portale finisca di creare l'assegnazione di ruolo.

  1. Assegnare il nuovo ruolo usando New-AzRoleAssignment. Usare il nome del ruolo per il RoleDefinitionName parametro e l'identificatore univoco dell'identità per il ObjectId parametro .

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        ObjectId = "<your-principal-identifier>"
        RoleDefinitionName = "Azure Cosmos DB Control Plane Owner"
    }
    New-AzRoleAssignment @parameters
    
  2. 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.

  3. 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.

Passaggio successivo