GitHub dokumentiert für einen ephemeren selbst gehosteten Runner genau einen Auftrag; danach wird die Runner-Registrierung entfernt (GitHub-Dokumentation zu selbst gehosteten Runnern). Das beweist jedoch nicht, dass der darunterliegende Mac bereinigt ist. Diese Woche sollte das Plattformteam deshalb zuerst festlegen, welche Aufträge vertrauenswürdig sind und wie der Host nach jedem Lauf nachweisbar zurückgesetzt oder neu aufgebaut wird. Für stabile, vertrauenswürdige Aufträge kann ein dauerhafter Runner passen; für nicht vertrauenswürdige oder privilegierte Aufträge ist ein einmaliger Runner mit geprüfter Bereinigung vorzuziehen.

Dieser Leitfaden richtet sich an IT-Verantwortliche, die Mac Runner für GitHub Actions betreiben und deren Lebenszyklus festlegen müssen.
Er unterstützt Plattformteams beim Schutz von CI-Geheimnissen und technischen Leitungen bei der Abgrenzung von Registrierung, Host-Bereinigung und Wiederaufbau.

01

Vertrauensgrenzen vor dem Runner-Modell festlegen

Die Zugehörigkeit eines Workflows zu derselben Organisation oder demselben Repository macht seinen Code nicht automatisch vertrauenswürdig. Entscheidend ist, wer Änderungen einbringen kann, welcher Workflow ausgelöst wird, welche Berechtigungen verfügbar sind und ob der Auftrag Zugang zu Signaturidentitäten, Secrets oder internen Netzen erhält. Diese Einschätzung gehört vor die Wahl des Runner-Typs: Ein einmaliger Runner kann einen riskanten Auftrag begrenzen, macht ihn aber nicht vertrauenswürdig.

Prüfen Sie zunächst die Auslöser und den tatsächlichen Workflow-Inhalt. Ein gewöhnlicher Pull-Request-Workflow kann Code aus einem Beitrag ausführen. Besondere Vorsicht gilt für pull_request_target: GitHub warnt davor, nicht vertrauenswürdigen Pull-Request-Code in diesem Kontext auszuführen, insbesondere wenn der Workflow auf Geheimnisse oder Berechtigungen zugreifen kann (Sicherheitshinweise zu pull_request_target). Die Trigger-Regel allein reicht nicht als Freigabe; maßgeblich ist, ob der ausgeführte Code aus einer kontrollierten Quelle stammt und welche Rechte er tatsächlich erhält.

Erstellen Sie für jede Auftragsklasse eine kurze Vertrauensbeschreibung:

  • Vertrauenswürdige Änderungen: freigegebene Quellzweige, kontrollierte Änderungen und eingeschränkte Workflow-Rechte.
  • Nicht vertrauenswürdiger Code: Beiträge oder Abhängigkeiten, deren Inhalt nicht vorab geprüft wurde; keine Signaturidentität und keine unnötigen internen Zugänge bereitstellen.
  • Geschützte Veröffentlichungen: nur nach den vorgesehenen Freigaben und mit eng begrenztem Zugriff auf Signaturmaterial und Bereitstellungsziele.

GitHub beschreibt, dass Berechtigungen für GITHUB_TOKEN über die Workflow-Konfiguration begrenzt werden können (Dokumentation zu GITHUB_TOKEN). Prüfen Sie diese Konfiguration gemeinsam mit den Repository- und Umgebungsregeln, statt aus einem erfolgreichen Freigabeprozess auf Host-Isolation zu schließen. Geschützte Umgebungen können zusätzliche Freigaben und Regeln für Bereitstellungsaufträge bereitstellen; sie sind aber kein Ersatz für eine saubere macOS-Ausführungsumgebung (Dokumentation zu Umgebungen und Bereitstellungsregeln).

02

Geheimnisse, Schlüsselbund und Netzwerkzugänge getrennt bewerten

Mac-CI-Aufträge benötigen oft Zugangsdaten, die nicht als gewöhnliche Umgebungsvariablen betrachtet werden sollten: GitHub-Secrets, kurzlebige Tokens, Zertifikate, private Signaturschlüssel, Schlüsselbund-Identitäten und Zugänge zu internen Diensten. Ermitteln Sie für jede Auftragsklasse, welche dieser Materialien beim Start verfügbar sind, welche Prozesse sie lesen dürfen und ob sie nach Ende des Auftrags auf dem Host verbleiben können.

