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:

  1. Liest die Zuordnung von Teamname zu Besitzergruppe aus der Org-Einstellung SharedChannelOwners.Mapping.

  2. Für jeden Eintrag sucht es das Team anhand seines exakten Anzeigenamens.

  3. Erweitert die Besitzergruppe dieses Eintrags auf ihre transitive Benutzer Mitglieder (Gäste werden übersprungen – sie können keinem gemeinsamen Kanal angehören).

  4. 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 → EinstellungenSharedChannelOwners.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 A niemals auf EXT Service A Backup oder Ä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)

  • SendEmailReport sendet eine E-Mail im RealmJoin-Design (über Send-RjReportEmail) mit Laufstatistiken und zwei CSV-Anhängen: einer Zusammenfassung pro Team und einer Detailliste pro Änderung. Der Absender wird aus der RJReport.EmailSender Einstellung übernommen.

  • CreateDownloadLink lä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 den RJReport.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.

Eigenschaft
Wert

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.

Eigenschaft
Wert

Erforderlich

falsch

Standardwert

Wahr

Typ

Boolesch

WhatIfMode

Wenn aktiviert, protokolliert das Runbook nur die Änderungen, die es vornehmen würde, ohne etwas zu schreiben.

Eigenschaft
Wert

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).

Eigenschaft
Wert

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.

Eigenschaft
Wert

Erforderlich

falsch

Standardwert

Typ

Zeichenfolge

EmailFrom

Absenderpostfach für den Bericht. Gebunden an die Org-Einstellung "RJReport.EmailSender".

Eigenschaft
Wert

Erforderlich

falsch

Standardwert

Typ

Zeichenfolge

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.

Eigenschaft
Wert

Erforderlich

falsch

Standardwert

False

Typ

Boolesch

ContainerName

Für den Upload verwendeter Storage-Container. Pro Runbook konfiguriert (keine globale RJReport-Einstellung).

Eigenschaft
Wert

Erforderlich

falsch

Standardwert

shared-channel-owners

Typ

Zeichenfolge

ResourceGroupName

Ressourcengruppe, die den Storage Account enthält. Gebunden an "RJReport.StorageAccount.ResourceGroup".

Eigenschaft
Wert

Erforderlich

falsch

Standardwert

Typ

Zeichenfolge

StorageAccountName

Für den Upload verwendetes Storage Account. Gebunden an "RJReport.StorageAccount.StorageAccountName".

Eigenschaft
Wert

Erforderlich

falsch

Standardwert

Typ

Zeichenfolge

LinkExpiryDays

Tage bis zum Ablauf des generierten Download-Links. Gebunden an "RJReport.StorageAccount.LinkExpiryDays".

Eigenschaft
Wert

Erforderlich

falsch

Standardwert

6

Typ

Int32

Zurück zur Übersicht der Runbook-Referenz

Zuletzt aktualisiert

War das hilfreich?