Anzeigen von Aktivitätsprotokollen für Azure RBAC-Änderungen
In einigen Fällen benötigen Sie Informationen zu Änderungen bei der auf Azure-Rollen basierten Zugriffssteuerung (Role-Based Access Control, Azure RBAC), beispielsweise für die Überwachung oder Problembehandlung. Jedes Mal, wenn ein Benutzer Änderungen an den Rollenzuweisungen oder Rollendefinitionen innerhalb Ihrer Abonnements vornimmt, werden die Änderungen im Azure-Aktivitätsprotokoll aufgezeichnet. Sie können die Aktivitätsprotokolle öffnen, um alle Azure RBAC-Änderungen für die letzten 90 Tage anzuzeigen.
Protokollierte Vorgänge
Folgende Vorgänge im Bezug auf Azure RBAC werden im Aktivitätsprotokoll erfasst:
- Erstellen von Rollenzuweisungen
- Löschen von Rollenzuweisungen
- Erstellen oder Aktualisieren von benutzerdefinierten Rollendefinition
- Löschen von benutzerdefinierten Rollendefinition
Azure-Portal
Der einfachste Einstieg besteht im Anzeigen der Aktivitätsprotokolle im Azure-Portal. Der folgende Screenshot zeigt ein Beispiel für Rollenzuordnungsvorgänge im Aktivitätsprotokoll. Es enthält ebenfalls eine Option, um die Protokolle als CSV-Datei herunterzuladen.
Um weitere Informationen zu erhalten, klicken Sie auf einen Eintrag, um den Zusammenfassungsbereich zu öffnen. Klicken Sie auf die Registerkarte JSON, um ein detailliertes Protokoll zu erhalten.
Das Aktivitätsprotokoll im Portal verfügt über mehrere Filter. Im Folgenden die Filter für die auf Azure-Rollen basierte Zugriffssteuerung:
Filter | Wert |
---|---|
Ereigniskategorie |
|
Vorgang |
|
Weitere Informationen zu Aktivitätsprotokollen finden Sie unter Azure-Aktivitätsprotokoll.
Interpretieren eines Protokolleintrags
Die Protokollausgabe der Registerkarte „JSON“, von Azure PowerShell oder Azure CLI kann viele Informationen enthalten. Im Folgenden finden Sie einige der Schlüsseleigenschaften, nach denen Sie suchen können, wenn Sie versuchen, einen Protokolleintrag zu interpretieren. Möglichkeiten zum Filtern der Protokollausgabe mit Azure PowerShell oder Azure CLI finden Sie in den folgenden Abschnitten.
Eigenschaft | Beispielwerte | Beschreibung |
---|---|---|
authorization:action | Microsoft.Authorization/roleAssignments/write | Erstellen von Rollenzuweisungen |
Microsoft.Authorization/roleAssignments/delete | Löschen von Rollenzuweisungen | |
Microsoft.Authorization/roleDefinitions/write | Erstellen oder Aktualisieren einer Rollendefinition | |
Microsoft.Authorization/roleDefinitions/delete | Löschen einer Rollendefinition | |
authorization:scope | /subscriptions/{subscriptionId} /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId} |
Bereich für die Aktion |
caller | admin@example.com {objectId} |
Der Benutzer oder das System, von dem die Aktion initiiert wurde |
eventTimestamp | 2021-03-01T22:07:41.126243Z | Zeitpunkt der Aktion |
status:value | Gestartet Erfolgreich Fehler |
Status der Aktion |
Azure PowerShell
Verwenden Sie den Befehl Get-AzLog, um Aktivitätsprotokolle mit Azure PowerShell anzuzeigen.
Dieser Befehl führt alle Änderungen an der Rollenzuweisung in einem Abonnement für die letzten sieben Tage auf:
Get-AzLog -StartTime (Get-Date).AddDays(-7) | Where-Object {$_.Authorization.Action -like 'Microsoft.Authorization/roleAssignments/*'}
Dieser Befehl führt alle Änderungen an der Rollendefinition in einer Ressourcengruppe für die letzten sieben Tage auf:
Get-AzLog -ResourceGroupName pharma-sales -StartTime (Get-Date).AddDays(-7) | Where-Object {$_.Authorization.Action -like 'Microsoft.Authorization/roleDefinitions/*'}
Filtern der Protokollausgabe
Die Protokollausgabe kann viele Informationen enthalten. Dieser Befehl führt alle Änderungen an der Rollenzuweisung und der Rollendefinition in einem Abonnement für die letzten sieben Tage auf und filtert die Ausgabe:
Get-AzLog -StartTime (Get-Date).AddDays(-7) | Where-Object {$_.Authorization.Action -like 'Microsoft.Authorization/role*'} | Format-List Caller,EventTimestamp,{$_.Authorization.Action},Properties
Folgendes zeigt ein Beispiel für die gefilterte Protokollausgabe beim Erstellen einer Rollenzuweisung:
Caller : admin@example.com
EventTimestamp : 3/1/2021 10:07:42 PM
$_.Authorization.Action : Microsoft.Authorization/roleAssignments/write
Properties :
statusCode : Created
serviceRequestId: {serviceRequestId}
eventCategory : Administrative
entity : /subscriptions/{subscriptionId}/resourceGroups/example-group/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}
message : Microsoft.Authorization/roleAssignments/write
hierarchy : {tenantId}/{subscriptionId}
Caller : admin@example.com
EventTimestamp : 3/1/2021 10:07:41 PM
$_.Authorization.Action : Microsoft.Authorization/roleAssignments/write
Properties :
requestbody : {"Id":"{roleAssignmentId}","Properties":{"PrincipalId":"{principalId}","PrincipalType":"User","RoleDefinitionId":"/providers/Microsoft.Authorization/roleDefinitions/fa23ad8b-c56e-40d8-ac0c-ce449e1d2c64","Scope":"/subscriptions/
{subscriptionId}/resourceGroups/example-group"}}
eventCategory : Administrative
entity : /subscriptions/{subscriptionId}/resourceGroups/example-group/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}
message : Microsoft.Authorization/roleAssignments/write
hierarchy : {tenantId}/{subscriptionId}
Wenn Sie einen Dienstprinzipal zum Erstellen von Rollenzuweisungen verwenden, ist der Wert der Caller-Eigenschaft eine Objekt-ID des Dienstprinzipals. Sie können mithilfe von Get-AzADServicePrincipal Informationen zum Dienstprinzipal abrufen.
Caller : {objectId}
EventTimestamp : 3/1/2021 9:43:08 PM
$_.Authorization.Action : Microsoft.Authorization/roleAssignments/write
Properties :
statusCode : Created
serviceRequestId: {serviceRequestId}
eventCategory : Administrative
Azure CLI
Verwenden Sie den Befehl az monitor activity-log list, um Aktivitätsprotokolle mit der Azure CLI anzuzeigen.
Dieser Befehl listet die Aktivitätsprotokolle in einer Ressourcengruppe vom 1. März auf und blickt sieben Tage voraus:
az monitor activity-log list --resource-group example-group --start-time 2021-03-01 --offset 7d
Dieser Befehl listet die Aktivitätsprotokolle für den Autorisierungsressourcenanbieter vom 1. März auf und blickt sieben Tage voraus:
az monitor activity-log list --namespace "Microsoft.Authorization" --start-time 2021-03-01 --offset 7d
Filtern der Protokollausgabe
Die Protokollausgabe kann viele Informationen enthalten. Dieser Befehl führt alle Änderungen an der Rollenzuweisung und der Rollendefinition in einem Abonnement sieben Tage vorausblickend auf und filtert die Ausgabe:
az monitor activity-log list --namespace "Microsoft.Authorization" --start-time 2021-03-01 --offset 7d --query '[].{authorization:authorization, caller:caller, eventTimestamp:eventTimestamp, properties:properties}'
Folgendes zeigt ein Beispiel für die gefilterte Protokollausgabe beim Erstellen einer Rollenzuweisung:
[
{
"authorization": {
"action": "Microsoft.Authorization/roleAssignments/write",
"role": null,
"scope": "/subscriptions/{subscriptionId}/resourceGroups/example-group/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}"
},
"caller": "admin@example.com",
"eventTimestamp": "2021-03-01T22:07:42.456241+00:00",
"properties": {
"entity": "/subscriptions/{subscriptionId}/resourceGroups/example-group/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
"eventCategory": "Administrative",
"hierarchy": "{tenantId}/{subscriptionId}",
"message": "Microsoft.Authorization/roleAssignments/write",
"serviceRequestId": "{serviceRequestId}",
"statusCode": "Created"
}
},
{
"authorization": {
"action": "Microsoft.Authorization/roleAssignments/write",
"role": null,
"scope": "/subscriptions/{subscriptionId}/resourceGroups/example-group/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}"
},
"caller": "admin@example.com",
"eventTimestamp": "2021-03-01T22:07:41.126243+00:00",
"properties": {
"entity": "/subscriptions/{subscriptionId}/resourceGroups/example-group/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
"eventCategory": "Administrative",
"hierarchy": "{tenantId}/{subscriptionId}",
"message": "Microsoft.Authorization/roleAssignments/write",
"requestbody": "{\"Id\":\"{roleAssignmentId}\",\"Properties\":{\"PrincipalId\":\"{principalId}\",\"PrincipalType\":\"User\",\"RoleDefinitionId\":\"/providers/Microsoft.Authorization/roleDefinitions/fa23ad8b-c56e-40d8-ac0c-ce449e1d2c64\",\"Scope\":\"/subscriptions/{subscriptionId}/resourceGroups/example-group\"}}"
}
}
]
Azure Monitor-Protokolle
Azure Monitor-Protokolle ist ein weiteres Tool, das Sie verwenden können, um Azure RBAC-Änderungen für alle Azure-Ressourcen zu erfassen und zu analysieren. Azure Monitor-Protokolle bietet die folgenden Vorteile:
- Schreiben komplexer Abfragen und Logiken
- Integration in Warnungen, Power BI und andere Tools
- Aufbewahren von Daten für längere Zeiträume
- Querverweise mit anderen Protokollen wie Sicherheitsprotokollen, Protokollen virtueller Computer und benutzerdefinierten Protokollen
Folgende Schritte sind für den Einstieg grundlegend:
Konfigurieren der Aktivität für Ihren Arbeitsbereich.
Anzeigen der Aktivitätsprotokolleerkenntnisse. Sie können schnell zur Übersichtsseite für das Aktivitätsprotokoll navigieren, indem Sie auf die Option Protokolle klicken.
Verwenden Sie optional Azure Monitor Log Analytics, um die Protokolle abzufragen und anzuzeigen. Weitere Informationen finden Sie unter Erste Schritte mit Protokollabfragen in Azure Monitor.
Im Folgenden finden Sie eine Abfrage, die neue Rollenzuweisungen zurückgibt, die vom Anbieter der Zielressource geordnet wurden:
AzureActivity
| where TimeGenerated > ago(60d) and Authorization contains "Microsoft.Authorization/roleAssignments/write" and ActivityStatus == "Succeeded"
| parse ResourceId with * "/providers/" TargetResourceAuthProvider "/" *
| summarize count(), makeset(Caller) by TargetResourceAuthProvider
Im Folgenden finden Sie eine Abfrage, die Änderungen an der Rollenzuweisung zurückgibt, die in einem Diagramm angezeigt werden:
AzureActivity
| where TimeGenerated > ago(60d) and Authorization contains "Microsoft.Authorization/roleAssignments"
| summarize count() by bin(TimeGenerated, 1d), OperationName
| render timechart