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é.
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ě rolí, definic a přiřazení řídicí roviny 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.
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.
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-resource-group>" \ --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.