GILT FÜR: NoSQL
In diesem Artikel werden die Schritte zum Gewähren eines Identitätszugriffs zum Verwalten von Daten in einem Azure Cosmos DB für NoSQL-Konto erläutert.
Von Bedeutung
Die Schritte in diesem Artikel umfassen nur den Zugriff auf Datenebene, um Vorgänge für einzelne Elemente und Abfragen auszuführen. Informationen zum Verwalten von Datenbanken und Containern für die Steuerungsebene finden Sie unter Gewähren von rollenbasiertem Zugriff auf die Steuerungsebene.
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
- Ein bestehendes Azure Cosmos DB-Konto für NoSQL.
- Eine oder mehrere vorhandene Identitäten in Microsoft Entra ID.
Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Erste Schritte mit Azure Cloud Shell.
Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie mit Windows oder macOS arbeiten, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.
Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Um den Authentifizierungsprozess abzuschließen, führen Sie die schritte aus, die in Ihrem Terminal angezeigt werden. Weitere Anmeldeoptionen finden Sie unter Authentifizieren bei Azure mithilfe der Azure CLI.
Wenn Sie dazu aufgefordert werden, installieren Sie die Azure CLI-Erweiterung bei der ersten Verwendung. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden und Verwalten von Erweiterungen mit der Azure CLI.
Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um auf die neueste Version zu aktualisieren.
- Bei lokaler Verwendung von Azure PowerShell:
- Installieren der aktuellen Version des Azure PowerShell-Moduls.
- Stellen Sie eine Verbindung mit Ihrem Azure-Konto mit dem Cmdlet Connect-AzAccount her.
- Bei Verwendung von Azure Cloud Shell:
- Weitere Informationen finden Sie in der Übersicht über Azure Cloud Shell.
Vorbereiten der Rollendefinition
まず、Azure Cosmos DB for NoSQL のデータの読み取り、クエリ、管理を実行する権利を与えるために、dataActions
の一覧を含むロールの定義を準備する必要があります。
Von Bedeutung
Zum Abrufen einer vorhandenen Rollendefinition für datenebenen sind die folgenden Berechtigungen für die Steuerungsebene erforderlich:
Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read
詳しくは、コントロール プレーンのロールベースのアクセスの許可に関する記事をご覧ください。
Listet alle Rollendefinitionen auf, die Ihrem Azure Cosmos DB für NoSQL-Konto zugeordnet sind.az cosmosdb sql role definition list
出力を確認し、Cosmos DB 組み込みデータ共同作成者というロールの定義を見つけます。 Die Ausgabe enthält den eindeutigen Bezeichner der Rollendefinition in der id
-Eigenschaft. Notieren Sie diesen Wert, da er im Zuweisungsschritt weiter unten in diesem Leitfaden verwendet werden muss.
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"
}
...
]
Hinweis
この例では、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
になります。 In diesem Beispiel werden fiktive Daten verwendet, Ihr Bezeichner unterscheidet sich von diesem Beispiel.
Verwenden Sie Get-AzCosmosDBSqlRoleDefinition
, um alle Rollendefinitionen aufzulisten, die Ihrem Azure Cosmos DB für NoSQL-Konto zugeordnet sind. 出力を確認し、Cosmos DB 組み込みデータ共同作成者というロールの定義を見つけます。 Die Ausgabe enthält den eindeutigen Bezeichner der Rollendefinition in der Id
-Eigenschaft. Notieren Sie diesen Wert, da er im Zuweisungsschritt weiter unten in diesem Leitfaden verwendet werden muss.
$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 :
Hinweis
In diesem Beispiel wäre der Id
-Wert /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002
. In diesem Beispiel werden fiktive Daten verwendet, Ihr Bezeichner unterscheidet sich von diesem Beispiel. Der Bezeichner (00000000-0000-0000-0000-000000000002
) ist jedoch für alle Rollendefinitionen in Ihrem Konto eindeutig.
ID にロールを割り当てる
Weisen Sie nun der neu definierten Rolle eine Identität zu, damit Ihre Anwendungen auf Daten in Azure Cosmos DB für NoSQL zugreifen können.
Von Bedeutung
Zum Erstellen einer neuen Rollenzuweisung für datenebenen sind die folgenden Berechtigungen für die Steuerungsebene erforderlich:
Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read
Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/read
Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write
詳しくは、コントロール プレーンのロールベースのアクセスの許可に関する記事をご覧ください。
Verwenden Sie
az cosmosdb show
, um den eindeutigen Bezeichner für Ihr aktuelles Konto abzurufen.az cosmosdb show \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-nosql-account>" \ --query "{id:id}"
Sehen Sie sich die Ausgabe des vorherigen Befehls an. Notieren Sie den Wert der
id
-Eigenschaft für dieses Konto, da er im nächsten Schritt verwendet werden muss.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql" }
Hinweis
この例では、
id
の値は/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
になります。 In diesem Beispiel werden fiktive Daten verwendet, Ihr Bezeichner unterscheidet sich von diesem Beispiel.Weisen Sie die neue Rolle mithilfe von
az cosmosdb sql role assignment create
zu. Verwenden Sie die zuvor aufgezeichneten Rollendefinitions-IDs für das--role-definition-id
Argument und den eindeutigen Bezeichner für Ihre Identität für das--principal-id
Argument. Verwenden Sie schließlich den Bezeichner Ihres Kontos für das--scope
Argument.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"
Tipp
Wenn Sie versuchen, rollenbasierte Zugriffssteuerung auf der Datenebene für Ihre eigene Identität zu gewähren, können Sie diesen Befehl verwenden, um die Identität abzurufen:
az ad signed-in-user show
Weitere Informationen finden Sie unter
az ad signed-in-user
.Verwenden Sie
az cosmosdb sql role assignment list
, um alle Rollenzuweisungen für Ihr Azure Cosmos DB NoSQL-Konto aufzulisten. Bitte überprüfen Sie die Ausgabe, um sicherzugehen, dass Ihre Rollenzuweisung erstellt wurde.az cosmosdb sql role assignment list \ --resource-group "<name-of-existing-resource-group>" \ --account-name "<name-of-existing-nosql-account>"
Erstellen Sie eine neue Bicep-Datei, um Ihre Rollenzuweisung zu definieren. Benennen Sie die Datei data-plane-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 = deployer().objectId 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
data-plane-role-assignment.
bicepparam
という新しい Bicep パラメーター ファイルを作成します。 Weisen Sie in dieser Parameterdatei den Namen Ihres vorhandenen Azure Cosmos DB für NoSQL-Kontos demaccountName
Parameter, den zuvor aufgezeichneten Rollendefinitionsbezeichnern demroleDefinitionId
Parameter und dem eindeutigen Bezeichner für Ihre Identität für denidentityId
Parameter zu.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>'
Tipp
データ プレーンのロールベースのアクセス制御を独自の ID に付与しようとしている場合は、
identityId
パラメーターを省略できます。 その後、Bicep テンプレートはdeployer().objectId
を使用して、テンプレートをデプロイしたプリンシパルの ID を取得します。 Weitere Informationen finden Sie unterdeployer
.Stellen Sie die Bicep-Vorlage mithilfe von
az deployment group create
bereit.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --parameters data-plane-role-assignment.bicepparam \ --template-file data-plane-role-assignment.bicep
Wiederholen Sie diese Schritte, um den Zugriff auf das Konto von allen anderen Identitäten zu gewähren, die Sie verwenden möchten.
Tipp
Sie können diese Schritte für beliebig viele Identitäten wiederholen. In der Regel werden diese Schritte mindestens wiederholt, um Entwicklern den Zugriff auf ein Konto mithilfe ihrer menschlichen Identität zu ermöglichen. Sie können diese Schritte auch wiederholen, um Anwendungen den Zugriff auf Ressourcen mithilfe einer verwalteten Identität zu ermöglichen.
Verwenden Sie
Get-AzCosmosDBAccount
, um die Metadaten für Ihr aktuelles Konto zu erhalten.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-nosql-account>" } Get-AzCosmosDBAccount @parameters | Select -Property Id
Sehen Sie sich die Ausgabe des vorherigen Befehls an. Notieren Sie den Wert der
Id
-Eigenschaft für dieses Konto, da er im nächsten Schritt verwendet werden muss.Id -- /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
Hinweis
この例では、
Id
の値は/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
になります。 In diesem Beispiel werden fiktive Daten verwendet, Ihr Bezeichner unterscheidet sich von diesem Beispiel.Verwenden Sie
New-AzCosmosDBSqlRoleAssignment
, um die neue Rolle zuzuweisen. Verwenden Sie die zuvor aufgezeichneten Rollendefinitions-IDs für denRoleDefinitionId
Parameter und den eindeutigen Bezeichner für Ihre Identität für denPrincipalId
Parameter. Verwenden Sie schließlich den Bezeichner Ihres Kontos für denScope
Parameter.$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
Tipp
データ プレーンのロールベースのアクセス制御を独自の ID に付与しようとしている場合は、次のコマンドを使用して ID を取得できます。
Get-AzADUser -SignedIn | Format-List ` -Property Id, DisplayName, Mail, UserPrincipalName
Weitere Informationen finden Sie unter
Get-AzADUser
.Liste aller Rollenzuweisungen für Ihr Azure Cosmos DB-Konto für NoSQL mithilfe von
Get-AzCosmosDBSqlRoleAssignment
. 出力に目を通して、ロールの割り当てが作成されたことを確認します。$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" AccountName = "<name-of-existing-nosql-account>" } Get-AzCosmosDBSqlRoleAssignment @parameters
コードでデータ プレーンのアクセスを検証する
Überprüfen Sie schließlich mithilfe von Anwendungscode und dem Azure SDK in Ihrer bevorzugten Sprache, ob Sie den Zugriff ordnungsgemäß gewährt haben.
using Azure.Core;
using Azure.Identity;
using Microsoft.Azure.Cosmos;
string endpoint = "<account-endpoint>";
TokenCredential credential = new DefaultAzureCredential();
CosmosClient client = new(endpoint, credential);
Container container = client.GetContainer("<database-name>", "<container-name>");
await container.ReadItemAsync<dynamic>("<item-id>", new PartitionKey("<partition-key>"));
Von Bedeutung
In diesem Codebeispiel werden die Bibliotheken Microsoft.Azure.Cosmos
und Azure.Identity
von NuGet verwendet.