Delen via


Op rollen gebaseerd toegangsbeheer op basis van besturingsvlak gebruiken met Azure Cosmos DB for NoSQL

VAN TOEPASSING OP: NoSQL

Diagram van de huidige locatie (op rollen gebaseerd toegangsbeheer) in de volgorde van de implementatiehandleiding.

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.

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

  1. Meld u aan bij Azure Portal (https://portal.azure.com).

  2. Voer de resourcegroep in de algemene zoekbalk in.

    Schermopname van de algemene zoekbalk in Azure Portal.

  3. Selecteer resourcegroepen in Services.

    Schermopname van de optie Resourcegroepen geselecteerd in het zoekmenu.

  4. Selecteer uw bestaande resourcegroep in het deelvenster Resourcegroepen .

    Schermopname van een bestaande resourcegroep in de lijst met resourcegroepen voor het abonnement.

    Notitie

    Deze voorbeeldschermafbeelding bevat de msdocs-identity-example resourcegroep. De werkelijke naam van de resourcegroep kan afwijken.

  5. Selecteer in het deelvenster voor de resourcegroep toegangsbeheer (IAM) in het servicemenu.

    Schermopname van de optie Toegangsbeheer (IAM) in het servicemenu voor een resourcegroep.

  6. Selecteer Rollen in het deelvenster Toegangsbeheer (IAM).

    Schermopname van de optie Rollen in het deelvenster Toegangsbeheer (IAM).

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

    Schermopname van een lijst met roldefinities op het huidige toewijsbare bereik dat is gefilterd om alleen definities met Cosmos DB in de titel op te nemen.

  8. Bekijk in het dialoogvenster roldefinitie van Cosmos DB-operator de acties die zijn toegewezen als onderdeel van deze roldefinitie.

    Schermopname van het dialoogvenster Cosmos DB-operator met details over de ingebouwde roldefinitie.

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

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

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

  4. 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 de id eigenschap een ander fictief voorbeeld.

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

  1. 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
      }
    }
    
  2. 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 de roleDefinitionId parameter en de unieke id voor uw identiteit aan de identityId parameter.

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

  1. Selecteer In het deelvenster Toegangsbeheer (IAM) de optie Toevoegen en vervolgens Roltoewijzing toevoegen.

    Schermopname van de optie Roltoewijzing toevoegen in het menu Toegangsbeheer (IAM) voor de optie Toevoegen.

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

    Schermopname van het deelvenster Rol voor het toevoegen van een roltoewijzing.

    Tip

    U kunt desgewenst de lijst met rollen filteren om alleen aangepaste rollen op te nemen.

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

    Schermopname van het deelvenster Leden voor het toevoegen van een roltoewijzing.

    Schermopname van het dialoogvenster voor identiteitsselectie voor het toevoegen van een roltoewijzing.

    Notitie

    Deze schermopname illustreert een voorbeeldgebruiker met de naam 'Kai Carter' met een principal van kai@adventure-works.com.

  4. Terug in het deelvenster Leden controleert u het geselecteerde lid[s] en selecteert u Beoordelen en toewijzen.

    Schermopname van het deelvenster Leden met een geselecteerde identiteit voor een roltoewijzing.

  5. Controleer in het deelvenster Beoordelen en toewijzen de opgegeven opties voor de nieuwe roltoewijzing. Selecteer ten slotte Beoordelen en toewijzen.

    Schermopname van het deelvenster Beoordelen en maken voor een roltoewijzing.

  6. Wacht totdat de portal klaar is met het maken van de roltoewijzing.

  1. Wijs de nieuwe rol toe met behulp van New-AzRoleAssignment. Gebruik de naam van de rol voor de RoleDefinitionName parameter en de unieke id voor uw identiteit voor de ObjectId parameter.

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        ObjectId = "<your-principal-identifier>"
        RoleDefinitionName = "Azure Cosmos DB Control Plane Owner"
    }
    New-AzRoleAssignment @parameters
    
  2. 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 de RoleAssignmentId eigenschap een ander fictief voorbeeld. Dit is een subset van de typische uitvoer van de implementatie voor duidelijkheid.

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

Volgende stap