GitHub weist darauf hin, dass Secrets in Workflows bewusst verwaltet und nur dort eingesetzt werden sollten, wo sie benötigt werden (Dokumentation zur Verwaltung von Secrets). Daraus folgt eine praktische Prüfregel: Wird ein Secret im Workflow nicht benötigt, darf der Workflow es nicht erhalten. Bei Signaturaufträgen ist zusätzlich zu klären, wie der Schlüsselbund entsperrt wird, welcher Benutzerkontext ihn nutzt und ob der Zugriff nach dem Auftrag endet. Ein späterer Workflow darf nicht allein deshalb als berechtigt gelten, weil er auf demselben Mac ausgeführt wird.

Ergänzen Sie die Prüfung um die Netzgrenze. Ein Runner, der interne Dienste erreichen kann, gibt ausgeführtem Code unter Umständen einen Weg in diese Umgebung. Beschränken Sie ausgehende Verbindungen soweit betrieblich möglich, trennen Sie Entwicklungs- und Veröffentlichungsaufträge und dokumentieren Sie, welche Systeme aus welchem Runner-Netz erreichbar sind. Eine Runner-Gruppe kann die Auswahl zulässiger Runner steuern, garantiert aber nicht, dass zwei Aufträge auf dem Host oder im Netzwerk voneinander isoliert sind.

Für die Abnahme genügt keine Aussage wie „das Token wird am Ende des Jobs gelöscht“. Prüfen Sie anhand der Workflow-Berechtigungen, der Host-Konfiguration und eines kontrollierten Testlaufs, ob Folgeaufträge auf Dateien, laufende Prozesse, Schlüsselbund-Einträge oder interne Dienste zugreifen können. Ein erfolgreicher Widerrufstest und ein dokumentierter Zugriffstest liefern belastbarere Hinweise als eine bloße Konfigurationsannahme.

03

Runner-Abmeldung und Mac-Bereinigung auseinanderhalten

Bei einem einmaligen Runner endet die Registrierung nach einem Auftrag. Das verhindert, dass genau diese Registrierung anschließend weitere Aufträge annimmt; es bestätigt aber nicht, dass auf dem physischen Mac oder einer virtuellen Ausführungsumgebung keine Spuren verbleiben. Dateien im Arbeitsbereich, abgebrochene Prozesse, temporäre Schlüsselbund-Daten, installierte Pakete und geänderte Systemeinstellungen können außerhalb der Runner-Registrierung bestehen bleiben.

Unterscheiden Sie deshalb vier Zustände, die im Betrieb leicht miteinander vermischt werden:

  • Auftrag beendet: Der Workflow hat seinen Lauf abgeschlossen oder ist abgebrochen. Daraus folgt noch keine Bereinigung.
  • Runner deregistriert: Die GitHub-Runner-Registrierung wurde entfernt. Das betrifft die Erreichbarkeit als Runner, nicht automatisch das Betriebssystem.
  • Host bereinigt: Definierte Daten und Zugänge wurden nach einem kontrollierten Verfahren entfernt.
  • Saubere Umgebung neu erstellt: Der Mac wird aus einem geprüften Basiszustand neu aufgebaut oder durch eine frische Umgebung ersetzt. Der neue Zustand wird vor dem nächsten Auftrag validiert.

GitHub dokumentiert die Verwendung ephemerer Runner und verweist auf die Verantwortung, die Laufzeitumgebung passend zu verwalten; die Dokumentation ersetzt jedoch keine Prüfung des konkreten Mac-Bereinigungsverfahrens (Referenz zu selbst gehosteten Runnern). Wenn ein Unternehmen einen Host nach der Deregistrierung weiterverwendet, muss es selbst zeigen können, welche Bereinigung erfolgt ist und wie deren Ergebnis geprüft wird.

Umsetzung: eine prüfbare Bereinigungskette einrichten

