Freigeben über


Verwenden der rollenbasierten Zugriffssteuerung auf Steuerungsebene mit Azure Cosmos DB for NoSQL

GILT FÜR: NoSQL

Abbildung: Aktuelle Phase („Rollenbasierte Zugriffssteuerung“) in der Sequenz des Bereitstellungsleitfadens

Abbildung: Sequenz des Bereitstellungsleitfadens, einschließlich dieser Phasen (in ihrer Reihenfolge): Übersicht, Konzepte, Vorbereiten, Rollenbasierte Zugriffssteuerung, Netzwerk und Verweis. Die Phase „Rollenbasierte Zugriffssteuerung“ ist derzeit hervorgehoben.

In diesem Artikel werden die Schritte zum Gewähren des Zugriffs für eine Identität zum Verwalten eines Azure Cosmos DB for NoSQL-Kontos und seiner Ressourcen erläutert.

Wichtig

Die Schritte in diesem Artikel umfassen nur den Zugriff auf Steuerungsebene, um Vorgänge für das Konto selbst oder Ressourcen in der Hierarchie des Kontos auszuführen. Informationen zum Verwalten von Elementen und Ausführen von Abfragen für die Datenebene finden Sie unter Erteilen des rollenbasierten Zugriffs auf Datenebenen.

Voraussetzungen

  • Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
  • Ein vorhandenes Azure Cosmos DB-Konto
  • Mindestens eine Identität in Microsoft Entra ID
  • Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.

  • Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, 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. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.

    • Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden 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 das Upgrade auf die aktuelle Version durchzuführen.

Vorbereiten der Rollendefinition

Zunächst müssen Sie eine Rollendefinition mit einer Liste von actions vorbereiten, um Zugriff zum Verwalten von Kontoressourcen in Azure Cosmos DB zu gewähren.

Listen Sie mithilfe von az role definition list alle Rollendefinitionen auf, die Ihrem Azure Cosmos DB-Konto zugeordnet sind. Überprüfen Sie die Ausgabe, und suchen Sie die Rollendefinition namens Integrierter Mitwirkender an Cosmos DB-Daten. 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 role definition list \
    --name "Cosmos DB Operator"
[
  {
    "assignableScopes": [
      "/"
    ],
    "description": "Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.",
    "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa",
    "name": "230815da-be43-4aae-9cb4-875f7bd000aa",
    "permissions": [
      {
        "actions": [
          "Microsoft.DocumentDb/databaseAccounts/*",
          "Microsoft.Insights/alertRules/*",
          "Microsoft.Authorization/*/read",
          "Microsoft.ResourceHealth/availabilityStatuses/read",
          "Microsoft.Resources/deployments/*",
          "Microsoft.Resources/subscriptions/resourceGroups/read",
          "Microsoft.Support/*",
          "Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action"
        ],
        "condition": null,
        "conditionVersion": null,
        "dataActions": [],
        "notActions": [
          "Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*",
          "Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*",
          "Microsoft.DocumentDB/databaseAccounts/regenerateKey/*",
          "Microsoft.DocumentDB/databaseAccounts/listKeys/*",
          "Microsoft.DocumentDB/databaseAccounts/listConnectionStrings/*",
          "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write",
          "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/delete",
          "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write",
          "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/delete",
          "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write",
          "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/delete",
          "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write",
          "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/delete"
        ],
        "notDataActions": []
      }
    ],
    "roleName": "Cosmos DB Operator",
    "roleType": "BuiltInRole",
    "type": "Microsoft.Authorization/roleDefinitions",
  }
]

Hinweis

