Udostępnij za pośrednictwem


Używanie kontroli dostępu opartej na rolach płaszczyzny sterowania za pomocą usługi Azure Cosmos DB for NoSQL

DOTYCZY: NoSQL

Diagram bieżącej lokalizacji (kontrola dostępu oparta na rolach) w sekwencji przewodnika wdrażania.

Diagram sekwencji przewodnika wdrażania, w tym tych lokalizacji, w kolejności: Przegląd, Pojęcia, Przygotowanie, Kontrola dostępu oparta na rolach, Sieć i Dokumentacja. Lokalizacja "Kontrola dostępu oparta na rolach" jest obecnie wyróżniona.

W tym artykule opisano kroki udzielania tożsamości dostępu do zarządzania kontem usługi Azure Cosmos DB for NoSQL i jego zasobami.

Ważne

Kroki opisane w tym artykule obejmują tylko dostęp płaszczyzny sterowania do wykonywania operacji na koncie wszystkich zasobów w hierarchii konta. Aby dowiedzieć się, jak zarządzać rolami, definicjami i przypisaniami dla płaszczyzny sterowania, zobacz Udzielanie dostępu opartemu na rolach płaszczyzny danych.

Wymagania wstępne

  • Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
  • Istniejące konto usługi Azure Cosmos DB.
  • Co najmniej jedna istniejąca tożsamość w identyfikatorze Entra firmy Microsoft.

Przygotowywanie definicji roli

Najpierw należy przygotować definicję roli z listą actions , aby udzielić dostępu do zarządzania zasobami konta w usłudze Azure Cosmos DB.

Wyświetl listę wszystkich definicji ról skojarzonych z kontem usługi Azure Cosmos DB przy użyciu polecenia az role definition list. Przejrzyj dane wyjściowe i znajdź definicję roli o nazwie Współautor danych wbudowanych w usłudze Cosmos DB. Dane wyjściowe zawierają unikatowy identyfikator definicji roli we id właściwości . Zapisz tę wartość, ponieważ jest ona wymagana do użycia w kroku przypisania w dalszej części tego przewodnika.

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",
  }
]

Uwaga