Führen Sie die Prüfung in einer kontrollierten Testumgebung durch, bevor ein neuer Lebenszyklus für Produktionsaufträge freigegeben wird:

  1. Auftragsklassen festlegen. Kennzeichnen Sie, ob der Job nicht vertrauenswürdigen Code, Signaturmaterial oder interne Netzwerkrechte benötigt.
  2. Workflow-Rechte begrenzen. Kontrollieren Sie die permissions-Einstellungen, den Zugriff auf Secrets und die Freigaberegeln für geschützte Bereitstellungen.
  3. Zustand vor dem Lauf erfassen. Dokumentieren Sie Basisversionen, installierte Werkzeuge und relevante Schlüsselbund- sowie Netzwerkkonfigurationen.
  4. Einen kontrollierten Auftrag ausführen. Verwenden Sie einen Testjob, der definierte Dateien und temporäre Zugänge erzeugt, ohne echte Produktionsgeheimnisse einzusetzen.
  5. Bereinigung oder Neuaufbau ausführen. Legen Sie fest, wer den Schritt ausführt, wann er startet und welches Ergebnis als erfolgreich gilt.
  6. Nach dem Lauf nachprüfen. Prüfen Sie Arbeitsbereich, Prozesse, Schlüsselbund-Zugriff, Runner-Registrierung und Netzwerkberechtigungen. Testen Sie auch, ob ein Folgejob die Testartefakte noch erreichen kann.
  7. Nachweise sichern. Übertragen Sie Bereinigungs- und Runner-Protokolle an einen Ort außerhalb des Hosts, falls die Umgebung anschließend gelöscht wird.

Einige lokale Prüfungen lassen sich in eine Abnahme aufnehmen. Die Befehle zeigen Zustände, beweisen aber für sich allein keine vollständige Bereinigung:

git status --short
security list-keychains -d user
security find-identity -v -p codesigning

Ein Team kann die erwartete Ausgabe zum jeweiligen Basiszustand dokumentieren und Abweichungen untersuchen. Erscheint nach einem abgeschlossenen Testauftrag eine unerwartete Identität oder bleibt ein Arbeitsbereich verändert, ist das ein Anlass, die Bereinigungsregel zu überarbeiten. Geben Sie in Protokollen keine privaten Schlüssel, Tokens oder Secret-Werte aus. Verwenden Sie für die Abnahme außerdem keine echten Signaturmaterialien, wenn ein Testzertifikat oder eine andere sichere Prüfmethode genügt.

04

Werkzeugkette und Arbeitsbereich auf Gleichheit prüfen

Der dauerhafte Betrieb hat einen praktischen Vorteil: Xcode, Abhängigkeiten und projektbezogene Caches können zwischen Aufträgen erhalten bleiben. Das erleichtert die Pflege einer bekannten Umgebung, macht den Zustand aber von Installationsänderungen und früheren Jobs abhängig. Eine einmalige Ausführung kann einen besser überprüfbaren Ausgangszustand liefern, wenn der Mac nach jedem Lauf tatsächlich neu erstellt wird; andernfalls bleibt das Wort „ephemer“ lediglich eine Eigenschaft der Runner-Registrierung.

Bewerten Sie die Umgebung nicht anhand der Runner-Bezeichnung, sondern anhand reproduzierbarer Prüfungen. Erfassen Sie, welche Xcode-Version und SDKs für den Workflow erwartet werden, wie Abhängigkeiten bezogen und geprüft werden, ob die Arbeitsverzeichnisse pro Auftrag frisch angelegt werden und ob Simulatorzustände nach einem Lauf zurückbleiben. Prüfen Sie auch, ob ein Auftrag systemweite Werkzeuge oder Einstellungen ändern kann. Diese Punkte sind insbesondere für iOS-CI relevant, weil ein signierter Build einen anderen Zugriff auf Schlüsselbund und Zertifikate benötigt als ein gewöhnlicher Testlauf.

Stellen Sie für jede relevante Werkzeugkomponente einen Sollzustand und eine Prüfmethode fest. Ein Versionsbericht aus dem Job kann zeigen, welche Werkzeuge verwendet wurden; ein Bereinigungsprotokoll muss dagegen belegen, was nach dem Job entfernt oder neu aufgebaut wurde. Vermischen Sie diese Nachweise nicht. Auch wenn ein Build im dauerhaften Modus erfolgreich läuft, belegt das weder einen identischen Zustand beim nächsten Lauf noch eine sichere Trennung der Aufträge.

05

Protokollierung und Wiederherstellung vor der Freigabe klären

Ein gelöschter oder neu erstellter Mac kann die Untersuchung eines fehlgeschlagenen Builds erschweren, wenn Runner- und Host-Protokolle nur lokal vorliegen. Legen Sie deshalb fest, welche Informationen vor dem Entfernen der Umgebung extern gesichert werden: Workflow-Ausgabe, Runner-Diagnose, Bereinigungsstatus und relevante Systemmeldungen. Beschränken Sie den Zugriff auf diese Protokolle und vermeiden Sie, Geheimnisse oder vertrauliche Build-Artefakte unkontrolliert zu archivieren.