In diesem Beispiel wäre der Wert id /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa. In diesem Beispiel werden fiktive Daten verwendet, Ihr Bezeichner unterscheidet sich daher von diesem Beispiel. Der Bezeichner (230815da-be43-4aae-9cb4-875f7bd000aa) ist jedoch für alle Rollendefinitionen in Azure global eindeutig.

  1. Melden Sie sich beim Azure-Portal (https://portal.azure.com) an.

  2. Geben Sie Ressourcengruppe in die Leiste für die globale Suche ein.

    Screenshot der globalen Suchleiste im Azure-Portal.

  3. Wählen Sie unter Dienste die Option Ressourcengruppen aus.

    Screenshot: Im Suchmenü ausgewählte Option „Ressourcengruppen“

  4. Wählen Sie im Bereich Ressourcengruppen die vorhandene Ressourcengruppe aus.

    Screenshot: Vorhandene Ressourcengruppe in der Liste der Ressourcengruppen für das Abonnement.

    Hinweis

    Dieser Beispielscreenshot enthält die Ressourcengruppe msdocs-identity-example. Der tatsächliche Name Ihrer Ressourcengruppe kann sich davon unterscheiden.

  5. Wählen Sie im Bereich für die Ressourcengruppe im Dienstmenü Zugriffssteuerung (IAM) aus.

    Screenshot: Option „Zugriffssteuerung (IAM)“ im Dienstmenü für eine Ressourcengruppe

  6. Wählen Sie im Bereich Zugriffssteuerung (IAM) die Option Rollen aus.

    Screenshot: Option „Rollen“ im Bereich „Zugriffssteuerung (IAM)“

  7. Verwenden Sie im Abschnitt Rollen den Suchbegriff Cosmos DB, und suchen Sie die Rollendefinition Cosmos DB-Operator. Wählen Sie dann die Option Ansicht aus, die dieser Definition zugeordnet ist.

    Screenshot: Liste der Rollendefinitionen im aktuellen zuweisbaren Bereich, der so gefiltert ist, dass nur Definitionen mit „Cosmos DB“ im Titel enthalten sind

  8. Beachten Sie im Dialogfeld für die Rollendefinition Cosmos DB-Operator die Aktionen, die als Teil dieser Rollendefinition zugewiesen sind.

    Screenshot: Dialogfeld „Cosmos DB-Operator“ mit Details zur integrierten Rollendefinition

  9. Schließen Sie das Dialogfeld der Rollendefinition Cosmos DB-Operator.

Verwenden Sie Get-AzRoleDefinition, um alle Rollendefinitionen aufzulisten, die Ihrem Azure Cosmos DB-Konto zugeordnet sind. Überprüfen Sie die Ausgabe, und suchen Sie die Rollendefinition namens Integrierter Mitwirkender an Cosmos DB-Daten. 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 = @{
    Name = "Cosmos DB Operator"
}
Get-AzRoleDefinition @parameters
Name             : Cosmos DB Operator
Id               : 230815da-be43-4aae-9cb4-875f7bd000aa
IsCustom         : False
Description      : Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.
Actions          : {Microsoft.DocumentDb/databaseAccounts/*, Microsoft.Insights/alertRules/*, Microsoft.Authorization/*/read, Microsoft.ResourceHealth/availabilityStatuses/read…}
NotActions       : {Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*, Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*, Microsoft.DocumentDB/databaseAccounts/regenerateKey/*, Microsoft.DocumentDB/databaseAccounts/listKeys/*…}
DataActions      : {}
NotDataActions   : {}
AssignableScopes : {/}

Hinweis

In diesem Beispiel wäre der Wert Id 230815da-be43-4aae-9cb4-875f7bd000aa. Der Bezeichner ist für alle Rollendefinitionen in Azure global eindeutig.

Zuweisen einer Rolle zur Identität

Weisen Sie nun die neu definierte Rolle einer Identität zu, damit Ihre Anwendungen auf Ressourcen in Azure Cosmos DB zugreifen können.

Wichtig

Für diese Zuweisungsaufgabe müssen Sie bereits über den eindeutigen Bezeichner aller Identitäten verfügen, denen Sie Berechtigungen der rollenbasierten Zugriffssteuerung erteilen möchten.

  1. Verwenden Sie az group show, um erneut die Metadaten für Ihre aktuelle Ressourcengruppe abzurufen.

    az group show \
        --name "<name-of-existing-resource-group>"
    
  2. Sehen Sie sich die Ausgabe des vorherigen Befehls an. Notieren Sie den Wert der id-Eigenschaft für diese Ressourcengruppe, da er im nächsten Schritt verwendet werden muss.

    {
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example",
      "location": "westus",
      "name": "msdocs-identity-example",
      "type": "Microsoft.Resources/resourceGroups"
    }
    

    Hinweis

    In diesem Beispiel wäre der Wert id /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example. In diesem Beispiel werden fiktive Daten verwendet, Ihr Bezeichner unterscheidet sich daher von diesem Beispiel. Dies ist ein gekürztes Beispiel für die Ausgabe.

  3. Weisen Sie die neue Rolle mithilfe von az role assignment create zu. Verwenden Sie den Bezeichner Ihrer Ressourcengruppe für das Argument --scope, den Rollenbezeichner für das Argument -role und den eindeutigen Bezeichner für Ihre Identität für das Argument --assignee.

    az role assignment create \
        --assignee "<your-principal-identifier>" \
        --role "subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0" \
        --scope "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
    

    Hinweis

    In diesem Beispielbefehl wurde scope auf das fiktive Beispiel /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example aus dem Beispiel im vorherigen Schritt festgelegt. Der Bezeichner Ihrer Ressourcengruppe unterscheidet sich von diesem Beispiel. role wurde ebenfalls auf das fiktive Element /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0 festgelegt. Auch hier ist Ihr Rollenbezeichner anders.

  4. Beachten Sie die Ausgabe des -Befehls. Die Ausgabe enthält einen eindeutigen Bezeichner für die Zuweisung in der Eigenschaft id.

    {
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0",
      "name": "ffffffff-5555-6666-7777-aaaaaaaaaaaa",
      "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
      "resourceGroup": "msdocs-identity-example",
      "roleDefinitionId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0",
      "scope": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example",
      "type": "Microsoft.Authorization/roleAssignments"
    }
    

    Hinweis

    In diesem Beispiel ist die id-Eigenschaft /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0. Dabei handelt es sich um ein weiteres fiktives Beispiel.

  5. 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 und den Zugriff auf Anwendungen mithilfe einer verwalteten Identität zu ermöglichen.

  1. Erstellen Sie eine neue Bicep-Datei, um Ihre Rollenzuweisung zu definieren. Geben Sie der Datei den Namen control-plane-role-assignment.bicep.

    metadata description = 'Assign RBAC role for control plane access to Azure Cosmos DB.'
    
    @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 assignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
      name: guid(subscription().id, resourceGroup().id, roleDefinitionId, identityId)
      scope: resourceGroup()
      properties: {
        roleDefinitionId: roleDefinitionId
        principalId: identityId
      }
    }
    
  2. Erstellen Sie eine neue Bicep-Parameterdatei mit dem Namen control-plane-role-assignment.bicepparam. Weisen Sie in dieser Parameterdatei die zuvor notierten Rollendefinitionsbezeichner dem Parameter roleDefinitionId und den eindeutigen Bezeichner für Ihre Identität dem Parameter identityId zu.

    using './control-plane-role-assignment.bicep'
    
    param roleDefinitionId = '<id-of-new-role-definition>'
    param identityId = '<id-of-existing-identity>'
    
  3. Stellen Sie diese Bicep-Vorlage mithilfe von az deployment group create bereit.

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --parameters control-plane-role-assignment.bicepparam \
        --template-file control-plane-role-assignment.bicep
    
  4. 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 und den Zugriff auf Anwendungen mithilfe einer verwalteten Identität zu ermöglichen.

  1. Wählen Sie im Bereich Zugriffssteuerung (IAM) die Option Hinzufügen und dann Rollenzuweisung hinzufügen aus.

    Screenshot: Option „Rollenzuweisung hinzufügen“ im Menü „Zugriffssteuerung (IAM)“ für die Option „Hinzufügen“

  2. Suchen Sie im Bereich Rolle nach Azure Cosmos DB, und wählen Sie dann die Rolle Azure Cosmos DB-Besitzer auf Steuerungsebene aus, die Sie weiter oben in diesem Leitfaden erstellt haben. Wählen Sie anschließend Weiter aus.

    Screenshot: Bereich „Rolle“ zum Hinzufügen einer Rollenzuweisung

    Tipp

    Sie können optional die Liste der Rollen filtern, um nur benutzerdefinierte Rollen einzuschließen.

  3. Wählen Sie im Bereich Mitglieder die Option Mitglieder auswählen aus. Wählen Sie im Bereich „Mitglieder“ die Identität aus, der Sie diese Zugriffsebene für Ihr Azure Cosmos DB-Konto gewähren möchten, und wählen Sie dann zum Bestätigen Ihrer Auswahl die Option Auswählen aus.

    Screenshot: Bereich „Mitglieder“ zum Hinzufügen einer Rollenzuweisung

    Screenshot: Dialogfeld zum Auswählen der Identität zum Hinzufügen einer Rollenzuweisung

    Hinweis

    Dieser Screenshot veranschaulicht einen Beispielbenutzer namens "Kai Carter" mit einem Prinzipal von kai@adventure-works.com.

  4. Kehren Sie zum Bereich Mitglieder zurück, überprüfen Sie die ausgewählten Mitglieder, und wählen Sie dann Überprüfen + zuweisen aus.

    Screenshot: Bereich „Mitglieder“ mit einer ausgewählten Identität für eine Rollenzuweisung

  5. Überprüfen Sie im Bereich Überprüfen + zuweisen die angegebenen Optionen für die neue Rollenzuweisung. Wählen Sie schließlich Überprüfen und zuweisen aus.

    Screenshot: Bereich „Überprüfen + zuweisen“ für eine Rollenzuweisung

  6. Warten Sie, bis das Portal die Erstellung der Rollenzuweisung abgeschlossen hat.

  1. Weisen Sie die neue Rolle mithilfe von New-AzRoleAssignment zu. Verwenden Sie den Namen der Rolle für den Parameter RoleDefinitionName und den eindeutigen Bezeichner für Ihre Identität für den Parameter ObjectId.

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        ObjectId = "<your-principal-identifier>"
        RoleDefinitionName = "Azure Cosmos DB Control Plane Owner"
    }
    New-AzRoleAssignment @parameters
    
  2. Beachten Sie die Ausgabe des -Befehls. Die Ausgabe enthält einen eindeutigen Bezeichner für die Zuweisung in der Eigenschaft RoleAssignmentId.

    RoleAssignmentName : ffffffff-5555-6666-7777-aaaaaaaaaaaa
    RoleAssignmentId   : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
    Scope              : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
    DisplayName        : Kai Carter
    SignInName         : <kai@adventure-works.com>
    RoleDefinitionName : Azure Cosmos DB Control Plane Owner
    RoleDefinitionId   : e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5
    

    Hinweis

    In diesem Beispiel ist die RoleAssignmentId-Eigenschaft /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0. Dabei handelt es sich um ein weiteres fiktives Beispiel. Aus Gründen der Übersichtlichkeit handelt es sich hierbei um eine Teilmenge der typischen Ausgabe der Bereitstellung.

  3. 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 und den Zugriff auf Anwendungen mithilfe einer verwalteten Identität zu ermöglichen.

Überprüfen des Zugriffs auf Steuerungsebene im Code

Überprüfen Sie schließlich mithilfe von Anwendungscode und dem Azure Management SDK in Ihrer bevorzugten Sprache, ob Sie den Zugriff ordnungsgemäß gewährt haben.

using Azure.Identity;
using Azure.ResourceManager;

DefaultAzureCredential credential = new();

ArmClient client = new(credential);

Wichtig

In diesem Codebeispiel werden die Bibliotheken Azure.ResourceManager.CosmosDB und Azure.Identity von NuGet verwendet.

Nächster Schritt