Używanie kontroli dostępu opartej na rolach płaszczyzny danych w usłudze Azure Cosmos DB for NoSQL
Artykuł
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 danymi na koncie usługi Azure Cosmos DB for NoSQL.
Ważne
Kroki opisane w tym artykule obejmują tylko dostęp do płaszczyzny danych w celu wykonywania operacji na poszczególnych elementach i uruchamiania zapytań. Aby dowiedzieć się, jak zarządzać bazami danych i kontenerami dla płaszczyzny sterowania, zobacz Udzielanie dostępu opartemu na rolach płaszczyzny sterowania.
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.
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:
Najpierw należy przygotować definicję roli z listą dataActions , aby udzielić dostępu do odczytu, wykonywania zapytań i zarządzania danymi w usłudze Azure Cosmos DB for NoSQL.
Aby uzyskać więcej informacji, zobacz udzielanie dostępu opartemu na rolach płaszczyzny sterowania.
Wyświetl listę wszystkich definicji ról skojarzonych z kontem usługi Azure Cosmos DB for NoSQL przy użyciu polecenia az cosmosdb sql 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.
Azure CLI
az cosmosdb sql role definition list \
--resource-group"<name-of-existing-resource-group>" \
--account-name"<name-of-existing-nosql-account>"
W tym przykładzie id wartość to /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002. W tym przykładzie użyto fikcyjnych danych, a identyfikator będzie inny niż w tym przykładzie.
Użyj Get-AzCosmosDBSqlRoleDefinition polecenia , aby wyświetlić listę wszystkich definicji ról skojarzonych z kontem usługi Azure Cosmos DB for NoSQL. 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.
Id : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002
RoleName : Cosmos DB Built-in Data Contributor
Type : BuiltInRole
AssignableScopes : {/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccountsmsdocs-identity-example-nosql}
Permissions.DataActions : {Microsoft.DocumentDB/databaseAccounts/readMetadata, Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*, Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*}
Permissions.NotDataActions :
Uwaga
W tym przykładzie Id wartość to /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002. W tym przykładzie użyto fikcyjnych danych, a identyfikator będzie inny niż w tym przykładzie. Jednak identyfikator (00000000-0000-0000-0000-000000000002) jest unikatowy we wszystkich definicjach ról na twoim koncie.
Ważne
Utworzenie nowej definicji roli płaszczyzny danych wymaga następujących uprawnień płaszczyzny sterowania:
Aby uzyskać więcej informacji, zobacz udzielanie dostępu opartemu na rolach płaszczyzny sterowania.
Ostrzeżenie
Natywna kontrola dostępu oparta na rolach usługi Azure Cosmos DB for NoSQL nie obsługuje notDataActions właściwości . Każda akcja, która nie jest określona jako dozwolona dataAction , jest automatycznie wykluczana.
Utwórz nowy plik JSON o nazwie role-definition.json. W tym pliku utwórz definicję zasobu określającą akcje danych wymienione tutaj:
Może wykonywać dowolną operację na elementach z kontenerami
JSON
{
"RoleName": "Azure Cosmos DB for NoSQL Data Plane Owner",
"Type": "CustomRole",
"AssignableScopes": [
"/"
],
"Permissions": [
{
"DataActions": [
"Microsoft.DocumentDB/databaseAccounts/readMetadata",
"Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*",
"Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*"
]
}
]
}
Następnie użyj polecenia az cosmosdb sql role definition create , aby utworzyć definicję roli. Użyj role-definition.json jako danych wejściowych argumentu--body.
Azure CLI
az cosmosdb sql role definition create \
--resource-group"<name-of-existing-resource-group>" \
--account-name"<name-of-existing-nosql-account>" \
--body"@role-definition.json"
Teraz wyświetl listę wszystkich definicji ról skojarzonych z kontem usługi Azure Cosmos DB for NoSQL przy użyciu polecenia az cosmosdb sql role definition list.
Azure CLI
az cosmosdb sql role definition list \
--resource-group"<name-of-existing-resource-group>" \
--account-name"<name-of-existing-nosql-account>"
Przejrzyj dane wyjściowe z poprzedniego polecenia. Znajdź właśnie utworzoną definicję roli o nazwie Azure Cosmos DB for NOSQL Data Plane Owner (Właściciel płaszczyzny danych NOSQL). 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.
W tym przykładzie id wartość to /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/bbbbbbbb-1111-2222-3333-cccccccccccc. W tym przykładzie użyto fikcyjnych danych, a identyfikator będzie inny niż w tym przykładzie.
Utwórz nowy plik Bicep, aby zdefiniować definicję roli. Nadaj plikowi nazwę data-plane-role-definition.bicep. Dodaj je dataActions do definicji:
Może wykonywać dowolną operację na elementach z kontenerami
Bicep
metadatadescription = 'Create RBAC definition for data plane access to Azure Cosmos DB for NoSQL.'
@description('Name of the Azure Cosmos DB for NoSQL account.')paramaccountNamestring
@description('Name of the role definition.')paramroleDefinitionNamestring = 'Azure Cosmos DB for NoSQL Data Plane Owner'resourceaccount'Microsoft.DocumentDB/databaseAccounts@2024-05-15'existing = {
name: accountName
}
resourcedefinition'Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions@2024-05-15' = {
name: guid(account.id, roleDefinitionName)parent: accountproperties: {
roleName: roleDefinitionNametype: 'CustomRole'assignableScopes: [
account.id
]
permissions: [
{
dataActions: [
'Microsoft.DocumentDB/databaseAccounts/readMetadata''Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*''Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*'
]
}
]
}
}
outputdefinitionIdstring = definition.id
Utwórz nowy plik parametrów Bicep o nazwie data-plane-role-definition.bicepparam. W tym pliku parametrów przypisz nazwę istniejącego konta usługi Azure Cosmos DB for NoSQL do parametru accountName .
Przejrzyj dane wyjściowe z poprzedniego polecenia. Znajdź właśnie utworzoną definicję roli o nazwie Azure Cosmos DB for NOSQL Data Plane Owner (Właściciel płaszczyzny danych NOSQL). 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.
Output
Id : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/bbbbbbbb-1111-2222-3333-cccccccccccc
RoleName : Azure Cosmos DB for NoSQL Data Plane Owner
Type : CustomRole
AssignableScopes : {/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql}
Permissions.DataActions : {Microsoft.DocumentDB/databaseAccounts/readMetadata, Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*, Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*}
Permissions.NotDataActions :
Uwaga
W tym przykładzie Id wartość to /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/bbbbbbbb-1111-2222-3333-cccccccccccc. W tym przykładzie użyto fikcyjnych danych, a identyfikator będzie inny niż w tym przykładzie.
Przypisywanie roli do tożsamości
Teraz przypisz nowo zdefiniowaną rolę do tożsamości, aby aplikacje mogły uzyskiwać dostęp do danych w usłudze Azure Cosmos DB for NoSQL.
Ważne
Utworzenie nowego przypisania roli płaszczyzny danych wymaga następujących uprawnień płaszczyzny sterowania:
Aby uzyskać więcej informacji, zobacz udzielanie dostępu opartemu na rolach płaszczyzny sterowania.
Użyj az cosmosdb show polecenia , aby uzyskać unikatowy identyfikator bieżącego konta.
Azure CLI
az cosmosdb show \
--resource-group"<name-of-existing-resource-group>" \
--name"<name-of-existing-nosql-account>" \
--query"{id:id}"
Zwróć uwagę na dane wyjściowe poprzedniego polecenia. Zapisz wartość id właściwości dla tego konta, ponieważ jest ona wymagana do użycia w następnym kroku.
W tym przykładzie id wartość to /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql. W tym przykładzie użyto fikcyjnych danych, a identyfikator będzie inny niż w tym przykładzie.
Przypisz nową rolę przy użyciu polecenia az cosmosdb sql role assignment create. Użyj wcześniej zarejestrowanych identyfikatorów definicji roli do argumentu --role-definition-id i unikatowego identyfikatora tożsamości do argumentu --principal-id . Na koniec użyj identyfikatora konta dla argumentu --scope .
Azure CLI
az cosmosdb sql role assignment create \
--resource-group"<name-of-existing-resource-group>" \
--account-name"<name-of-existing-nosql-account>" \
--role-definition-id"<id-of-new-role-definition>" \
--principal-id"<id-of-existing-identity>" \
--scope"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
Użyj az cosmosdb sql role assignment list polecenia , aby wyświetlić listę wszystkich przypisań ról dla konta usługi Azure Cosmos DB for NoSQL. Przejrzyj dane wyjściowe, aby upewnić się, że przypisanie roli zostało utworzone.
Azure CLI
az cosmosdb sql role assignment list \
--resource-group"<name-of-existing-resource-group>" \
--account-name"<name-of-existing-nosql-account>"
Utwórz nowy plik Bicep, aby zdefiniować przypisanie roli. Nadaj plikowi nazwę data-plane-role-assignment.bicep.
Bicep
metadatadescription = 'Assign RBAC role for data plane access to Azure Cosmos DB for NoSQL.'
@description('Name of the Azure Cosmos DB for NoSQL account.')paramaccountNamestring
@description('Id of the role definition to assign to the targeted principal in the context of the account.')paramroleDefinitionIdstring
@description('Id of the identity/principal to assign this role in the context of the account.')paramidentityIdstringresourceaccount'Microsoft.DocumentDB/databaseAccounts@2024-05-15'existing = {
name: accountName
}
resourceassignment'Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments@2024-05-15' = {
name: guid(roleDefinitionId, identityId, account.id)parent: accountproperties: {
principalId: identityIdroleDefinitionId: roleDefinitionIdscope: account.id
}
}
outputassignmentIdstring = assignment.id
Utwórz nowy plik parametrów Bicep o nazwie data-plane-role-assignment.bicepparam. W tym pliku parametrów przypisz nazwę istniejącego konta usługi Azure Cosmos DB for NoSQL do accountName parametru, wcześniej zarejestrowanych identyfikatorów definicji roli do parametru roleDefinitionId i unikatowy identyfikator tożsamości do parametru identityId .
Wdróż szablon Bicep przy użyciu polecenia az deployment group create.
Azure CLI
az deployment group create \
--resource-group"<name-of-existing-resource-group>" \
--parameters data-plane-role-assignment.bicepparam \
--template-file data-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.
$parameters = @{
ResourceGroupName = "<name-of-existing-resource-group>"
Name = "<name-of-existing-nosql-account>"
}
Get-AzCosmosDBAccount @parameters | Select -Property Id
Zwróć uwagę na dane wyjściowe poprzedniego polecenia. Zapisz wartość Id właściwości dla tego konta, ponieważ jest ona wymagana do użycia w następnym kroku.
Output
Id
--
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
Uwaga
W tym przykładzie Id wartość to /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql. W tym przykładzie użyto fikcyjnych danych, a identyfikator będzie inny niż w tym przykładzie.
Użyj polecenia New-AzCosmosDBSqlRoleAssignment , aby przypisać nową rolę. Użyj wcześniej zarejestrowanych identyfikatorów definicji roli do parametru RoleDefinitionId i unikatowego identyfikatora tożsamości do parametru PrincipalId . Na koniec użyj identyfikatora konta dla parametru Scope .
Wyświetl listę wszystkich przypisań ról dla konta usługi Azure Cosmos DB for NoSQL przy użyciu polecenia Get-AzCosmosDBSqlRoleAssignment. Przejrzyj dane wyjściowe, aby upewnić się, że przypisanie roli zostało utworzone.
using Azure.Core;
using Azure.Identity;
using Microsoft.Azure.Cosmos;
string endpoint = "<account-endpoint>";
TokenCredential credential = new DefaultAzureCredential();
CosmosClient client = new(endpoint, credential);
Dołącz do serii meetup, aby tworzyć skalowalne rozwiązania sztucznej inteligencji oparte na rzeczywistych przypadkach użycia z innymi deweloperami i ekspertami.
Pisanie wydajnych zapytań, tworzenie zasad indeksowania, zarządzanie zasobami i aprowizowanie ich w interfejsie API SQL i zestawie SDK za pomocą usługi Microsoft Azure Cosmos DB.