GitHub stellt Dokumentation zur Überwachung und Fehlerbehebung selbst gehosteter Runner bereit; verwenden Sie diese als Grundlage für die betriebliche Erfassung und ergänzen Sie sie um lokale Host- und Bereinigungsnachweise (Anleitung zur Runner-Überwachung und Fehlerbehebung). Wenn Runner-Protokolle mit dem Host gelöscht werden, sichern Sie sie vorher an einem externen, zugriffsgeschützten Ort. Prüfen Sie bei einem Testlauf, ob die Diagnose auch nach dem Entfernen der Ausführungsumgebung noch möglich ist.

Deregistrierung ist ebenfalls ein eigener Vorgang, der protokolliert werden sollte. GitHub beschreibt, wie selbst gehostete Runner entfernt werden; vergleichen Sie den erwarteten Vorgang mit Ihrem tatsächlichen Ablauf und prüfen Sie, ob ein entfernter Runner nicht weiter als verfügbar geführt wird (Anleitung zum Entfernen selbst gehosteter Runner). Für den Betrieb zählt nicht nur, dass ein Auftrag beendet ist, sondern dass Runner-Status, Bereinigungsnachweis und Diagnoseunterlagen zusammenpassen.

06

Betriebsmodell anhand der Nachweise auswählen

Die folgende Matrix dient als Freigabehilfe. „Einmalig“ ist nur dann die stärkere Wahl für die Isolation, wenn das Team auch den Zustand des Hosts kontrolliert. „Dauerhaft“ ist nicht grundsätzlich unsicher, verlangt aber klare Grenzen zwischen Auftragsklassen und eine nachweisbare Pflege des gemeinsam genutzten Zustands.

Entscheidungsdimension Dauerhafter Mac Runner Einmaliger Mac Runner
Vertrauenswürdigkeit der Aufträge Geeignet, wenn Quellcode und Workflow kontrolliert sind und Berechtigungen begrenzt bleiben Vorzuziehen, wenn Code oder Auftrag ein erhöhtes Risiko für nachfolgende Jobs darstellt
Host-Zustand Werkzeuge und Caches bleiben verfügbar; Änderungen zwischen Jobs müssen geprüft werden Runner-Registrierung endet nach dem Auftrag; Host-Bereinigung oder Neuaufbau muss zusätzlich nachgewiesen werden
Geheimnisse und Signierung Zugriff auf Schlüsselbund und Secrets muss zwischen Aufträgen eingeschränkt und getestet werden Auftrag kann kurzlebiger angelegt werden; verbleibende Schlüssel und Host-Zugänge bleiben dennoch zu prüfen
Werkzeugkette Dauerhafte Installation kann den Betrieb vereinfachen, verlangt aber kontrollierte Aktualisierung Ein Basiszustand lässt sich leichter nachvollziehen, sofern der Neuaufbau reproduzierbar ist
Fehleranalyse Lokale Diagnose kann verfügbar bleiben; Zugriffs- und Aufbewahrungsregeln sind nötig Protokolle müssen vor dem Entfernen der Umgebung extern gesichert werden
Betriebsverantwortung Team pflegt Runner, Umgebung, Bereinigung und Wiederherstellung Team automatisiert zusätzlich Bereitstellung, Deregistrierung und Host-Neuaufbau oder überprüfte Bereinigung

Prüfen Sie die Matrix anhand Ihrer eigenen Aufträge, statt einen Modus pauschal für alle Workflows zu wählen. Wenn ausschließlich freigegebene Quellstände laufen, keine unnötigen Secrets verfügbar sind und das Team den Zustand zwischen Jobs kontrolliert, kann ein dauerhafter Runner vertretbar sein. Wenn nicht vertrauenswürdiger Code oder privilegierte Signaturaufträge ausgeführt werden, sollte das Team zuerst einen einmaligen Modus samt automatisierter Host-Bereinigung oder Neuaufbau testen.

