Adatsík szerepköralapú hozzáférés-vezérlés használata a NoSQL-hez készült Azure Cosmos DB-vel
A KÖVETKEZŐRE VONATKOZIK: NoSQL
Az üzembe helyezési útmutató sorrendjének diagramja a következő helyekkel együtt: Áttekintés, Fogalmak, Előkészítés, Szerepköralapú hozzáférés-vezérlés, Hálózat és Referencia. A szerepköralapú hozzáférés-vezérlés helye jelenleg ki van emelve.
Tipp.
Az új alkalmazások készítéséhez használt legújabb mintákért látogasson el az új mintagyűjteményünkbe
Ez a cikk végigvezeti a noSQL-fiókhoz készült Azure Cosmos DB-fiókok adatainak kezeléséhez szükséges identitáshozzáférés biztosításának lépésein.
Fontos
A cikkben szereplő lépések csak az adatsík-hozzáférésre vonatkoznak az egyes elemeken végzett műveletek végrehajtásához és a lekérdezések futtatásához. A vezérlősík szerepköreinek, definícióinak és hozzárendeléseinek kezeléséről a vezérlősík szerepköralapú hozzáférésének biztosításáról olvashat.
Előfeltételek
- Egy Azure-fiók, aktív előfizetéssel. Fiók ingyenes létrehozása.
- Egy meglévő Azure Cosmos DB for NoSQL-fiók.
- Egy vagy több meglévő identitás a Microsoft Entra-azonosítóban.
Használja a Bash-környezetet az Azure Cloud Shellben. További információ: A Bash rövid útmutatója az Azure Cloud Shellben.
Ha inkább helyi cli-referenciaparancsokat szeretne futtatni, telepítse az Azure CLI-t. Ha Windows vagy macOS rendszert használ, fontolja meg az Azure CLI Docker-tárolóban való futtatását. További információ: Az Azure CLI futtatása Docker-tárolóban.
Ha helyi telepítést használ, jelentkezzen be az Azure CLI-be az az login parancs futtatásával. A hitelesítési folyamat befejezéséhez kövesse a terminálon megjelenő lépéseket. További bejelentkezési lehetőségekért lásd : Bejelentkezés az Azure CLI-vel.
Amikor a rendszer kéri, először telepítse az Azure CLI-bővítményt. További információ a bővítményekről: Bővítmények használata az Azure CLI-vel.
Futtassa az az version parancsot a telepített verzió és a függő kódtárak megkereséséhez. A legújabb verzióra az az upgrade paranccsal frissíthet.
- Ha az Azure PowerShell helyi használatát választja:
- Telepítse az Az PowerShell-modul legújabb verzióját.
- Csatlakozzon az Azure-fiókjához a Connect-AzAccount parancsmag használatával.
- Ha az Azure Cloud Shell használata mellett dönt:
- További információkért tekintse meg az Azure Cloud Shell áttekintését.
Szerepkördefiníció előkészítése
Először elő kell készítenie egy szerepkördefiníciót egy listával dataActions
, amely hozzáférést biztosít az adatok olvasásához, lekérdezéséhez és kezeléséhez az Azure Cosmos DB for NoSQL-ben.
Fontos
Egy meglévő adatsík szerepkördefiníciójának beszerzéséhez az alábbi vezérlősík-engedélyek szükségesek:
Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read
További információ: A vezérlősík szerepköralapú hozzáférésének biztosítása.
Listázhatja az Azure Cosmos DB for NoSQL-fiókhoz társított szerepkördefiníciókat a használatával az cosmosdb sql role definition list
. Tekintse át a kimenetet, és keresse meg a Cosmos DB beépített adatszolgáltató nevű szerepkördefiníciót. A kimenet a tulajdonság szerepkördefiníciójának egyedi azonosítóját id
tartalmazza. Jegyezze fel ezt az értéket az útmutató későbbi részében, a hozzárendelési lépésben használni kívánt módon.
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"
}
...
]
Feljegyzés
Ebben a példában az érték a id
következő lenne /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002
: . Ez a példa fiktív adatokat használ, és az azonosító eltér a példától.
Az Azure Cosmos DB for NoSQL-fiókhoz társított szerepkördefiníciók listázására használható Get-AzCosmosDBSqlRoleDefinition
. Tekintse át a kimenetet, és keresse meg a Cosmos DB beépített adatszolgáltató nevű szerepkördefiníciót. A kimenet a tulajdonság szerepkördefiníciójának egyedi azonosítóját Id
tartalmazza. Jegyezze fel ezt az értéket az útmutató későbbi részében, a hozzárendelési lépésben használni kívánt módon.
$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 :
Feljegyzés
Ebben a példában az érték a Id
következő lenne /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002
: . Ez a példa fiktív adatokat használ, és az azonosító eltér a példától. Az azonosító (00000000-0000-0000-0000-000000000002
) azonban a fiók összes szerepkördefiníciójában egyedi.
Szerepkör hozzárendelése identitáshoz
Most rendelje hozzá az újonnan definiált szerepkört egy identitáshoz, hogy az alkalmazások hozzáférhessenek az Adatokhoz az Azure Cosmos DB for NoSQL-ben.
Fontos
Új adatsík-szerepkör-hozzárendelés létrehozásához a vezérlősík engedélyei szükségesek:
Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read
Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/read
Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write
További információ: A vezérlősík szerepköralapú hozzáférésének biztosítása.
Az aktuális fiók egyedi azonosítójának lekérésére használható
az cosmosdb show
.az cosmosdb show \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-nosql-account>" \ --query "{id:id}"
Figyelje meg az előző parancs kimenetét. Jegyezze fel a
id
fiók tulajdonságának értékét, ahogy azt a következő lépésben használni kell.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql" }
Feljegyzés
Ebben a példában az érték a
id
következő lenne/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
: . Ez a példa fiktív adatokat használ, és az azonosító eltér a példától.Az új szerepkör hozzárendelése a következővel
az cosmosdb sql role assignment create
: . Használja a korábban rögzített szerepkördefiníció-azonosítókat az--role-definition-id
argumentumhoz, és az identitás egyedi azonosítóját az--principal-id
argumentumhoz. Végül használja a fiók azonosítóját az--scope
argumentumhoz.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"
Az Azure Cosmos DB for NoSQL-fiókhoz tartozó összes szerepkör-hozzárendelés listázására használható
az cosmosdb sql role assignment list
. Tekintse át a kimenetet, és győződjön meg arról, hogy a szerepkör-hozzárendelés létrejött.az cosmosdb sql role assignment list \ --resource-group "<name-of-existing-resource-group>" \ --account-name "<name-of-existing-nosql-account>"
Hozzon létre egy új Bicep-fájlt a szerepkör-hozzárendelés definiálásához. Adja a fájlnak a data-plane-role-assignment.bicep nevet.
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
Hozzon létre egy új Bicep-paraméterfájlt data-plane-role-assignment néven.
bicepparam
Ebben a paraméterfájlban rendelje hozzá a meglévő Azure Cosmos DB for NoSQL-fiók nevét aaccountName
paraméterhez, a korábban rögzített szerepkördefiníció-azonosítókat aroleDefinitionId
paraméterhez, valamint az identitás egyedi azonosítóját aidentityId
paraméterhez.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>'
A Bicep-sablon üzembe helyezése a következővel
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
Ismételje meg ezeket a lépéseket, hogy hozzáférést biztosítson a fiókhoz bármely más identitásból, amelyet használni szeretne.
Tipp.
Ezeket a lépéseket tetszőleges számú identitás esetében megismételheti. Ezek a lépések általában legalább ismétlődnek, hogy a fejlesztők hozzáférhessenek egy fiókhoz az emberi identitásuk használatával, és lehetővé tegyék az alkalmazások számára a felügyelt identitással való hozzáférést.
A jelenlegi fiók metaadatainak lekérésére használható
Get-AzCosmosDBAccount
.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-nosql-account>" } Get-AzCosmosDBAccount @parameters | Select -Property Id
Figyelje meg az előző parancs kimenetét. Jegyezze fel a
Id
fiók tulajdonságának értékét, ahogy azt a következő lépésben használni kell.Id -- /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
Feljegyzés
Ebben a példában az érték a
Id
következő lenne/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
: . Ez a példa fiktív adatokat használ, és az azonosító eltér a példától.Az új szerepkör hozzárendelésére használható
New-AzCosmosDBSqlRoleAssignment
. Használja a korábban rögzített szerepkördefiníció-azonosítókat aRoleDefinitionId
paraméterhez, valamint az identitás egyedi azonosítóját aPrincipalId
paraméterhez. Végül használja a fiók azonosítóját aScope
paraméterhez.$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
Listázhatja az Azure Cosmos DB for NoSQL-fiók összes szerepkör-hozzárendelését a használatával
Get-AzCosmosDBSqlRoleAssignment
. Tekintse át a kimenetet, és győződjön meg arról, hogy a szerepkör-hozzárendelés létrejött.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" AccountName = "<name-of-existing-nosql-account>" } Get-AzCosmosDBSqlRoleAssignment @parameters
Adatsík-hozzáférés ellenőrzése kódban
Végül ellenőrizze, hogy helyesen adta-e meg a hozzáférést az alkalmazáskód és az Azure SDK használatával az előnyben részesített programozási nyelven.
using Azure.Core;
using Azure.Identity;
using Microsoft.Azure.Cosmos;
string endpoint = "<account-endpoint>";
TokenCredential credential = new DefaultAzureCredential();
CosmosClient client = new(endpoint, credential);
Fontos
Ez a kódminta a Microsoft.Azure.Cosmos
NuGetből származó kódtárakat Azure.Identity
használja.