Używanie kontroli dostępu opartej na rolach płaszczyzny sterowania za pomocą usługi Azure Cosmos DB for NoSQL
DOTYCZY: NoSQL
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ć elementami i wykonywać zapytania dotyczące płaszczyzny danych, 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.
Użyj środowiska powłoki Bash w usłudze Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Szybki start dotyczący powłoki Bash w usłudze Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić interfejs wiersza polecenia platformy Azure w kontenerze platformy Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do interfejsu wiersza polecenia platformy Azure za pomocą polecenia az login. Aby ukończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Aby uzyskać inne opcje logowania, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.
Po wyświetleniu monitu zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure podczas pierwszego użycia. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Korzystanie z rozszerzeń w interfejsie wiersza polecenia platformy Azure.
Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
- Jeśli zdecydujesz się używać programu Azure PowerShell lokalnie:
- Zainstaluj najnowszą wersję modułu Az programu PowerShell.
- Połącz się z kontem platformy Azure przy użyciu polecenia cmdlet Connect-AzAccount .
- Jeśli zdecydujesz się używać usługi Azure Cloud Shell:
- Aby uzyskać więcej informacji, zobacz Omówienie usługi Azure Cloud Shell .
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.
Zaloguj się do witryny Azure Portal (https://portal.azure.com).
Wprowadź pozycję Grupa zasobów na pasku wyszukiwania globalnego.
W obszarze Usługi wybierz pozycję Grupy zasobów.
W okienku Grupy zasobów wybierz istniejącą grupę zasobów.
Uwaga
Ten przykładowy zrzut ekranu zawiera grupę
msdocs-identity-example
zasobów. Rzeczywista nazwa grupy zasobów może być inna.W okienku grupy zasobów wybierz pozycję Kontrola dostępu (Zarządzanie dostępem i tożsamościami) w menu usługi.
W okienku Kontrola dostępu (Zarządzanie dostępem i tożsamościami) wybierz pozycję Role.
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ą.
W oknie dialogowym Definicja roli operatora usługi Cosmos DB obserwuj akcje przypisane w ramach tej definicji roli.
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.
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>"
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.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.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.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.
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 } }
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 parametruroleDefinitionId
i unikatowy identyfikator tożsamości do parametruidentityId
.using './control-plane-role-assignment.bicep' param roleDefinitionId = '<id-of-new-role-definition>' param identityId = '<id-of-existing-identity>'
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
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.
W okienku Kontrola dostępu (Zarządzanie dostępem i tożsamościami) wybierz pozycję Dodaj , a następnie dodaj przypisanie roli.
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.Napiwek
Opcjonalnie można filtrować listę ról, aby uwzględnić tylko role niestandardowe.
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.
Uwaga
Ten zrzut ekranu przedstawia przykładowego użytkownika o nazwie "Kai Carter" z podmiotem zabezpieczeń
kai@adventure-works.com
.Wróć do okienka Członkowie , przejrzyj wybranego członka[s], a następnie wybierz pozycję Przejrzyj i przypisz.
W okienku Przeglądanie i przypisywanie przejrzyj określone opcje nowego przypisania roli. Na koniec wybierz pozycję Przejrzyj i przypisz.
Poczekaj, aż portal zakończy tworzenie przypisania roli.
Przypisz nową rolę przy użyciu polecenia
New-AzRoleAssignment
. Użyj nazwy roli dla parametruRoleDefinitionName
i unikatowego identyfikatora tożsamości do parametruObjectId
.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" ObjectId = "<your-principal-identifier>" RoleDefinitionName = "Azure Cosmos DB Control Plane Owner" } New-AzRoleAssignment @parameters
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.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.