W tym przykładzie id wartość to /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa. W tym przykładzie użyto fikcyjnych danych, a identyfikator będzie inny niż w tym przykładzie. Jednak identyfikator (230815da-be43-4aae-9cb4-875f7bd000aa) jest globalnie unikatowy we wszystkich definicjach ról na platformie Azure.

  1. Zaloguj się do witryny Azure Portal (https://portal.azure.com).

  2. Wprowadź pozycję Grupa zasobów na pasku wyszukiwania globalnego.

    Zrzut ekranu przedstawiający globalny pasek wyszukiwania w witrynie Azure Portal.

  3. W obszarze Usługi wybierz pozycję Grupy zasobów.

    Zrzut ekranu przedstawiający opcję

  4. W okienku Grupy zasobów wybierz istniejącą grupę zasobów.

    Zrzut ekranu przedstawiający istniejącą grupę zasobów na liście grup zasobów dla subskrypcji.

    Uwaga

    Ten przykładowy zrzut ekranu zawiera grupę msdocs-identity-example zasobów. Rzeczywista nazwa grupy zasobów może być inna.

  5. W okienku grupy zasobów wybierz pozycję Kontrola dostępu (Zarządzanie dostępem i tożsamościami) w menu usługi.

    Zrzut ekranu przedstawiający opcję

  6. W okienku Kontrola dostępu (Zarządzanie dostępem i tożsamościami) wybierz pozycję Role.

    Zrzut ekranu przedstawiający opcję

  7. W sekcji Role użyj frazy wyszukiwania Cosmos DB i znajdź definicję roli Operator usługi Cosmos DB. Następnie wybierz opcję Wyświetl skojarzone z tą definicją.

    Zrzut ekranu przedstawiający listę definicji ról w bieżącym zakresie możliwych do przypisania, aby uwzględnić tylko definicje z

  8. W oknie dialogowym Definicja roli operatora usługi Cosmos DB obserwuj akcje przypisane w ramach tej definicji roli.

    Zrzut ekranu przedstawiający okno dialogowe

  9. Zamknij okno dialogowe Definicja roli operatora usługi Cosmos DB.

Użyj Get-AzRoleDefinition polecenia , aby wyświetlić listę wszystkich definicji ról skojarzonych z kontem usługi Azure Cosmos DB. Przejrzyj dane wyjściowe i znajdź definicję roli o nazwie Współautor danych wbudowanych w usłudze Cosmos DB. Dane wyjściowe zawierają unikatowy identyfikator definicji roli we Id właściwości . Zapisz tę wartość, ponieważ jest ona wymagana do użycia w kroku przypisania w dalszej części tego przewodnika.

$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 : {/}

Uwaga

W tym przykładzie Id wartość to 230815da-be43-4aae-9cb4-875f7bd000aa. Identyfikator jest globalnie unikatowy we wszystkich definicjach ról na platformie Azure.

Przypisywanie roli do tożsamości

Teraz przypisz nowo zdefiniowaną rolę do tożsamości, aby aplikacje mogły uzyskiwać dostęp do zasobów w usłudze Azure Cosmos DB.

Ważne

To zadanie przypisania wymaga już unikatowego identyfikatora każdej tożsamości, którą chcesz udzielić uprawnień kontroli dostępu opartej na rolach.

  1. Użyj polecenia az group show , aby ponownie pobrać metadane dla bieżącej grupy zasobów.

    az group show \
        --name "<name-of-existing-resource-group>"
    
  2. Zwróć uwagę na dane wyjściowe poprzedniego polecenia. Zapisz wartość id właściwości dla tej grupy zasobów, ponieważ jest ona wymagana do użycia w następnym kroku.

    {
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example",
      "location": "westus",
      "name": "msdocs-identity-example",
      "type": "Microsoft.Resources/resourceGroups"
    }
    

    Uwaga

    W tym przykładzie id wartość to /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example. W tym przykładzie użyto fikcyjnych danych, a identyfikator będzie inny niż w tym przykładzie. Jest to obcięty przykład danych wyjściowych.

  3. Przypisz nową rolę przy użyciu polecenia az role assignment create. Użyj identyfikatora grupy zasobów dla argumentu --scope , identyfikatora roli dla -role argumentu i unikatowego identyfikatora tożsamości do argumentu --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"
    

    Uwaga

    W tym przykładowym poleceniu scope zostało ustawione na fikcyjny przykład /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example z przykładu poprzedniego kroku. Identyfikator grupy zasobów będzie inny niż w tym przykładzie. Został role również ustawiony na fikcyjne /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0. Ponownie identyfikator roli będzie odrębny.

  4. Zwróć uwagę na dane wyjściowe polecenia . Dane wyjściowe zawierają unikatowy identyfikator przypisania we id właściwości .

    {
      "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"
    }
    

    Uwaga

    W tym przykładzie id właściwość jest /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0 innym fikcyjnym przykładem.

  5. Powtórz te kroki, aby udzielić dostępu do konta z innych tożsamości, których chcesz użyć.

    Napiwek

    Możesz powtórzyć te kroki dla dowolnej liczby tożsamości. Zazwyczaj te kroki są co najmniej powtarzane w celu umożliwienia deweloperom dostępu do konta przy użyciu tożsamości ludzkiej i umożliwienia aplikacjom dostępu przy użyciu tożsamości zarządzanej.

  1. Utwórz nowy plik Bicep, aby zdefiniować przypisanie roli. Nadaj plikowi nazwę 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. Utwórz nowy plik parametrów Bicep o nazwie control-plane-role-assignment.bicepparam. W tym pliku parametrów; przypisz wcześniej zarejestrowane identyfikatory definicji roli do parametru roleDefinitionId i unikatowy identyfikator tożsamości do parametru identityId .

    using './control-plane-role-assignment.bicep'
    
    param roleDefinitionId = '<id-of-new-role-definition>'
    param identityId = '<id-of-existing-identity>'
    
  3. Wdróż ten szablon Bicep przy użyciu polecenia 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. Powtórz te kroki, aby udzielić dostępu do konta z innych tożsamości, których chcesz użyć.

    Napiwek

    Możesz powtórzyć te kroki dla dowolnej liczby tożsamości. Zazwyczaj te kroki są co najmniej powtarzane w celu umożliwienia deweloperom dostępu do konta przy użyciu tożsamości ludzkiej i umożliwienia aplikacjom dostępu przy użyciu tożsamości zarządzanej.

  1. W okienku Kontrola dostępu (Zarządzanie dostępem i tożsamościami) wybierz pozycję Dodaj , a następnie dodaj przypisanie roli.

    Zrzut ekranu przedstawiający opcję

  2. W okienku Rola wyszukaj Azure Cosmos DB , a następnie wybierz rolę Właściciel płaszczyzny sterowania usługi Azure Cosmos DB utworzoną wcześniej w tym przewodniku. Następnie wybierz Dalej.

    Zrzut ekranu przedstawiający okienko

    Napiwek

    Opcjonalnie można filtrować listę ról, aby uwzględnić tylko role niestandardowe.

  3. W okienku Członkowie wybierz opcję Wybierz członków . W oknie dialogowym członkowie wybierz tożsamość, którą chcesz przyznać temu poziomowi dostępu dla konta usługi Azure Cosmos DB, a następnie użyj opcji Wybierz , aby potwierdzić wybór.

    Zrzut ekranu przedstawiający okienko

    Zrzut ekranu przedstawiający okno dialogowe wyboru tożsamości służące do dodawania przypisania roli.

    Uwaga

    Ten zrzut ekranu przedstawia przykładowego użytkownika o nazwie "Kai Carter" z podmiotem zabezpieczeń kai@adventure-works.com.

  4. Wróć do okienka Członkowie , przejrzyj wybranego członka[s], a następnie wybierz pozycję Przejrzyj i przypisz.

    Zrzut ekranu przedstawiający okienko

  5. W okienku Przeglądanie i przypisywanie przejrzyj określone opcje nowego przypisania roli. Na koniec wybierz pozycję Przejrzyj i przypisz.

    Zrzut ekranu przedstawiający okienko

  6. Poczekaj, aż portal zakończy tworzenie przypisania roli.

  1. Przypisz nową rolę przy użyciu polecenia New-AzRoleAssignment. Użyj nazwy roli dla parametru RoleDefinitionName i unikatowego identyfikatora tożsamości do parametru ObjectId .

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        ObjectId = "<your-principal-identifier>"
        RoleDefinitionName = "Azure Cosmos DB Control Plane Owner"
    }
    New-AzRoleAssignment @parameters
    
  2. Zwróć uwagę na dane wyjściowe polecenia . Dane wyjściowe zawierają unikatowy identyfikator przypisania we RoleAssignmentId właściwości .

    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
    

    Uwaga

    W tym przykładzie RoleAssignmentId właściwość jest /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0 innym fikcyjnym przykładem. Jest to podzbiór typowych danych wyjściowych wdrożenia w celu uzyskania przejrzystości.

  3. Powtórz te kroki, aby udzielić dostępu do konta z innych tożsamości, których chcesz użyć.

    Napiwek

    Możesz powtórzyć te kroki dla dowolnej liczby tożsamości. Zazwyczaj te kroki są co najmniej powtarzane w celu umożliwienia deweloperom dostępu do konta przy użyciu tożsamości ludzkiej i umożliwienia aplikacjom dostępu przy użyciu tożsamości zarządzanej.

Weryfikowanie dostępu do płaszczyzny sterowania w kodzie

Na koniec zweryfikuj poprawność udzielenia dostępu przy użyciu kodu aplikacji i zestawu AZURE Management SDK w preferowanym języku programowania.

using Azure.Identity;
using Azure.ResourceManager;

DefaultAzureCredential credential = new();

ArmClient client = new(credential);

Ważne

W tym przykładzie kodu są używane biblioteki Azure.ResourceManager.CosmosDB i Azure.Identity z narzędzia NuGet.

Następny krok