Použití řízení přístupu na základě role na základě roviny dat se službou Azure Cosmos DB for NoSQL
PLATÍ PRO: NoSQL
Diagram posloupnosti průvodce nasazením, včetně těchto umístění, v uvedeném pořadí: Přehled, Koncepty, Příprava, Řízení přístupu na základě role, Síť a Reference Umístění Řízení přístupu na základě role je aktuálně zvýrazněné.
Tip
Navštivte naši novou galerii ukázek, kde najdete nejnovější ukázky pro vytváření nových aplikací.
Tento článek vás provede postupem udělení přístupu identit ke správě dat v účtu Azure Cosmos DB for NoSQL.
Důležité
Kroky v tomto článku pokrývají pouze přístup roviny dat k provádění operací s jednotlivými položkami a spouštění dotazů. Informace o správě databází a kontejnerů pro řídicí rovinu najdete v tématu Udělení přístupu na základě role řídicí roviny.
Požadavky
- Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
- Existující účet Azure Cosmos DB for NoSQL.
- Jedna nebo více existujících identit v Microsoft Entra ID.
Použijte prostředí Bash v Azure Cloud Shellu. Další informace najdete v tématu Rychlý start pro Bash v Azure Cloud Shellu.
Pokud dáváte přednost místnímu spouštění referenčních příkazů rozhraní příkazového řádku, nainstalujte Azure CLI. Pokud používáte Windows nebo macOS, zvažte spuštění Azure CLI v kontejneru Docker. Další informace najdete v tématu Jak spustit Azure CLI v kontejneru Dockeru.
Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí příkazu az login. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu. Další možnosti přihlášení najdete v tématu Přihlášení pomocí Azure CLI.
Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Využití rozšíření v Azure CLI.
Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.
- Pokud se rozhodnete používat Azure PowerShell místně:
- Nainstalujte nejnovější verzi modulu Az PowerShell.
- Připojte se ke svému účtu Azure pomocí rutiny Connect-AzAccount .
- Pokud se rozhodnete použít Azure Cloud Shell:
- Další informace najdete v přehledu služby Azure Cloud Shell .
Příprava definice role
Nejprve musíte připravit definici role se seznamem dataActions
pro udělení přístupu ke čtení, dotazování a správě dat ve službě Azure Cosmos DB for NoSQL.
Důležité
Získání stávající definice role roviny dat vyžaduje tato oprávnění řídicí roviny:
Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read
Další informace najdete v tématu Udělení přístupu na základě role na základě řídicí roviny.
Zobrazí seznam všech definic rolí přidružených k vašemu účtu Azure Cosmos DB for NoSQL pomocí az cosmosdb sql role definition list
. Zkontrolujte výstup a vyhledejte definici role s názvem Předdefinovaný přispěvatel dat Cosmos DB. Výstup obsahuje jedinečný identifikátor definice role ve id
vlastnosti. Tuto hodnotu si poznamenejte, protože je potřeba ji použít v kroku přiřazení dále v tomto průvodci.
az cosmosdb sql role definition list \
--resource-group "<name-of-existing-resource-group>" \
--account-name "<name-of-existing-nosql-account>"
[
...,
{
"assignableScopes": [
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
],
"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",
"name": "00000000-0000-0000-0000-000000000002",
"permissions": [
{
"dataActions": [
"Microsoft.DocumentDB/databaseAccounts/readMetadata",
"Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*",
"Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*"
],
"notDataActions": []
}
],
"resourceGroup": "msdocs-identity-example",
"roleName": "Cosmos DB Built-in Data Contributor",
"type": "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions",
"typePropertiesType": "BuiltInRole"
}
...
]
Poznámka:
V tomto příkladu id
by hodnota byla /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002
. Tento příklad používá fiktivní data a váš identifikátor by se od tohoto příkladu odlišil.
Slouží Get-AzCosmosDBSqlRoleDefinition
k výpisu všech definic rolí přidružených k vašemu účtu Azure Cosmos DB for NoSQL. Zkontrolujte výstup a vyhledejte definici role s názvem Předdefinovaný přispěvatel dat Cosmos DB. Výstup obsahuje jedinečný identifikátor definice role ve Id
vlastnosti. Tuto hodnotu si poznamenejte, protože je potřeba ji použít v kroku přiřazení dále v tomto průvodci.
$parameters = @{
ResourceGroupName = "<name-of-existing-resource-group>"
AccountName = "<name-of-existing-nosql-account>"
}
Get-AzCosmosDBSqlRoleDefinition @parameters
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 :
Poznámka:
V tomto příkladu Id
by hodnota byla /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002
. Tento příklad používá fiktivní data a váš identifikátor by se od tohoto příkladu odlišil. Identifikátor (00000000-0000-0000-0000-000000000002
) je však jedinečný napříč všemi definicemi rolí ve vašem účtu.
Přiřazení role identitě
Teď přiřaďte nově definovanou roli identitě, aby vaše aplikace mohly přistupovat k datům ve službě Azure Cosmos DB for NoSQL.
Důležité
Vytvoření nového přiřazení role roviny dat vyžaduje tato oprávnění řídicí roviny:
Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read
Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/read
Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write
Další informace najdete v tématu Udělení přístupu na základě role na základě řídicí roviny.
Slouží
az cosmosdb show
k získání jedinečného identifikátoru pro váš aktuální účet.az cosmosdb show \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-nosql-account>" \ --query "{id:id}"
Prohlédněte si výstup předchozího příkazu. Poznamenejte si hodnotu
id
vlastnosti pro tento účet, protože je nutné ji použít v dalším kroku.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql" }
Poznámka:
V tomto příkladu
id
by hodnota byla/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
. Tento příklad používá fiktivní data a váš identifikátor by se od tohoto příkladu odlišil.Přiřaďte novou roli pomocí
az cosmosdb sql role assignment create
. K argumentu--role-definition-id
použijte dříve zaznamenané identifikátory definic rolí a jedinečný identifikátor identity pro--principal-id
argument. Nakonec pro argument použijte identifikátor--scope
vašeho účtu.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"
Slouží
az cosmosdb sql role assignment list
k výpisu všech přiřazení rolí pro váš účet Azure Cosmos DB for NoSQL. Zkontrolujte výstup a ujistěte se, že se vaše přiřazení role vytvořilo.az cosmosdb sql role assignment list \ --resource-group "<name-of-existing-resource-group>" \ --account-name "<name-of-existing-nosql-account>"
Vytvořte nový soubor Bicep, který definuje přiřazení role. Pojmenujte soubor data-rovina-role-assignment.bicep.
metadata description = 'Assign RBAC role for data plane access to Azure Cosmos DB for NoSQL.' @description('Name of the Azure Cosmos DB for NoSQL account.') param accountName string @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 account 'Microsoft.DocumentDB/databaseAccounts@2024-05-15' existing = { name: accountName } resource assignment 'Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments@2024-05-15' = { name: guid(roleDefinitionId, identityId, account.id) parent: account properties: { principalId: identityId roleDefinitionId: roleDefinitionId scope: account.id } } output assignmentId string = assignment.id
Vytvořte nový soubor parametrů Bicep s názvem data-plane-role-assignment.
bicepparam
. V tomto souboru parametrů přiřaďte k parametruaccountName
název existujícího účtu Azure Cosmos DB for NoSQL, dříve zaznamenané identifikátoryroleDefinitionId
definic rolí parametru a jedinečný identifikátor vaší identity k parametruidentityId
.using './data-plane-role-assignment.bicep' param accountName = '<name-of-existing-nosql-account>' param roleDefinitionId = '<id-of-new-role-definition>' param identityId = '<id-of-existing-identity>'
Nasaďte šablonu Bicep pomocí
az deployment group create
.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --parameters data-plane-role-assignment.bicepparam \ --template-file data-plane-role-assignment.bicep
Pokud chcete udělit přístup k účtu z jiných identit, které chcete použít, opakujte tyto kroky.
Tip
Tento postup můžete opakovat pro tolik identit, kolik chcete. Tyto kroky se obvykle opakují, aby vývojáři měli přístup k účtu pomocí své lidské identity a povolili aplikacím přístup pomocí spravované identity.
Slouží
Get-AzCosmosDBAccount
k získání metadat pro váš aktuální účet.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-nosql-account>" } Get-AzCosmosDBAccount @parameters | Select -Property Id
Prohlédněte si výstup předchozího příkazu. Poznamenejte si hodnotu
Id
vlastnosti pro tento účet, protože je nutné ji použít v dalším kroku.Id -- /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
Poznámka:
V tomto příkladu
Id
by hodnota byla/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
. Tento příklad používá fiktivní data a váš identifikátor by se od tohoto příkladu odlišil.Slouží
New-AzCosmosDBSqlRoleAssignment
k přiřazení nové role. K parametruRoleDefinitionId
použijte dříve zaznamenané identifikátory definic rolí a jedinečný identifikátor vaší identity proPrincipalId
parametr. Nakonec pro parametr použijte identifikátorScope
vašeho účtu.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" AccountName = "<name-of-existing-nosql-account>" RoleDefinitionId = "<id-of-new-role-definition>" PrincipalId = "<id-of-existing-identity>" Scope = "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql" } New-AzCosmosDBSqlRoleAssignment @parameters
Vypíše všechna přiřazení rolí pro váš účet Azure Cosmos DB for NoSQL pomocí
Get-AzCosmosDBSqlRoleAssignment
. Zkontrolujte výstup a ujistěte se, že se vaše přiřazení role vytvořilo.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" AccountName = "<name-of-existing-nosql-account>" } Get-AzCosmosDBSqlRoleAssignment @parameters
Ověření přístupu k rovině dat v kódu
Nakonec ověřte, že jste správně udělili přístup pomocí kódu aplikace a sady Azure SDK ve vašem preferovaném programovacím jazyce.
using Azure.Core;
using Azure.Identity;
using Microsoft.Azure.Cosmos;
string endpoint = "<account-endpoint>";
TokenCredential credential = new DefaultAzureCredential();
CosmosClient client = new(endpoint, credential);
Důležité
Tento vzorový kód používá knihovny Microsoft.Azure.Cosmos
z Azure.Identity
NuGetu.