# Runbook-Berechtigungen

{% embed url="<https://www.youtube.com/watch?v=bLi_k_Yzhyw>" %}

## Geltungsbereich

Dies behandelt, wie der Zugriff auf bestimmte Runbooks in einem Azure-Tenant gewährt/verweigert wird. Wenn Sie nach Antworten dazu suchen, welche MS-Graph-API-Berechtigungen erforderlich sind, um eine bestimmte Aktion als Runbook auszuführen, werfen Sie bitte einen Blick auf unsere [Anforderungen](https://docs.realmjoin.com/de/automatisierung/connecting-azure-automation/azure-ad-roles-and-permissions).

## Übersicht

„Runbook Permissions“ definieren die Sichtbarkeit von Runbooks für bestimmte Benutzer. Bestimmte Runbooks können außerdem global gesperrt/ausgeblendet werden.

Wie bei den [Runbook Customizations](https://docs.realmjoin.com/de/automatisierung/runbooks/runbook-customization)wird das Definieren dieser Berechtigungen erledigt, indem als RealmJoin-Administrator im Webportal von RealmJoin eine JSON-formatierte Konfiguration unter <https://portal.realmjoin.com/settings/runbooks-permissions> .

### Über diesen Leitfaden

Wir geben zunächst eine kurze Beschreibung der Syntax und erstellen dann Schritt für Schritt ein vollständiges Beispiel. Gehen Sie gern direkt zum vollständigen Beispiel und beginnen Sie von [dort](#targetentitygroups).

## Konfigurationssyntax

### Runbook-Namen

Runbooks werden über ihre Namen referenziert, wie sie im Azure Automation Account zu sehen sind, z. B. `rjgit-group_general_remove-group`.

Platzhalterzeichen ('\*') können verwendet werden, um mehrere Runbooks abzugleichen. Mehrere Platzhalter können im selben String verwendet werden, z. B. `rjgit-*_security_*`. Dies würde alle der folgenden Beispiele betreffen:

* `rjgit-org_security_list-inactive-users`
* `rjgit-device_security_enable-or-disable-device`

Das Präfix `rjgit-` bezeichnet Runbooks, die aus unserem öffentlichen GitHub-Repository importiert werden. Kundenspezifische Runbooks haben kein Präfix, z. B. `user_userinfo_custom-runbook`

### Entra ID-Gruppen

Entra ID-Gruppen werden über ihre Objekt-ID referenziert, wie z. B. `91688d11-9a34-42cd-8d1e-ce617d6c1234`. Derzeit können nur Sicherheitsgruppen verwendet werden.

## JSON-Struktur und Beispiel

Wir werden ein vollständiges Konfigurationsbeispiel Schritt für Schritt aufbauen.

Eine JSON-Konfiguration besteht aus mehreren Abschnitten, aber alle Abschnitte sind optional und können weggelassen werden.

Es ist erlaubt, Kommentare mit dem Präfix "//" hinzuzufügen.

### EnabledRunbookPatterns

Dieser Abschnitt enthält eine Liste von Runbooks, die verwendet werden dürfen. Wenn dieser Abschnitt weggelassen wird, sind standardmäßig alle Runbooks aktiviert/erlaubt.

Wenn Sie diesen Abschnitt definieren, sind nur die in diesem Abschnitt genannten Runbooks für jede Rolle / den Support und Administrator nutzbar.

#### Beispiel

* Nur bestimmte, einzelne Runbooks erlauben, indem ihr vollständiger Name angegeben wird

  `rjgit-group_general_remove-group`
* Alle gerätebezogenen Runbooks aus unserem gemeinsamen Repository erlauben

  `rjgit-device_*`
* Alle gemeinsamen Benutzer-Runbooks erlauben

  `rjgit-user_*`
* Alle kundenspezifischen (lokalen), benutzerbezogenen Runbooks erlauben

  `user_*`

Dadurch werden implizit viele gruppenbasierte und alle organisationsbasierten Runbooks ausgeschlossen. Seien Sie sich dessen bewusst.

```
{
  "EnabledRunbookPatterns": [
    "rjgit-group_general_remove-group",
    "rjgit-device_*",
    "rjgit-user_*",
    "user_*"
  ]
}
```

### DisabledRunbookPatterns

Eine Liste von Runbooks, die global deaktiviert / verboten sind. Wenn dieser Abschnitt weggelassen wird oder leer ist, sind alle aktivierten Runbooks (angegeben über [EnabledRunbookPatterns](#enabledrunbookpatterns)) nutzbar.

Einträge in diesem Abschnitt haben Vorrang vor Einträgen in [EnabledRunbookPatterns ](#enabledrunbookpatterns)- die Runbooks werden ausgeblendet/sind für niemanden in diesem Tenant nutzbar.

#### Beispiel

Wir werden den `EnabledRunbookPatterns` Abschnitt von vorhin wiederverwenden.

* Alle gemeinsamen (`rjgit-`) Runbooks in der `security` Kategorie deaktivieren.

```
{
  "EnabledRunbookPatterns": [
    "rjgit-group_general_remove-group",
    "rjgit-device_*",
    "rjgit-user_*",
    "user_*"
  ],
  "DisabledRunbookPatterns": [
    "rjgit-*_security_*"
  ]
}
```

### Rollen

In diesem Abschnitt können Sie einer Entra ID-Gruppe eine Liste von Runbooks zuweisen. Dadurch können Sie mehrere Support-/Operator-Rollen in Ihrem Tenant definieren.

Wenn dieser Abschnitt weggelassen wird, haben alle RealmJoin-Supportmitarbeiter und Administratoren Zugriff auf alle in den vorherigen Abschnitten angegebenen Runbooks.

{% hint style="warning" %}
Wenn aktiviert, sehen alle Benutzer, die keiner Rolle angehören, keine Runbooks.
{% endhint %}

#### Beispiel

Fortfahrend mit dem, was wir haben, erstellen wir eine Device-Support-Rolle `DeviceAdmin` und eine User-Support-Rolle `UserAdmin`.

Wir werden diese Rollen auf mehrere Entra ID-Gruppen anwenden und für jede Rolle eine Liste erlaubter Runbooks angeben. Beachten Sie - dies beschränkt die User-Support-Rolle auf nur eine kleine Menge von Runbooks.

Fügen wir Kommentare ("//") neben der Objekt-ID der Gruppe hinzu, die dem Leser helfen, indem sie die Namen der Entra ID-Gruppen angeben.

```json
{
  "EnabledRunbookPatterns": [
    "rjgit-group_general_remove-group",
    "rjgit-device_*",
    "rjgit-user_*",
    "user_*"
  ],
  "DisabledRunbookPatterns": [
    "rjgit-*_security_*"
  ],
  "Roles": {
    "DeviceAdmin": {
      "Groups": [
        "9cbfc0af-c217-41e9-b790-3043788f1234", // 1st Device Support AAD Group
        "5555c0af-c217-41e9-b790-3043788f1234"  // 2nd Device Support AAD Group - other team
      ],
      "AllowedRunbookPatterns": [
        "rjgit-device_*"
      ]
    },
    "UserAdmin": {
      "Groups": [
        "1234c0af-c217-41e9-b790-3043788f1234" // User Support AAD Group
      ],
      "AllowedRunbookPatterns": [
        "rjgit-user_general_assign-or-unassign-license",
        "rjgit-user_mail_*",
        "user_*"
      ]
    }
  }
}
```

Jetzt kann die `UserAdmin` Rolle:

* Lizenzen allen Benutzern in Ihrem Tenant zuweisen
* E-Mail-Adressen aller Benutzer in Ihrem Tenant ändern

Die `DeviceAdmin` Rolle kann

* jedes Gerät in Ihrem Tenant löschen

### TargetEntityGroups

Vielleicht haben Sie einige wichtige VIP-Benutzer. Es sollte nicht möglich sein, dass beliebiges Support-Personal ein VIP-Gerät löscht oder die E-Mail-Adresse eines VIPs ändert. Wir können "Targeting" verwenden, um Rollen auf kritische Benutzer für dedizierte Teams zu beschränken.

„Devices“ werden über ihren primären/zugewiesenen Benutzer angesprochen, nicht über das Geräteobjekt in Entra ID. Dadurch lässt sich ein rein benutzerbasiertes Gruppenmodell beibehalten.

Wir nehmen an, dass Entra ID-Gruppen existieren, die kritische VIP-Benutzer enthalten. Mit diesem Abschnitt können wir einige kritischere Rollen und Runbooks sorgfältig auf diese spezifischen Entra ID-Gruppen (Ziele) eingrenzen.

Offensichtlich werden, wenn Sie diesen Abschnitt weglassen, alle Benutzer/Gruppen/Devices in Ihrem Tenant gleich behandelt.

Wenn Sie TargetEntityGroups definieren, sollte dies keine Auswirkungen auf andere Gruppen haben, die im Abschnitt nicht erwähnt werden.

#### Vollständiges Beispiel

Nehmen wir an, die Gruppe `0000c0af-c217-41e9-b790-3043788f0000` ist unsere Gruppe der VIP-Benutzer.

Wir führen eine neue Entra ID-Gruppe ein `4444c0af-c217-41e9-b790-3043788f4444` mit unterstützendem Personal, das die Freigabe erhalten hat, VIP-Benutzer zu verwalten. Dieses unterstützende Personal sollte außerdem alle anderen grundlegenden Support-Berechtigungen haben, daher werden wir es den bestehenden Rollen hinzufügen.

Das „Einschränken“ einer Rolle gewährt einem Support-Mitarbeiter keine neuen Rollen.

```json
{
  "EnabledRunbookPatterns": [
    "rjgit-group_general_remove-group",
    "rjgit-device_*",
    "rjgit-user_*",
    "user_*"
  ],
  "DisabledRunbookPatterns": [
    "rjgit-*_security_*"
  ],
  "Roles": {
    "DeviceAdmin": {
      "Groups": [
        "9cbfc0af-c217-41e9-b790-3043788f1234", // 1st Device Support AAD Group
        "5555c0af-c217-41e9-b790-3043788f1234", // 2nd Device Support AAD Group - other team
        "4444c0af-c217-41e9-b790-3043788f4444"  // VIP Support Crew
      ],
      "AllowedRunbookPatterns": [
        "rjgit-device_*"
      ]
    },
    "UserAdmin": {
      "Groups": [
        "1234c0af-c217-41e9-b790-3043788f1234", // User Support AAD Group
        "4444c0af-c217-41e9-b790-3043788f4444"  // VIP Support Crew
      ],
      "AllowedRunbookPatterns": [
        "rjgit-user_general_assign-or-unassign-license",
        "rjgit-user_mail_*",
        "user_*"
      ]
    }
  },
  "TargetEntityGroups": {
    "0000c0af-c217-41e9-b790-3043788f0000": {  // VIP Users - Treat with care!
      "RestrictRoles": {
        "UserAdmin": [
          "4444c0af-c217-41e9-b790-3043788f4444" // VIP Support
        ],
        "DeviceAdmin": [
          "4444c0af-c217-41e9-b790-3043788f4444" // VIP Support
        ]
      }
    }
  }
}
```

#### **Beispiel: US-Support-Mitarbeiter darauf beschränken, nur US-Benutzer zu verwalten**

In diesem Szenario haben wir Support-Mitarbeiter mit Sitz in den USA, die nur Benutzer verwalten sollen, die sich in den USA befinden. Um diese Einschränkung durchzusetzen:

* Erstellen Sie eine Berechtigungsregel, die US-Supportern ausdrücklich **verweigert** Runbooks auf **allen Benutzern**.
* Fügen Sie eine Ausnahmeregel hinzu, die ausdrücklich **erlaubt** die Ausführung von Runbooks nur für **US-Benutzer**.

Dies stellt sicher, dass US-Supporter Berechtigungen erhalten, die strikt auf ihre vorgesehene Zielgruppe (US-Benutzer) beschränkt sind, und verhindert versehentliche Interaktionen mit Benutzern außerhalb dieses Bereichs.

**Implementierung**

1. Eine Entra-Gruppe für Runbook-Ausführer muss im Realm Join Portal zugewiesen sein
   1. Einstellungen > Berechtigungen > Runbook Runner Permissions
   2. Die Entra-Gruppe der US-Supporter muss Mitglied der Runbook Runners Group sein, um den allgemeinen Runbook-Betrieb im RealmJoin Portal zu ermöglichen.
2. Hinzufügen einer neuen Rolle unter Einstellungen > Runbook Permissions
   1. Fügen Sie im Abschnitt Roles die Rolle USSupporters mit ihrer Entra-Gruppe (Gruppenobjekt-ID) hinzu
   2. Fügen Sie AllowedRunbookPatterns für die USSupporters hinzu
3. Ändern Sie die TargetEntityGroups
   1. Die All-Users-Gruppe muss die Rolle USSupporters mit einem leeren Wert einschränken (hier wird keine Entra-Gruppenobjekt-ID hinzugefügt). Dies ist eine implizite Verweigerung!
   2. Die US-Users-Gruppe muss die Rolle USSupporters auf die Objekt-ID der Entra-Gruppe der US-Supporter einschränken

<figure><img src="https://2298793958-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkrcM7cKOpXKri1kVrh%2Fuploads%2FZ56Ipx6VuZDjIeZO2MTC%2Fimage.png?alt=media&#x26;token=e3f5fe54-0d17-46f0-a106-f51d548bde64" alt=""><figcaption><p>US-Support-Mitarbeiter darauf beschränken, nur US-Benutzer zu verwalten</p></figcaption></figure>

Unten das vollständige Beispiel für dieses Szenario:

```json
{
  // Portal-Berechtigung:
  // Runbook Runner Role: US Supporters

  // Gruppenmitgliedschaften:
  // 3e1e7540-7f0c-483c-b9bf-500342e2467c: All-Users
  // c603278c-cc36-4661-bb7a-eecb7ab079f9: US Supporters
  // 0f76d01e-cc6b-4553-bf1d-e4ccedd9c824: US Users

  "EnabledRunbookPatterns": [ // Allgemeine Aktivierung von Mail- und Sicherheits-Runbooks
    "rjgit-*_mail_*",
    "rjgit-*security*"
  ],
  "DisabledRunbookPatterns": [
    "*password*"
  ],

  "Roles": {
    "USSupporters": {
      "Groups": [
        "c603278c-cc36-4661-bb7a-eecb7ab079f9" // US Supporters
      ],
      "AllowedRunbookPatterns": [ // erlaubte Runbooks für diese Rolle - US Supporters
        "rjgit-user_*",
        "rjgit-device_*",
        "rjgit-group_*"
      ]
    }
  },
  
  "TargetEntityGroups": {
    "3e1e7540-7f0c-483c-b9bf-500342e2467c": { // All-Users
      "RestrictRoles": {
        "USSupporters": [
          // generell keine Runbooks für irgendwelche US Supporters erlauben
        ]
      }
    },
    "0f76d01e-cc6b-4553-bf1d-e4ccedd9c824": { // US Users
      "RestrictRoles": {
        "USSupporters": [
          "c603278c-cc36-4661-bb7a-eecb7ab079f9" // US Supporters
        ]
      }
    }
  }
}
```

### SchedulingEnabledRunbookPatterns

Dieser Abschnitt enthält eine Liste von Runbooks, die als „planbar“ markiert werden. RealmJoin Port erlaubt es, Zeitpläne für diese Runbooks zuzuweisen / zu verwalten. Siehe [scheduling](https://docs.realmjoin.com/de/automatisierung/runbooks/scheduling "mention").

Das folgende Beispiel beschreibt das Standardverhalten, wenn SchedulingEnabledRunbookPatterns nicht definiert sind:

```json
{
  "SchedulingEnabledRunbookPatterns": [
    "*_scheduled"
  ]
}
```

### SchedulingDisabledRunbookPatterns

Dieser Abschnitt enthält eine Liste von Runbooks, die auf die schwarze Liste gesetzt werden, damit sie nicht als „planbar“ markiert werden. RealmJoin Port erlaubt es nicht, Zeitpläne für diese Runbooks zuzuweisen / zu verwalten. Siehe [scheduling](https://docs.realmjoin.com/de/automatisierung/runbooks/scheduling "mention").

Ein Runbook, das sowohl in SchedulingEnabledRunbookPatterns als auch in SchedulingDisabledRunbookPatterns enthalten ist, wird **Skywalker** planbar sein.&#x20;

Standardmäßig sind keine Runbooks auf der schwarzen Liste. Das folgende Beispiel demonstriert lediglich die Syntax:

```json
{
  "SchedulingDisabledRunbookPatterns": [
    "rjgit-user_*"
  ]
}
```
