Geplante Synchronisierung von Besitzern freigegebener Kanäle
Stellt sicher, dass die Mitglieder einer Security Group Besitzer zugeordneter Teams und ihrer freigegebenen Kanäle sind.
Beschreibung
Die gemeinsamen Kanäle von Teams übernehmen keine Besitzrechte von ihrem übergeordneten Team. Dieses geplante Runbook schließt diese Lücke: Für jedes in einer Zuordnung genannte Team stellt es sicher, dass die Mitglieder einer zugeordneten Security Group Besitzer des Teams und jedes vom Team gehosteten gemeinsamen Kanals sind. Die Zuordnung von Teamname zu Besitzergruppe wird zentral als RealmJoin-Org-Einstellung gepflegt. Das Runbook ist nur ergänzend – vorhandene Besitzer und Mitglieder werden niemals entfernt – daher werden neu erstellte gemeinsame Kanäle beim nächsten Lauf einfach übernommen. Optional kann es einen Bericht per E-Mail senden und/oder die CSV-Ergebnisse als Download-Link hochladen. Siehe die begleitende Dokumentation für die Zuordnungsregeln und die Konfiguration.
So funktioniert es
Bei jedem Lauf führt das Runbook Folgendes aus:
Liest die Zuordnung von Teamname zu Besitzergruppe aus der Org-Einstellung
SharedChannelOwners.Mapping.Für jeden Eintrag sucht es das Team anhand seines exakten Anzeigenamens.
Erweitert die Besitzergruppe dieses Eintrags auf ihre transitive Benutzer Mitglieder (Gäste werden übersprungen – sie können keinem gemeinsamen Kanal angehören).
Stellt sicher, dass diese Benutzer Besitzer des Teams und jedes gehosteten gemeinsamen Kanals des Teams sind.
Das Runbook ist nur ergänzend: Es stuft vorhandene Besitzer oder Mitglieder niemals herab und entfernt sie auch nicht. Neu erstellte gemeinsame Kanäle werden daher beim nächsten geplanten Lauf automatisch übernommen, ohne bereits Vorhandenes zu beeinträchtigen.
Zuordnungskonfiguration
Die Zuordnung ist zentral in den RealmJoin-Org-Einstellungen gespeichert (Runbook-Anpassung → Einstellungen → SharedChannelOwners.Mapping), sodass sie einmal gepflegt und von jedem Zeitplan gemeinsam genutzt wird. Es ist eine Liste von { TeamName, OwnerGroupId } Objekten, wobei TeamName der exakte Anzeigename des Teams (siehe den Hinweise Abschnitt für ein sofort verwendbares Beispiel). Der verborgene TeamOwnerGroupMapping Parameter wird aus dieser Einstellung eingespeist; das Runbook akzeptiert ihn entweder als strukturiertes Array (empfohlene Form einer Untereinstellung) oder als JSON-String und normalisiert beides.
Teamzuordnung
Jeder Zuordnungseintrag bezieht sich auf ein ausdrücklich benanntes Team:
Ein Team wird anhand seines exakten Anzeigenamens (Groß-/Kleinschreibung wird ignoriert, konsistent mit Microsoft Graph; führende und nachfolgende Leerzeichen im konfigurierten Namen werden ignoriert). Es wird nur dieses Team verarbeitet – es gibt kein Präfix- oder Wildcard-Verhalten, daher wirkt sich ein Eintrag mit dem Namen
EXT Service Aniemals aufEXT Service A Backupoder Ähnliches aus.Anzeigenamen sind in Entra ID nicht zwingend eindeutig. Wenn mehrere Teams denselben konfigurierten Namen haben, wird die Besitzergruppe auf alle von ihnen angewendet. Wenn kein Team übereinstimmt, wird der Eintrag als nicht gefunden gemeldet und übersprungen.
Teamauswahl
Für jeden konfigurierten TeamName führt das Runbook eine Graph- displayName eq '...' Abfrage aus und behält nur Microsoft 365-Gruppen bei, die als Team.
Was geändert wird
Team (optional,
IncludeTeamOwners, standardmäßig aktiviert): die Benutzer der Besitzergruppe werden als Besitzer und Mitglieder der übergeordneten M365-Gruppe hinzugefügt. Die Teammitgliedschaft ist auch die technische Voraussetzung dafür, Besitzer eines gemeinsamen Kanals zu werden, daher ermöglicht dieser Schritt den Kanalschritt.Gemeinsame Kanäle: für jeden gehosteten gemeinsamen Kanal (
membershipType eq 'shared'), für jeden Benutzer der Besitzergruppe wird sichergestellt, dass er Kanal- Besitzer - direkt hinzugefügt, wenn er fehlt, oder hochgestuft, wenn er bereits Mitglied ist. Wenn ein direktes Hinzufügen als Besitzer abgelehnt wird (z. B. aufgrund von Verzögerungen bei der Mitgliedsreplikation), weicht das Runbook darauf aus, den Benutzer zuerst als Mitglied hinzuzufügen und ihn dann hochzustufen.
Trockenlauf
Setze WhatIfMode um zu protokollieren, was sich ändern würde, ohne etwas zu schreiben. In diesem Modus gibt das Runbook vorab die Teams aus, die es verarbeiten würde (mit ihrer Besitzergruppe), sowie alle konfigurierten Teamnamen, die nicht gefunden wurden.
Berichterstellung (optional, beide standardmäßig deaktiviert)
SendEmailReportsendet eine E-Mail im RealmJoin-Design (überSend-RjReportEmail) mit Laufstatistiken und zwei CSV-Anhängen: einer Zusammenfassung pro Team und einer Detailliste pro Änderung. Der Absender wird aus derRJReport.EmailSenderEinstellung übernommen.CreateDownloadLinklädt dieselben CSVs in ein Storage Account hoch und gibt zeitlich begrenzte SAS-Download-Links zurück (die auch in die E-Mail eingebettet werden, wenn beide Optionen aktiviert sind). Das Ziel-Storage Account wird aus denRJReport.StorageAccount.*Einstellungen entnommen.
Der Upload in den Storage authentifiziert sich mit der verwalteten Identität des Automation-Kontos; diese Identität benötigt die Storage Blob Data Contributor RBAC-Rolle im Ziel-Storage Account (dies ist eine Azure-RBAC-Zuweisung, keine Graph-Anwendungsberechtigung).
Zeitplanung
Konzipiert für den unbeaufsichtigten Betrieb nach Zeitplan. Da die Konfiguration zentral in den Org-Einstellungen verwaltet wird und das Runbook nur ergänzend und idempotent ist, hält ein einzelner wiederkehrender Zeitplan alle zugeordneten Teams und ihre gemeinsamen Kanäle synchron, während Personen und Kanäle kommen und gehen.
Speicherort
Organisation → Allgemein → Sync Sharedchannel Owners (Geplant)
Vollständiger Runbook-Name
rjgit-org_general_sync-sharedchannel-owners_scheduled
Berechtigungen
Anwendungsberechtigungen
Typ: Microsoft Graph
Group.ReadWrite.All
GroupMember.ReadWrite.All
Channel.ReadBasic.All
ChannelMember.ReadWrite.All
Mail.Send
Parameter
TeamOwnerGroupMapping
Zuordnung eines exakten Team-Anzeigenamens zu einer Objekt-ID einer Besitzer-Sicherheitsgruppe, z. B. [{ "TeamName": "EXT Service A", "OwnerGroupId": "00000000-0000-0000-0000-000000000000" }]. Verborgener Parameter, gebunden an die Org-Einstellung "SharedChannelOwners.Mapping". Das RealmJoin-Portal injiziert diesen Wert; das Runbook akzeptiert ihn entweder als deserialisiertes Objekt/Array (strukturierte Untereinstellungen) oder als JSON-String und normalisiert beides.
Erforderlich
falsch
Standardwert
[]
Typ
Objekt
IncludeTeamOwners
Wenn aktiviert (Standard), wird auch sichergestellt, dass die Mitglieder der Besitzergruppe Besitzer und Mitglieder des übergeordneten Teams selbst sind (Besitzer/Mitglieder der M365-Gruppe). Die Teammitgliedschaft ist ebenfalls die Voraussetzung für Kanalbesitz.
Erforderlich
falsch
Standardwert
Wahr
Typ
Boolesch
WhatIfMode
Wenn aktiviert, protokolliert das Runbook nur die Änderungen, die es vornehmen würde, ohne etwas zu schreiben.
Erforderlich
falsch
Standardwert
False
Typ
Boolesch
SendEmailReport
Wenn aktiviert, wird nach dem Lauf ein E-Mail-Bericht im RealmJoin-Design über Send-RjReportEmail gesendet. Der Inhalt umfasst Laufstatistiken und zwei CSV-Anhänge (Zusammenfassung pro Team und Detail pro Änderung).
Erforderlich
falsch
Standardwert
False
Typ
Boolesch
EmailTo
Empfänger-E-Mail-Adresse(n) für den Bericht (durch Kommas getrennt). Wird nur verwendet, wenn SendEmailReport aktiviert ist.
Erforderlich
falsch
Standardwert
Typ
Zeichenfolge
EmailFrom
Absenderpostfach für den Bericht. Gebunden an die Org-Einstellung "RJReport.EmailSender".
Erforderlich
falsch
Standardwert
Typ
Zeichenfolge
CreateDownloadLink
Wenn aktiviert, werden die CSV-Berichte in ein Storage Account hochgeladen und ein zeitlich begrenzter Download-Link zurückgegeben (und im E-Mail-Bericht enthalten, wenn auch dies aktiviert ist). Standardmäßig deaktiviert.
Erforderlich
falsch
Standardwert
False
Typ
Boolesch
ContainerName
Für den Upload verwendeter Storage-Container. Pro Runbook konfiguriert (keine globale RJReport-Einstellung).
Erforderlich
falsch
Standardwert
shared-channel-owners
Typ
Zeichenfolge
ResourceGroupName
Ressourcengruppe, die den Storage Account enthält. Gebunden an "RJReport.StorageAccount.ResourceGroup".
Erforderlich
falsch
Standardwert
Typ
Zeichenfolge
StorageAccountName
Für den Upload verwendetes Storage Account. Gebunden an "RJReport.StorageAccount.StorageAccountName".
Erforderlich
falsch
Standardwert
Typ
Zeichenfolge
LinkExpiryDays
Tage bis zum Ablauf des generierten Download-Links. Gebunden an "RJReport.StorageAccount.LinkExpiryDays".
Erforderlich
falsch
Standardwert
6
Typ
Int32
Zuletzt aktualisiert
War das hilfreich?