Dela via


Använda rollbaserad åtkomstkontroll för kontrollplan med Azure Cosmos DB för NoSQL

GÄLLER FÖR: NoSQL

Diagram över den aktuella platsen (rollbaserad åtkomstkontroll) i sekvensen i distributionsguiden.

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.

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.

  1. Logga in på Azure Portal (https://portal.azure.com).

  2. Ange Resursgrupp i fältet global sökning.

    Skärmbild av global sökning-fältet i Azure Portal.

  3. I Tjänster väljer du Resursgrupper.

    Skärmbild av alternativet Resursgrupper som valts i sökmenyn.

  4. I fönstret Resursgrupper väljer du din befintliga resursgrupp.

    Skärmbild av en befintlig resursgrupp i listan över resursgrupper för prenumerationen.

    Kommentar

    Den här skärmbilden msdocs-identity-example innehåller resursgruppen. Ditt faktiska resursgruppsnamn kan vara annorlunda.

  5. I fönstret för resursgruppen väljer du Åtkomstkontroll (IAM) på tjänstmenyn.

    Skärmbild av alternativet Åtkomstkontroll (IAM) på tjänstmenyn för en resursgrupp.

  6. I fönstret Åtkomstkontroll (IAM) väljer du Roller.

    Skärmbild av alternativet Roller i fönstret Åtkomstkontroll (IAM).

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

    Skärmbild av en lista över rolldefinitioner i det aktuella tilldelningsbara omfånget filtrerat för att endast inkludera definitioner med

  8. I dialogrutan Rolldefinition för Cosmos DB-operatör observerar du de åtgärder som tilldelats som en del av den här rolldefinitionen.

    Skärmbild av dialogrutan Cosmos DB-operator med information om den inbyggda rolldefinitionen.

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

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

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

  4. 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 egenskapen id ett annat fiktivt exempel.

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

  1. 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
      }
    }
    
  2. Skapa en ny Bicep-parameterfil med namnet control-plane-role-assignment.bicepparam. I den här parameterfilen; tilldela de tidigare registrerade rolldefinitionsidentifierarna till parametern roleDefinitionId och den unika identifieraren för din identitet till parametern identityId .

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

  1. I fönstret Åtkomstkontroll (IAM) väljer du Lägg till och sedan Lägg till rolltilldelning.

    Skärmbild av alternativet Lägg till rolltilldelning på menyn Åtkomstkontroll (IAM) för alternativet Lägg till.

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

    Skärmbild av fönstret Roll för att lägga till en rolltilldelning.

    Dricks

    Du kan också filtrera listan med roller så att den endast innehåller anpassade roller.

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

    Skärmbild av fönstret Medlemmar för att lägga till en rolltilldelning.

    Skärmbild av dialogrutan för identitetsval för att lägga till en rolltilldelning.

    Kommentar

    Den här skärmbilden visar en exempelanvändare med namnet "Kai Carter" med huvudnamnet kai@adventure-works.com.

  4. Gå tillbaka till fönstret Medlemmar , granska de valda medlemmarna och välj sedan Granska + tilldela.

    Skärmbild av fönstret Medlemmar med en vald identitet för en rolltilldelning.

  5. I fönstret Granska + tilldela granskar du de angivna alternativen för den nya rolltilldelningen. Välj slutligen Granska + tilldela.

    Skärmbild av fönstret Granska + skapa för en rolltilldelning.

  6. Vänta tills portalen har skapat rolltilldelningen.

  1. Tilldela den nya rollen med .New-AzRoleAssignment Använd rollens namn för parametern RoleDefinitionName och den unika identifieraren för din identitet till parametern ObjectId .

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        ObjectId = "<your-principal-identifier>"
        RoleDefinitionName = "Azure Cosmos DB Control Plane Owner"
    }
    New-AzRoleAssignment @parameters
    
  2. 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 egenskapen RoleAssignmentId ett annat fiktivt exempel. Det här är en delmängd av de typiska utdata för distributionen för tydlighetens skull.

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

Gå vidare