Rundeck CE with OAuth

25 Jul 2024

Wie vielleicht bekannt ist unterstützt nur die Rundeck Enterprise Version SSO (Single Sign On) mit OAuth, aber es gibt eine Möglichkeit das mit PreAuth Headern in der Community Edition zu realisieren. Dazu habe ich einen konfigurierbaren Docker Container gebaut, auf der Basis vom offiziellen Rundeck CE Container erweitert um NginX und OAuth2-Proxy.

Beispiel mit GitLab als OAuth Provider

  1. Erstelle eine user-owned, group-owned oder instance-wide Anwendung
    Gitlab_Application Sicher die Application ID (als RUNDECK_OAUTH_CLIENT_ID) und das Secret (als RUNDECK_OAUTH_CLIENT_SECRET). Die Callback URL sollte die Gleiche sein wie die RUNDECK_GRAILS_URL plus "/oauth2/callback". Die Callback URL kann jederzeit verändert werden und nur für lokale Tests auf localhost gesetzt sein. Folgende Scopes müssen gesetzt sein:
    • api (Access the API on your behalf)
    • read_api (Read Api)
    • read_user (Read your personal information)
    • openid (Authenticate using OpenID Connect)
    • profile (Allows read-only access to the user's personal information using OpenID Connect)
    • email (Allows read-only access to the user's primary email address using OpenID Connect)
  2. Das RUNDECK_OAUTH_COOKIE_SECRET kann man selbst erstellen
    python -c 'import os,base64; print(base64.urlsafe_b64encode(os.urandom(32)).decode())'

    wie unter OAuth2-Proxy documentation beschrieben, das RUNDECK_OAUTH_COOKIE_SECRET wird zum absichern und verschlüsseln des Cookies verwendet.

  3. Die RUNDECK_OAUTH_OIDC_URL ist die GitLab URL mit Übertragungsprotokoll, z.B. https://gitlab.my-organisation.com
  4. Als RUNDECK_OAUTH_ADMIN_GROUP sollte eine Gruppe verwendet in die Dein GitLab User Mitglied ist. Andernfalls wird nur der Rundeck Gruppen "admin" entsprechende Privilege eingeräumt und Du kannst mit der Rundeck Instanz gar nichts machen.
  5. Jetzt den Container wie folgt starten
    docker run -it --rm --name rundeck-oauth -p 8080:80 \  
    -e RUNDECK_GRAILS_URL=http://localhost:8080 \  
    -e RUNDECK_PREAUTH_ENABLED=true \  
    -e RUNDECK_OAUTH_CLIENT_ID="xxxxxx" \  
    -e RUNDECK_OAUTH_CLIENT_SECRET="gloas-xxxxxx" \  
    -e RUNDECK_OAUTH_COOKIE_SECRET="xxxxx" \  
    -e RUNDECK_OAUTH_OIDC_URL="https://gitlab.my-organisation.com" \  
    -e RUNDECK_OAUTH_ADMIN_GROUP="rundeck" \  
    ghcr.io/geraldhansen/rundeck-oauth
  6. Wenn Du jetzt den Browser mit http://localhost:8080 öffnest, solltest Du die GitLab login Option sehen SignIn_with_GitLab Dort muss Du Deine lokale Rundeck Instanz authorisieren
    Authorize_Rundeck_OAuth_Login Wenn alles richtig gemacht wurde, siehst Du jetzt die Rundeck Startseite.