Fehlt ein überprüfbarer Bereinigungsnachweis, darf die Entscheidung nicht auf dem Wort „ephemer“ oder einer entfernten Runner-Registrierung beruhen. Dann ist entweder ein sauberer Neuaufbau einzuführen oder der Auftrag auf eine Umgebung zu verlagern, deren Isolation und Wiederherstellung das Team tatsächlich belegen kann. Klären Sie außerdem, wer bei einem fehlgeschlagenen Bereinigungslauf den Runner sperrt, den Host untersucht und den Betrieb wieder freigibt. Ohne diese Zuständigkeit kann ein automatischer Ablauf einen unklaren Zustand lediglich schneller in den nächsten Job tragen.

07

Häufige Fragen zu einmaligen Mac Runnern

Worin unterscheiden sich einmalige und dauerhaft betriebene Mac Runner?

Ein einmaliger Runner wird für einen Auftrag registriert und danach deregistriert. Das begrenzt die Wiederverwendung derselben Runner-Registrierung, setzt aber weder das macOS-System noch Arbeitsbereiche, Schlüsselbund oder Netzwerkzugänge zurück. Ein dauerhafter Runner bleibt verfügbar und kann Werkzeugketten sowie Caches behalten; dafür müssen Verantwortliche die Bereinigung zwischen Aufträgen nachweisen.

Muss der Mac nach einem einmaligen Runner-Auftrag trotzdem bereinigt werden?

Ja, sofern der Host weiterverwendet wird. Die Deregistrierung des Runners ist kein Nachweis dafür, dass Dateien, Prozesse, Schlüsselbund-Einträge oder temporäre Zugangsdaten vom Mac entfernt wurden. Legen Sie fest, ob die Maschine zurückgesetzt, aus einem geprüften Basiszustand neu aufgebaut oder ersetzt wird, und bewahren Sie einen passenden Bereinigungsnachweis auf.

Wie lassen sich Geheimnisse bei mehreren Mac-CI-Aufträgen besser schützen?

Begrenzen Sie zunächst die Berechtigungen des Workflows und geben Sie Signaturidentitäten, Secrets und Netzwerkzugriffe nur den Aufträgen, die sie benötigen. Prüfen Sie anschließend, ob diese Materialien nach dem Auftrag auf dem Host verbleiben oder durch spätere Jobs erreichbar sind. Runner-Gruppen oder Freigaben ersetzen keine Betriebssystem- und Netzwerkisolation.

Welche iOS-CI-Aufträge eignen sich besonders für einmalige Mac Runner?

Einmalige Runner sind besonders zu prüfen, wenn Aufträge nicht vertrauenswürdigen Code ausführen, erhöhte Berechtigungen erhalten oder Zugang zu Signaturmaterial und internen Ressourcen haben. Auch bei geschützten Veröffentlichungsaufträgen kann ein frischer, überprüfbarer Zustand sinnvoll sein. Voraussetzung ist, dass Bereitstellung, Bereinigung, Protokollierung und Wiederherstellung tatsächlich automatisiert oder anderweitig verlässlich belegt sind.

08

Vor einem Wechsel auch die Mac-Betriebsform prüfen

Ein selbst betriebener Mac Runner bietet unmittelbare Kontrolle, bringt aber zugleich Beschaffung oder Kapazitätsplanung, Wartung und Wiederherstellungsverantwortung mit sich. Ein gemeinsam genutzter Host kann außerdem neue Fragen zu Schlüsselbund, Arbeitsbereichen und Netzwerkzugriff aufwerfen. Für kurzfristige Testphasen oder schwankenden Bedarf kann ein gemieteter Mac diese Bindung an selbst beschaffte Hardware verringern; dafür müssen Zugriffsweg, Host-Zustand, Bereinigungsverantwortung und Protokollierung vorab konkret geklärt werden.

NodeMini sollte daher erst dann als mögliche Mac-Option bewertet werden, wenn die tatsächlichen Bedingungen für Übergabe, Fernzugriff und Bereinigung für den vorgesehenen CI-Einsatz bestätigt sind. Die Übersicht zu Mac-Mietoptionen und die Informationen zur Mac-mini-Miete eignen sich als Ausgangspunkt für diese Prüfung; sie ersetzen nicht die technische Abnahme von Runner-Lebenszyklus und Geheimnisverwaltung. Ist eine eigene, dauerhaft kontrollierte Hardwareumgebung erforderlich oder müssen physische Schnittstellen verfügbar sein, kann der eigene Mac weiterhin die passendere Lösung sein. Für einen zeitlich begrenzten CI-Pilotbetrieb sollte die Entscheidung erst nach dem Nachweis fallen, dass die gewählte Umgebung tatsächlich die erwarteten Grenzen einhält.