Authorizierung¶
Die Authorizierung legt fest, welche Benutzer und Service Accounts für einen Herausgeber über die ODI Daten hochladen, aktualisieren oder Schemata veröffentlichen dürfen.
Ablauf im Überblick¶
Bevor ein Herausgeber Daten über die API veröffentlichen kann, müssen zunächst die passenden Berechtigungen eingerichtet werden. Danach können die Zugangsdaten genutzt werden, um Daten über die ODI-API zu veröffentlichen oder zu aktualisieren.
1. Herausgeber-Berechtigung anlegen — In Keycloak eine Gruppe für den Herausgeber anlegen und die API-Tokens für CKAN und GitLab als Gruppenattribute hinterlegen. Diese Gruppe bildet die gemeinsame Berechtigungsbasis für alle Benutzer und Service Accounts des Herausgebers. (Diese Seite)
2. Client anlegen und Herausgeber zuweisen — In Keycloak einen Client anlegen und dem Herausgeber zuweisen. Erst dadurch erhält der Client die in der Gruppe hinterlegten Berechtigungen. Siehe Programmatischen API-Zugriff einrichten.
3. Zugangsdaten weitergeben — Client ID und Client Secret an das Team oder System weitergeben, das Daten veröffentlichen soll. Diese Zugangsdaten sind umgebungsspezifisch und sollten sicher übertragen und gespeichert werden.
4. Daten veröffentlichen — Mit Client ID und Client Secret kann ein Access-Token abgerufen und die ODI-API verwendet werden, um Datensätze zu veröffentlichen oder zu aktualisieren: - Datensatz hochladen - Datensatz aktualisieren - Datensatzserie fortführen
Berechtigung für einen Herausgeber anlegen¶
In diesem Schritt wird festgelegt, welche Rechte einem Herausgeber in der ODI zur Verfügung stehen. Dazu werden in Keycloak Gruppen mit Tokens angelegt, über die die passenden Berechtigungen für Benutzer und Service Accounts bereitgestellt werden.
Sicherheitsmodell: Capability-Based Security
Die ODI verwendet ein Capability-Based Security-Modell: Der Besitz eines Tokens oder API-Keys ist selbst die Berechtigung — nicht die Identität des Benutzers.
Wer einen gültigen Token vorlegt, darf die damit verknüpfte Aktion ausführen. Das Zielsystem (CKAN, GitLab) prüft primär den Token, nicht das aufrufende Konto. Die Berechtigung liegt damit im Schlüssel selbst ("Possession of token → access").
In der Praxis bedeutet das: Ein CKAN-API-Token, der einer Keycloak-Gruppe zugewiesen ist, gewährt allen Mitgliedern dieser Gruppe — Benutzer wie Service Accounts — dieselben Schreibrechte in CKAN. Tokens müssen daher sicher verwahrt und bei Kompromittierung umgehend erneuert werden.
Weiterführend: Capability-based security (Wikipedia)
Begriffe: Service Account = Client
In dieser Dokumentation werden Service Account und Client synonym verwendet. Ein Keycloak-Client, der für den maschinellen API-Zugriff eingerichtet wird, entspricht dem, was in anderen Kontexten oft als Service Account bezeichnet wird.
Voraussetzungen¶
- Administratorrechte in Keycloak
- CKAN-API-Token und GitLab-Token für den Herausgeber liegen vor
Es gibt zwei Varianten für die Gruppenstruktur: Variante A verwendet eine einzige Gruppe pro Herausgeber, die alle Berechtigungen enthält — einfach zu verwalten, aber ohne Unterscheidung zwischen Schreiben-Rechten bei CKAN und Schreib-Rechten bei GitLab. Variante B trennt die Schreib-Rechte auf separate Gruppen auf und ist geeignet, wenn z. B. nicht jeder Service Account sowohl Daten hochladen als auch Schemata veröffentlichen soll.
Variante A – Eine Gruppe pro Herausgeber¶
Eine einzige Gruppe enthält beide Attribute: ckan-token und gitlab-token. Alle Mitglieder der Gruppe können damit sowohl Daten in CKAN hochladen als auch Schemata in GitLab anlegen.
Geeignet wenn:
- Alle Benutzer und Service Accounts eines Herausgebers denselben Zugriff benötigen
- Keine feingranulare Trennung erforderlich ist
- Service Accounts sollen sowohl Daten hochladen als auch Schemata veröffentlichen können
Beispiel: Landesamt für Umwelt Schleswig-Holstein¶
| Gruppenname | landesamt-fuer-umwelt-sh |
Attribut ckan-token |
<CKAN-API-Token des LfU> |
Attribut gitlab-token |
<GitLab-Token des LfU> |
| Mitglieder | Sachbearbeiter-Konten, Service Account landesamt-fuer-umwelt-sh-api-client |
Schritte in Keycloak¶
- Unter Groups eine neue Gruppe anlegen, z. B.
landesamt-fuer-umwelt-sh. - Im Tab Attributes zwei Einträge hinzufügen:
ckan-token=<Wert>gitlab-token=<Wert>
- Benutzerkonten und Service Accounts der Gruppe zuweisen — wie ein Service Account einer Gruppe zugewiesen wird, ist unter Programmatischen API-Zugriff einrichten, Schritt 4 beschrieben.
Variante B – Getrennte Gruppen für CKAN und GitLab¶
Pro Herausgeber werden zwei Gruppen angelegt: eine mit dem ckan-token, eine mit dem gitlab-token. So lässt sich steuern, welche Benutzer oder Service Accounts nur Daten hochladen dürfen und welche zusätzlich Schemata veröffentlichen können.
Geeignet wenn:
- Unterschiedliche Rollen innerhalb eines Herausgebers vorliegen — etwa Fachanwender laden Daten hoch, während die IT-Abteilung Schemata verwaltet
- Für Upload und Schema-Verwaltung separate Service Accounts verwendet werden
Beispiel: Landesamt für Umwelt Schleswig-Holstein¶
Gruppe 1 – CKAN-Berechtigung
| Gruppenname | landesamt-fuer-umwelt-sh-ckan |
Attribut ckan-token |
<CKAN-API-Token des LfU> |
| Mitglieder | Sachbearbeiter-Konten, Service Account landesamt-fuer-umwelt-sh-upload-client |
Gruppe 2 – GitLab-Berechtigung
Diese Gruppe ist optional und muss nur angelegt werden, wenn der Herausgeber Schemata in GitLab veröffentlichen und aktualiseren soll.
| Gruppenname | landesamt-fuer-umwelt-sh-gitlab |
Attribut gitlab-token |
<GitLab-Token des LfU> |
| Mitglieder | Schema-Verantwortliche, Service Account landesamt-fuer-umwelt-sh-schema-client |
Schritte in Keycloak¶
- Unter Groups zwei neue Gruppen anlegen:
landesamt-fuer-umwelt-sh-ckanundlandesamt-fuer-umwelt-sh-gitlab. - In
landesamt-fuer-umwelt-sh-ckanim Tab Attributes nurckan-tokensetzen. - In
landesamt-fuer-umwelt-sh-gitlabim Tab Attributes nurgitlab-tokensetzen. - Benutzer und Service Accounts jeweils nur der Gruppe zuweisen, die ihrer Rolle entspricht.
Weiterführende Links¶
- Programmatischen API-Zugriff einrichten — Service Account anlegen und einer Gruppe zuweisen