Wenn Sie mit Azure Ressourcen arbeiten und zwischen unterschiedlichen Services Daten austauschen wollen, dann werden Sie für den Zugriff von Azure Logic Apps in Azure Cosmos DBs, die Zugriffsschlüssel (Access Keys “primary / secondary key”) verwenden.

Problem

Sie arbeiten in einer Umgebung mit mehreren Azure Administratoren, die im selben Bereich wie Sie arbeiten und Sie achten darauf, das die Sicherheit in Azure beachtet wird und rotieren regelmäßig die Zugriffsschlüssel.

Wenn Sie diese Aufgabe durchführen, werden im Bereich der Logic Apps einige API Verbindungen nicht mehr funktionieren, denn die Zugriffe werden aufgrund von geänderten Schlüsseln nicht mehr funktionieren.

Abhilfe

Sie können den Zugriff so umstellen, dass Sie die Access Keys nicht mehr benötigen und stattdessen eine managed Identity nutzen.

Die Verwaltung von Geheimnissen, Anmeldeinformationen, Zertifikaten und Schlüsseln für eine sichere Kommunikation zwischen verschiedenen Diensten stellt für Entwickler eine häufige Herausforderung dar. Dank verwalteter Identitäten müssen Entwickler keine Anmeldeinformationen mehr verwalten.

Während Entwickler die Geheimnisse in Azure Key Vault sicher speichern können, benötigen Dienste eine Möglichkeit zum Zugriff auf Azure Key Vault. Verwaltete Identitäten bieten eine automatisch verwaltete Identität in Microsoft Entra ID, die Anwendungen verwenden können, wenn sie sich mit Ressourcen verbinden, die die Microsoft Entra-Authentifizierung unterstützen. Anwendungen können verwaltete Identitäten verwenden, um Microsoft Entra-Token abzurufen, ohne Anmeldeinformationen verwalten zu müssen.

Was sind verwaltete Identitäten?

What are managed identities

Einrichtung einer Logic App als Verwaltete Identität

Sie öffnen die Azure Logic App und navigieren in der Navigation in den Settings zur Identity.

In dem Bereich rechts neben der Navigation öffnet sich die Option zur Erstellung der System assigned managed Identity. Schieben Sie den Regler von Off zu On und speichern diese Optionen, anschließend wird die Objekt-ID sichtbar.

Diese ID ist die sogenannte Principal ID, die wir im nächsten Schritt benötigen.

Die Einstellungen, die hier folgen, können zum aktuellen Zeitpunkt nicht über das Azure Portal durchgeführt werden. Aktuell werden folgende Mechanismen unterstützt:

  • PowerShell
  • Azure Cli
  • Ressource Manager Template

In diesem Artikel beschreibe ich die Variante mit der PowerShell aus der Azure Shell heraus.

# Name der Ressource Gruppe
# Name of Resourcegroup
$resourceGroupName = ""

# Cosmos DB Account Name
$accountName = ""

# Dies ist die ID der Standard Rolle "Data Contributor"
# This is the ID of the Cosmos DB Built-in "Data contributor" role definition
$contributorRoleDefinitionId = "00000000-0000-0000-0000-000000000002"

# Die principal ID der Logic App Verwalteten Identität.
# This is the object ID of the managed identity.
$principalId = "1111111-1111-11111-1111-11111111"

New-AzCosmosDBSqlRoleAssignment -AccountName $accountName -ResourceGroupName $resourceGroupName -RoleDefinitionId $contributorRoleDefinitionId -Scope "/" -PrincipalId $principalId

Quelle: Use managed identities from a virtual machine to access Azure Cosmos DB – Microsoft Entra ID | Microsoft Learn

Die Rollenzuweisung vom “DocumentDB Account Contributor” und “Contributor” wie in dem Artikel beschrieben, sind nicht notwendig für das lesen und schreiben von Dokumenten in der Cosmos DB.

Einrichtung Logic App Cosmos DB Stepp

Wenn Sie den ersten Stepp der Cosmos DB in eine Logic App einfügen, dann werden Sie mit dem Wizard begrüßt, der ein Verbindungsobjekt erstellen möchte. Wählen Sie hier bitte in dem Drop Down Feld “Logic Apps Managed Identity” aus und geben der Verbindung einen Namen.

Nachdem Sie gespeichert haben, wechselt die Ansicht zu Ihrem Stepp zurück.

In diesem Beispiel möchte ich ein neues Cosmos DB Dokument erstellen. Sie können mit den aktuellen Rechten leider nicht den Datenbank Account Namen auswählen. Bitte tragen Sie den Account Namen der Cosmos DB hier ein. Die Felder Database ID und Collection ID sollten Ihnen zur Auswahl stehen.

Im Anschluss können Sie die Logic App speichern und einen ersten Test-Lauf durchführen.

Experten Tipp

Wenn Sie verifizieren wollen, welche Rechte bereits auf Ihrem Cosmos DB Account gesetzt sind, dann hilft ihnen der folgende Code.

# Name der Ressource Gruppe
# Name of Resourcegroup
$resourceGroupName = ""

# Cosmos DB Account Name
$accountName = ""

# Get role definitions from Cosmos DB
$roleDefinitions = Get-AzCosmosDBSqlRoleDefinition -ResourceGroupName $resourceGroupName -accountName $accountName

# Define variable for assignments
$CosmosDbAssignedRoles = [System.Collections.Generic.List[PSObject]]::New()

# Get all assignments
Get-AzCosmosDBSqlRoleAssignment -AccountName $accountName -ResourceGroupName $resourceGroupName | ForEach-Object {
    # Get Name of service principal Identity    
    try {
        # get spn from definition
        $spn = Get-AzADServicePrincipal -ObjectId $_.PrincipalId -Select displayName, ServicePrincipalType -ErrorAction Stop

        # identify the definition
        $definition = $roleDefinitions | Where-Object Id -eq $_.RoleDefinitionId

        $CosmosDbAssignedRoles.Add([pscustomObject]@{
            RoleName = $definition.RoleName
            RoleType = $definition.Type
            ServicePrincipalName = $spn.DisplayName
            ServicePrincipalType = $spn.ServicePrincipalType
            ServicePrincipalId = $_.PrincipalId
        })
    } catch {
        Write-Error $_.exception.Message
    }

}

# Show values
$CosmosDbAssignedRoles

Hinterlassen Sie doch gerne einen Kommentar mit Anregungen oder Wünschen.

Leave a Reply

Your email address will not be published. Required fields are marked *