Separate BizTalk collection from Checkmk agent

This commit is contained in:
2026-07-30 15:50:42 +02:00
parent e3d7f6a780
commit d15bb6539b
22 changed files with 2051 additions and 988 deletions
+76 -113
View File
@@ -1,152 +1,115 @@
BizTalk Checkmk Pulse - ACC Berechtigungsfreigabe
Stand: 29.07.2026
BizTalk Checkmk Pulse - ACC Berechtigung und Architektur
Stand: 30.07.2026
BEFUND
======
Host: AV23AGPWBIO1
Lokale Identitaet: NT AUTHORITY\SYSTEM (LocalSystem)
Netzwerkidentitaet: BEW\AV23AGPWBIO1$
Checkmk-Identitaet: NT AUTHORITY\SYSTEM
Alte Netzwerkidentitaet: BEW\AV23AGPWBIO1$
Fehler: COMException HRESULT=0x80131904
Innerer Fehler: Login failed for user 'BEW\AV23AGPWBIO1$'
Der lokale BizTalk-WMI-Namespace ist erreichbar. Der BizTalk-WMI-Provider wird
aber bei seinem SQL-Zugriff als Maschinenkonto abgewiesen. Deshalb sind
Platform, Host Instances, Runtime Artifacts und Suspended Instances UNKNOWN.
BizTalk SQL Access kann ohne MSBTS_GroupSetting keine Ziele ermitteln.
Der lokale BizTalk-WMI-Namespace war erreichbar. Datenbankgestuetzte
BizTalk-WMI-Abfragen scheiterten am SQL-Login des Maschinenkontos.
Keine DCOM-, Firewall- oder WMI-Namespace-Rechte erweitern. Keinen direkten
SQL-Login, keine manuellen BizTalk-Datenbankrollen und kein sysadmin fuer das
Maschinenkonto anlegen.
NEUE VERBINDLICHE ARCHITEKTUR
=============================
WICHTIG ZUR NEUEN VERSION
=========================
Das Maschinenkonto erhaelt keine BizTalk-Berechtigung.
Die neue EXE repariert keine Berechtigungen. Sie erkennt den eingebetteten
SQL-Loginfehler korrekt, zeigt BEW\AV23AGPWBIO1$ und klassifiziert die
Folgediagnose als Berechtigungsproblem. Ohne die nachfolgende Freigabe bleiben
die betroffenen Checks auch mit der neuen Version UNKNOWN.
1. Ein dediziertes Dienstkonto oder bevorzugt gMSA laeuft minuetlich als
Scheduled Task "BizTalk Checkmk Pulse Provider".
2. Dieses Konto fuehrt BizTalkCheckmkPulse.exe --collect aus.
3. Es schreibt atomar einen SHA-256-geschuetzten Snapshot nach:
Die alte Version kann nach korrekter Freigabe grundsaetzlich funktionieren.
Empfohlen ist die neue Version zusammen mit der Gruppenfreigabe, weil sie
Fehlerursache, Konto und Massnahme eindeutig anzeigt.
%ProgramData%\BizTalkCheckmkPulse\data\biztalk-checkmk-pulse.snapshot
FREIGABE
========
4. Der Checkmk-Agent bleibt LocalSystem und startet nur den Consumer.
5. Der Consumer liest und validiert den Snapshot. Er fuehrt kein WMI und
keinen SQL-Zugriff aus.
1. Exakte Operator-Gruppe ermitteln
BERECHTIGUNG DES PROVIDER-KONTOS
================================
In der BizTalk Administration Console:
Bevorzugte Rolle fuer BizTalk Server 2020:
BizTalk Group > Properties > General > BizTalk Operators Group
BizTalk Server Read Only Users
SQL-Datenbankrolle: BTS_READONLY_USERS
Nicht ungeprueft den Standardnamen verwenden. Mit einem bereits berechtigten
Konto ist alternativ folgende Abfrage moeglich:
Die exakt konfigurierte Gruppe mit einem bereits berechtigten Konto ermitteln:
Get-CimInstance -Namespace root/MicrosoftBizTalkServer `
-ClassName MSBTS_GroupSetting |
Select-Object Name, BizTalkOperatorGroup, MgmtDbServerName, MgmtDbName
Select-Object Name, BizTalkReadOnlyUserGroup, BizTalkOperatorGroup,
MgmtDbServerName, MgmtDbName
2. Computerobjekt durch einen AD-Administrator aufnehmen
Das Provider-Konto durch AD-Administration in BizTalkReadOnlyUserGroup
aufnehmen. Nicht vom Standardnamen ausgehen.
Import-Module ActiveDirectory
$computer = Get-ADComputer -Identity 'AV23AGPWBIO1'
Add-ADGroupMember `
-Identity '<EXAKTE_BIZTALK_OPERATOR_GRUPPE>' `
-Members $computer `
-WhatIf
Die Operator-Gruppe ist nur eine begruendungspflichtige Eskalation, falls eine
konkret benoetigte WMI-Klasse trotz bestaetigter Read-Only-Zuordnung und neuem
Anmeldetoken verweigert wird.
Ziele kontrollieren und danach denselben Add-ADGroupMember-Befehl ohne
-WhatIf ausfuehren.
NICHT DURCHFUEHREN
==================
Mitgliedschaft pruefen:
- keinen SQL-Einzellogin fuer Provider- oder Maschinenkonto
- keine ad-hoc BizTalk-Datenbankrollen
- kein db_owner oder sysadmin
- keine pauschalen DCOM-/WMI-ACL-Erweiterungen
- Checkmk-Agentdienst nicht auf das Provider-Konto umstellen
- Maschinenkonto BEW\AV23AGPWBIO1$ nicht fuer diese Loesung berechtigen
Get-ADPrincipalGroupMembership -Identity 'AV23AGPWBIO1' |
Select-Object Name, SamAccountName
INSTALLATION
============
3. Neue Gruppenzugehoerigkeit aktivieren
gMSA:
AD-Replikation abwarten. Bevorzugt den BizTalk-Server in einem Wartungsfenster
neu starten. Alternativ in einer administrativen Shell:
.\Install-BizTalkCheckmkPulse.ps1 `
-CollectorAccount 'BEW\svc_biztalk_cmk$' `
-Gmsa `
-EnvironmentName ACC
klist purge -li 0x3e7
Regulaeres Dienstkonto:
Danach den zuvor eindeutig ermittelten Checkmk-Agent-Dienst neu starten. Falls
die neue Mitgliedschaft nicht wirksam wird, den Server neu starten.
.\Install-BizTalkCheckmkPulse.ps1 `
-CollectorAccount 'BEW\svc_biztalk_cmk' `
-EnvironmentName ACC
4. Im echten Checkmk-Kontext verifizieren
VERIFIKATION
============
Get-ScheduledTaskInfo -TaskName 'BizTalk Checkmk Pulse Provider'
Get-Content `
"$env:ProgramData\BizTalkCheckmkPulse\logs\*.log" `
-Tail 100
Get-Item `
"$env:ProgramData\BizTalkCheckmkPulse\data\biztalk-checkmk-pulse.snapshot"
& "$env:ProgramFiles\BizTalkCheckmkPulse\BizTalkCheckmkPulse.exe" --consume
& "C:\Program Files (x86)\checkmk\service\cmk-agent-ctl.exe" dump |
Select-String `
-Pattern "BizTalk|Login failed|Wmi/Permission|Sql/Permission|UNKNOWN" `
-Context 0,1
Select-String -Pattern "BizTalk|UNKNOWN|Permission|snapshot" -Context 0,1
Erwartetes Ergebnis:
ERWARTET
========
- BizTalk Platform ist OK und zeigt operator_group=<exakte Gruppe>.
- BizTalk SQL Access zeigt targets=2, available=2,
discovery_complete=True.
- Host Instances, Runtime Artifacts und Suspended Instances sind nicht mehr
wegen WMI-/SQL-Berechtigungen UNKNOWN.
- Kein Login failed fuer BEW\AV23AGPWBIO1$.
Der separate Event-Log-Service zeigte im Screenshot zwei Fehler und sechs
Warnungen. Diese Ereignisse bleiben nach der Berechtigungsfreigabe fachlich zu
pruefen.
WENN ES DANACH WEITERHIN SCHEITERT
==================================
Normalerweise wurde die konfigurierte BizTalk-Operator-Gruppe bereits durch die
BizTalk-Konfiguration am SQL Server eingerichtet. Das Maschinenkonto erbt ueber
seine AD-Gruppenmitgliedschaft die Rolle BTS_OPERATORS und benoetigt keinen
eigenen SQL-Login.
Bleibt "Login failed" trotz bestaetigter Mitgliedschaft, AD-Replikation und
Token-Erneuerung bestehen, prueft die SQL-Administration read-only:
SELECT name, type_desc
FROM sys.server_principals
WHERE name = N'BEW\<EXAKTE_BIZTALK_OPERATOR_GRUPPE>';
Danach jeweils in BizTalkMgmtDb und BizTalkMsgBoxDb:
SELECT
member_principal.name AS member_name,
role_principal.name AS role_name
FROM sys.database_role_members AS drm
JOIN sys.database_principals AS role_principal
ON role_principal.principal_id = drm.role_principal_id
JOIN sys.database_principals AS member_principal
ON member_principal.principal_id = drm.member_principal_id
WHERE member_principal.name =
N'BEW\<EXAKTE_BIZTALK_OPERATOR_GRUPPE>'
AND role_principal.name = N'BTS_OPERATORS';
Fehlt die Abbildung, gleichen BizTalk- und SQL-Administration sie mit der
BizTalk-Konfiguration ab und reparieren sie fuer die konfigurierte Gruppe.
Keinen Einzel-Login oder Sonderrollen fuer BEW\AV23AGPWBIO1$ als Umgehung
anlegen.
SICHERHEIT
==========
Die Gruppenmitgliedschaft des Computerobjekts steht allen Diensten zur
Verfuegung, die auf AV23AGPWBIO1 als LocalSystem laufen und auf
Netzwerkressourcen zugreifen. Mit Security und BizTalk-Betrieb abstimmen.
Ist dies nicht akzeptabel, ist ein separater Collector unter einem dedizierten
gMSA-/Dienstkonto mit BizTalk-Operator-Rechten die sauberere Architektur. Nicht
allein fuer dieses Plugin die Identitaet des gesamten Checkmk-Agent-Dienstes
aendern.
- LastTaskResult = 0
- Snapshot wird minuetlich aktualisiert
- Provider-Log nennt das dedizierte Konto
- BizTalk Platform zeigt read_only_group=<exakte Gruppe>
- BizTalk SQL Access zeigt targets=2 und available=2
- keine berechtigungsbedingten UNKNOWN-Services
- LocalSystem besitzt auf data nur Lesezugriff
QUELLEN
=======
https://learn.microsoft.com/en-us/windows/win32/services/localsystem-account
https://learn.microsoft.com/en-us/entra/architecture/service-accounts-computer
https://learn.microsoft.com/en-us/biztalk/core/managing-biztalk-server-security
https://learn.microsoft.com/en-us/biztalk/core/windows-groups-and-user-accounts-in-biztalk-server
https://learn.microsoft.com/en-us/biztalk/core/access-control-for-administrative-roles
https://learn.microsoft.com/en-us/biztalk/core/how-to-modify-group-properties
https://learn.microsoft.com/en-us/powershell/module/activedirectory/add-adgroupmember
https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/klist
https://learn.microsoft.com/en-us/biztalk/core/technical-reference/msbts-groupsetting-biztalkreadonlyusergroup-property-wmi
https://docs.checkmk.com/latest/en/agent_windows.html
https://docs.checkmk.com/latest/en/localchecks.html